Плохо! Плохо!:  0
Показано с 1 по 5 из 5

Тема: Отследить новые клавиши Falcao

  1. #1

    Bell Отследить новые клавиши Falcao

    Всем привет!

    Я использую боёвку Falcao в своей игре, в ней кодом уже указаны дополнительные кнопки на клавиатуре:
    [SPOILER]
    PHP код:
    module PearlKey
     
      
    # numbers
      
    N0 0x30N1 0x31N2 0x32N3 0x33N4 0x34
      N5 
    0x35N6 0x36N7 0x37N8 0x38N9 0x39
     
      
    # keys
      
    0x410x420x430x440x45
      F 
    0x460x470x480x490x4A
      K 
    0x4B0x4C0x4D0x4E0x4F
      P 
    0x500x510x520x530x54
      U 
    0x550x560x570x580x590x5A 
    [/SPOILER]

    Хочу узнать, как мне самостоятельно написать свой скрипт, ссылающийся на клавиши оттуда?
    Мне нужно написать скрипт, который бы отслеживал нажатие кнопки "Z", чтобы я мог привязать к нему срабатывание общего события, при этом запретив кнопке работать как аналог "Enter". =\

    Если я узнаю как писать такое, то смогу реализовать не одну задумку с использованием клавиатуры, т.к. у меня не только одна функция, они должны помочь расширить потенциал активной боёвки Falcao.

    Если нужно, вот весь скрипт Falcao, в котором указаны клавиши:

    [SPOILER]
    PHP код:
    #===============================================================================
    # * Falcao Pearl ABS script shelf # 1
    #
    # This script is the Heart of Pearl ABS Liquid, it handles all the character
    # management, the tools variables and the input module, enemy registration etc.
    #===============================================================================

    module PearlKernel
      
      
    # Default enemy sensor self switch
      
    Enemy_Sensor "B"
      
      
    # Default enemy sensor (distance in tiles the enemy is able to see the Player
      
    Sensor 7
      
      
    # Default enemy knockdown self switch (used to display knockdowned graphic)
      
    KnockdownSelfW "C"
      
      
    # Deafault Enemy collapse
      
    DefaultCollapse 'zoom_vertical'
      
      
    # While in party battle on map, the game player is the manager of the group
      # Which distance the player can see the enemies?, this is used, to determine
      # wheter the follower can start fighting. enemy away from this tiles
      # whil be ignored untill the player is near them
      # distamce measured in tiles
      
    PlayerRange 7
      
      
    # When a follower fail an action this balloon is played, runs out of mana etc.
      
    FailBalloon 1
      
      
    # Start the game with the ABS huds turned on?
      
    StartWithHud true
      
      
    # Do you want to activate the followers dead poses?
      
    FollowerDeadPose true
      
      
    # Do you want to activate the single player mode?
      # this only avoid you accesing the player slection menu and the K key is used
      # to open the quick tool selection menu
      
    SinglePlayer false
      
      
    #-----------------------------------------------------------------------------
      
    @gaugeback Color.new(000100)
      
    def self.draw_hp(objbattlerxywhcolorname=nil)
        
    tag 'Hp' color
        name 
    battler.name if !name.nil?
        
    draw_gauge(objbattler.hpbattler.mhpxywhctagname)
      
    end
      
      def self
    .draw_mp(objbattlerxywhcolorname=nil)
        
    tag 'Pw' color
        name 
    battler.name if !name.nil?
        
    draw_gauge(objbattler.mpbattler.mmpxywhctagname)
      
    end
      
      def self
    .draw_exp(objbattlerxywhcolorname=nil)
        
    tag 'Exp' color
        name 
    battler.name if !name.nil?
        
    draw_gauge(obj,battler.expbattler.next_level_expxywhctag,name)
      
    end
      
      def self
    .draw_tp(objxyactor)
        
    string 'Rtm ' + (actor.tp).to_i.to_s
        obj
    .fill_rect(x10 string.length 912, @gaugeback)
        
    obj.draw_text(xyobj.width32string)
      
    end
      
      def self
    .draw_gauge(objnmmaxxywhcoltagname)
        
    obj.font.shadow true
        w2 
    max if max == 0
        obj
    .fill_rect(x1w2, @gaugeback)
        
    obj.fill_rect(x+1y+1w2*nm/maxh/1col[0])
        
    obj.fill_rect(x+1h/2w2*nm/maxh/1col[1])
        
    obj.draw_text(x22w32nm.to_s2)
        
    obj.draw_text(422w32tag)
        
    obj.draw_text(x25w32name1) if !name.nil?
      
    end
      
      
    # image based bars definition 
      
    def self.image_hp(bitmapxybackimagebattlername=nil)
        
    tag 'Hp'
        
    name battler.name if !name.nil?
        
    draw_i_gauge(bitmapxybackimagebattler.hpbattler.mhptagname)
      
    end
      
      def self
    .image_mp(bitmapxybackimagebattlername=nil)
        
    tag 'Mp'
        
    name battler.name if !name.nil?
        
    draw_i_gauge(bitmapxybackimagebattler.mpbattler.mmptagname)
      
    end
      
      def self
    .image_exp(bitmapxybackimagebattlername=nil)
        
    tag 'Exp'
        
    name battler.name if !name.nil?
        
    expnexte battler.expbattler.next_level_exp
        draw_i_gauge
    (bitmapxybackimageexpnextetagname)
      
    end
      
      def self
    .draw_i_gauge(bitmapxybackimagenmmaxtagname)
        
    cw back.width  
        ch 
    back.height 
        max 
    if max == 0
        src_rect 
    Rect.new(00cwch)    
        
    bitmap.blt(10ch 30,  backsrc_rect)
        
    cw image.width  nm max
        ch 
    image.height 
        src_rect 
    Rect.new(00cwch)
        
    bitmap.blt(10ch 30imagesrc_rect)
        
    bitmap.draw_text(4back.height 14back.width32tag)
        
    bitmap.draw_text(12back.height 14back.width32nm.to_s2)
        
    bitmap.draw_text(610back.width32name1) if !name.nil?
      
    end
      
      def self
    .has_data?
        !
    user_graphic.nil?
      
    end
      
      def self
    .load_item(item
        @
    item item
      end
      
      def self
    .user_graphic()      @item.tool_data("User Graphic = "false)    end
      def self
    .user_animespeed()   @item.tool_data("User Anime Speed = ")       end
      def self
    .tool_cooldown()     @item.tool_data("Tool Cooldown = ")          end
      def self
    .tool_graphic()      @item.tool_data("Tool Graphic = "false)    end
      def self
    .tool_index()        @item.tool_data("Tool Index = ")             end
      def self
    .tool_size()         @item.tool_data("Tool Size = ")              end
      def self
    .tool_distance()     @item.tool_data("Tool Distance = ")          end
      def self
    .tool_effectdelay()  @item.tool_data("Tool Effect Delay = ")      end
      def self
    .tool_destroydelay() @item.tool_data("Tool Destroy Delay = ")     end
      def self
    .tool_speed()         @item.tool_float("Tool Speed = ")            end
      def self
    .tool_castime()       @item.tool_data("Tool Cast Time = ")         end
      def self
    .tool_castanimation() @item.tool_data("Tool Cast Animation = ")    end
      def self
    .tool_blowpower()     @item.tool_data("Tool Blow Power = ")        end
      def self
    .tool_piercing()      @item.tool_data("Tool Piercing = "false)   end
      def self
    .tool_animation() @item.tool_data("Tool Animation When = "falseend
      def self
    .tool_anirepeat() @item.tool_data("Tool Animation Repeat = ",false)end
      def self
    .tool_special() @item.tool_data("Tool Special = "false)          end
      def self
    .tool_target() @item.tool_data("Tool Target = "false)            end
      def self
    .tool_invoke() @item.tool_data("Tool Invoke Skill = ")             end
      def self
    .tool_guardrate() @item.tool_data("Tool Guard Rate = ")            end
      def self
    .tool_knockdown() @item.tool_data("Tool Knockdown Rate = ")        end
      def self
    .tool_soundse() @item.tool_data("Tool Sound Se = "false)         end
      def self
    .tool_itemcost() @item.tool_data("Tool Item Cost = ")              end
      def self
    .tool_shortjump() @item.tool_data("Tool Short Jump = "false)     end
      def self
    .tool_through() @item.tool_data("Tool Through = "false)          end
      def self
    .tool_priority() @item.tool_data("Tool Priority = ")               end
      def self
    .tool_selfdamage() @item.tool_data("Tool Self Damage = "false)   end
      def self
    .tool_hitshake() @item.tool_data("Tool Hit Shake = "false)       end
      def self
    .tool_combo() @item.tool_data("Tool Combo Tool = "false)         end
      
      def self
    .knock_actor(actor)
        
    actor.actor.tool_data("Knockdown Graphic = "false)
        
    actor.actor.tool_data("Knockdown Index = ")
        
    actor.actor.tool_data("Knockdown pattern = ")
        
    actor.actor.tool_data("Knockdown Direction = ")
        return 
    nil if a.nil?
        return [
    abcd]
      
    end
      
      def self
    .jump_hit?(target)
        
    target.enemy.tool_data("Hit Jump = "false) if target.is_a?(Game_Enemy)
        
    target.actor.tool_data("Hit Jump = "false) if target.is_a?(Game_Actor)
        return 
    true if !t.nil? and == "true"
        
    return true if t.nil?
        return 
    false
      end
      
      def self
    .voices(b)
        
    voices b.actor.tool_data("Battler Voices = ",false) if b.is_a?(Game_Actor)
        
    voices b.enemy.tool_data("Battler Voices = ",false) if b.is_a?(Game_Enemy)
        
    voices voices.split(", "unless voices.nil?
        
    voices
      end
      
      def self
    .hitvoices(b)
        
    voices b.actor.tool_data("Hit Voices = ",false) if b.is_a?(Game_Actor)
        
    voices b.enemy.tool_data("Hit Voices = ",false) if b.is_a?(Game_Enemy)
        
    voices voices.split(", "unless voices.nil?
        
    voices
      end
      
      
    # check for iconset
      
    def self.check_iconset(itemtagobject)
        
    data item.tool_data(tagfalse)
        return if 
    data.nil?
        
    = [item.icon_indexdata.to_sym] if data == "animated" ||
        
    data == "static" || data == "shielding"
        
    object.is_a?(Projectile) ? object.pro_iconset object.user_iconset v
      end
      
      def self
    .clean_back?
        @
    clean_back == true
      end
    end

    ($imported ||= {})["Falcao Pearl ABS Liquid"] = true

    class RPG::BaseItem
      attr_reader 
    :has_data
      def tool_data
    (commentsw=true)
        if @
    note =~ /#{comment}(.*)/i
          
    @has_data true
          
    return sw ? $1.to_i : $1.to_s.sub("\r","")
        
    end
      end
      
      def tool_float
    (comment)
        return  $
    1.to_f if @note =~ /#{comment}(.*)/i
      
    end
      
      def cool_enabled
    ?
        @
    cd_dis = @note.include?("Tool Cooldown Display = true") if @cd_dis.nil?
        @
    cd_dis
      end
      
      def itemcost
        
    if @i_cost.nil?
          @
    note =~ /Tool Item Cost = (.*)/? @i_cost = $1.to_i : @i_cost 0
        end
        
    @i_cost
      end
    end

    # Pearl ABS Input module
    module PearlKey
     
      
    # numbers
      
    N0 0x30N1 0x31N2 0x32N3 0x33N4 0x34
      N5 
    0x35N6 0x36N7 0x37N8 0x38N9 0x39
      
      
    # keys
      
    0x410x420x430x440x45
      F 
    0x460x470x480x490x4A
      K 
    0x4B0x4C0x4D0x4E0x4F
      P 
    0x500x510x520x530x54
      U 
    0x550x560x570x580x590x5A

      
    @unpack_string 'b'*256
      
    @last_array '0'*256
      
    @press = Array.new(256false)
      @
    trigger = Array.new(256false)
      @
    release = Array.new(256false)
      @
    getKeyboardState Win32API.new('user32''GetKeyboardState', ['P'], 'V')
      @
    getAsyncKeyState Win32API.new('user32''GetAsyncKeyState''i''i')
      @
    getKeyboardState.call(@last_array)
      
      @
    last_array = @last_array.unpack(@unpack_string)
      for 
    i in 0...@last_array.size
        
    @press[i] = @getAsyncKeyState.call(i) == false true
      end
     
      def self
    .update
        
    @trigger = Array.new(256false)
        @
    release = Array.new(256false)
        array = 
    '0'*256
        
    @getKeyboardState.call(array)
        array = array.
    unpack(@unpack_string)
        for 
    i in 0...array.size
          
    if array[i] != @last_array[i]
            @
    press[i] = @getAsyncKeyState.call(i) == false true
            
    if !@press[i]
              @
    release[i] = true
            
    else
              @
    trigger[i] = true
            end
          
    else
            if @
    press[i] == true
              
    @press[i] = @getAsyncKeyState.call(i) == false true
              
    @release[i] = true if !@press[i]
            
    end
          end
        end
        
    @last_array = array
      
    end
      
      def self
    .press?(key)
        return @
    press[key]
      
    end
     
      def self
    .trigger?(key)
        return @
    trigger[key]
      
    end
    end

    # Input module update engine
    class << Input
      alias falcaopearl_abs_cooldown_update update
      def Input
    .update
        update_pearl_abs_cooldown
        update_popwindow 
    if !$game_temp.nil? and !$game_temp.pop_windowdata.nil?
        
    update_pearl_abs_respawn
        falcaopearl_abs_cooldown_update
      end
      
      
      def update_pearl_abs_respawn
        $game_map
    .event_enemies.each do |event|
          if 
    event.respawn_count 0
            event
    .respawn_count -= 1
            
    if event.respawn_count == 0
              event
    .battler.remove_state(event.battler.death_state_id)
              
    event.battler.hp event.battler.mhp
              event
    .battler.mp event.battler.mmp
              event
    .apply_respawn
              event
    .animation_id event.respawn_anim
            end
          end
        end
      end
      
      alias falcaopearl_trigger trigger
    ?
      
    def trigger?(constant)
        return 
    true if constant == :and PearlKey.trigger?(PearlKey::B)
        
    falcaopearl_trigger(constant)
      
    end
      
      
    # pop window global
      
    def update_popwindow
        $game_temp
    .pop_windowdata[0] -= if $game_temp.pop_windowdata[0] > 0
        
    if @temp_window.nil?
          
    tag $game_temp.pop_windowdata[2]
          
    string $game_temp.pop_windowdata[1] + tag
          width 
    = (string.length 9) - 10
          x
    Graphics.width width 2,  Graphics.height 64 2
          
    @temp_window Window_Base.new(xywidth64)
          @
    temp_window.contents.font.size 20
          
    @temp_window.draw_text(-10, -6width32tag1)
          @
    temp_window.draw_text(-1014width32$game_temp.pop_windowdata[1],1)
          @
    current_scene SceneManager.scene.class 
        
    end
        
        
    if $game_temp.pop_windowdata[0] == || 
          @
    current_scene != SceneManager.scene.class 
          @
    temp_window.dispose
          
    @temp_window nil
          $game_temp
    .pop_windowdata nil
        end
      end
      
      def update_pearl_abs_cooldown
        PearlKey
    .update
        eval_cooldown
    ($game_party.all_members) if !$game_party.nil?
        
    eval_cooldown($game_map.enemies) if !$game_map.nil?
      
    end
      
      
    # cooldown update
      
    def eval_cooldown(operand)
        for 
    sub in operand
          sub
    .skill_cooldown.each {|sidsv# skill
          
    if sub.skill_cooldown[sid] > 0
            sub
    .skill_cooldown[sid] -= 1
            sub
    .skill_cooldown.delete(sid) if sub.skill_cooldown[sid] == 0
          end
    }
          
    sub.item_cooldown.each {|iidiv# item
          
    if sub.item_cooldown[iid] > 0
            sub
    .item_cooldown[iid] -= 1
            sub
    .item_cooldown.delete(iid) if sub.item_cooldown[iid] == 0
          end
    }
          
    sub.weapon_cooldown.each {|widwv# weapon
          
    if sub.weapon_cooldown[wid] > 0
            sub
    .weapon_cooldown[wid] -= 1
            sub
    .weapon_cooldown.delete(wid) if sub.weapon_cooldown[wid] == 0
          end
    }
          
    sub.armor_cooldown.each {|aidav#armor
          
    if sub.armor_cooldown[aid] > 0
            sub
    .armor_cooldown[aid] -= 
            sub
    .armor_cooldown.delete(aid) if sub.armor_cooldown[aid] == 0
          end
    }
        
    end
      end
    end

    #===============================================================================
    #===============================================================================
    # Game character

    class Game_CharacterBase
      attr_accessor 
    :just_hitted, :anime_speed, :blowpower, :targeting, :x, :y
      attr_accessor 
    :battler_guarding, :knockdown_data, :colapse_time, :opacity
      attr_accessor 
    :zoomfx_x, :zoomfx_y, :targeted_character, :stuck_timer
      attr_accessor 
    :send_dispose_signal, :follower_attacktimer, :stopped_movement
      attr_accessor 
    :hookshoting, :battler_chain, :pattern, :user_move_distance
      attr_accessor 
    :move_speed, :through, :being_grabbed, :making_spiral
      attr_accessor 
    :direction, :direction_fix, :zfx_bol, :buff_pop_stack
      attr_accessor 
    :die_through, :target_index, :using_custom_g, :combodata
      attr_accessor 
    :originalasp, :doingcombo, :angle_fx
      attr_accessor 
    :user_iconset, :pro_iconset, :respawn_count
      alias falcaopearl_abmain_ini initialize
      def initialize
        
    @zfx_bol false
        
    @just_hitted 0
        
    @anime_speed 0
        
    @respawn_count 0
        
    @blowpower = [0dir=2dirfix=falses=4wait_reset=0]
        @
    user_casting = [0nil]
        @
    send_dispose_signal false
        
    @targeting = [falseitem=nilchar=nil]
        @
    colapse_time 0
        
    @stopped_movement 0
        
    @follower_attacktimer 0
        set_hook_variables
        
    @target_index 0
        
    @using_custom_g false
        
    @combodata = []
        @
    angle_fx 0.0
        
    #--------------
        
    @zoomfx_x 1.0
        
    @zoomfx_y 1.0
        
    @stuck_timer 0
        
    @battler_guarding = [falsenil]
        @
    knockdown_data = [0nilnilnilnil]
        @
    state_poptimer = [00]
        @
    making_spiral false
        
    @buff_pop_stack = []
        @
    doingcombo 0
        
    @range_view 2
        
    @originalasp 0
        falcaopearl_abmain_ini
      end
      
      def set_hook_variables
        
    @hookshoting = [on=falsehooking=falsegrabing=falsedelay=0]
        @
    battler_chain = []
        @
    user_move_distance = [steps=0speed=niltrought=nilcor=nilevmove=nil]
        @
    being_grabbed false
      end
     
      
    # projectiles at nt
      
    def projectiles_xy_nt(xy)
        
    $game_player.projectiles.select {|propro.pos_nt?(xy) }
      
    end
      
      
    # collide with projectiles
      
    def collide_with_projectiles?(xy)
        
    projectiles_xy_nt(xy).any? do |pro|
          
    pro.normal_priority? || self.is_a?(Projectile)
        
    end
      end
      
      def zoom
    (xy)
        @
    zoomfx_x x
        
    @zoomfx_y y
      end
      
      alias falcaopearl_collide_with collide_with_characters
    ?
      
    def collide_with_characters?(xy)
        return 
    true if collide_with_projectiles?(xy)
        
    falcaopearl_collide_with(xy)
      
    end
      
      
    # follow character straigh and diagonal
      
    def follow_char(character)
        
    sx distance_x_from(character.x)
        
    sy distance_y_from(character.y)
        if 
    sx != && sy != 0
          move_diagonal
    (sx 6sy 2)
        
    elsif sx != 0
          move_straight
    (sx 6)
        
    elsif sy != 0
          move_straight
    (sy 2)
        
    end
      end
      
      def on_battle_screen
    ?(out 0)
        
    max_w = (Graphics.width 32).to_i 1
        max_h 
    = (Graphics.height 32).to_i 1
        sx 
    = (screen_x 32).to_i
        sy 
    = (screen_y 32).to_i
        
    if sx.between?(outmax_w out) and sy.between?(outmax_h out)
          return 
    true
        end
        
    return false
      end
      
       
    # jump to specific tiles
      
    def jumpto_tile(xy)
        
    jumpto(0, [xy])
      
    end
      
      
    # jumpto character ( 0 = Game Player, 1 and up event id)
      
    def jumpto(char_idtilexy=nil)
        
    char_id char $game_map.events[char_id] : char $game_player
        tilexy
    .nil? ? condxy = [char.xchar.y] : condxy = [tilexy[0], tilexy[1]]
        
    jx = + eval_distance(tilexy.nil? ? char tilexy)[0] if condxy[0] >= @x
        jy 
    = - eval_distance(tilexy.nil? ? char tilexy)[1] if condxy[1] <= @y
        jx 
    = - eval_distance(tilexy.nil? ? char tilexy)[0] if condxy[0] <= @x
        jy 
    = - eval_distance(tilexy.nil? ? char tilexy)[1] if condxy[1] <= @y
        jx 
    = - eval_distance(tilexy.nil? ? char tilexy)[0] if condxy[0] <= @x
        jy 
    = + eval_distance(tilexy.nil? ? char tilexy)[1] if condxy[1] >= @y
        jx 
    = + eval_distance(tilexy.nil? ? char tilexy)[0] if condxy[0] >= @x
        jy 
    = + eval_distance(tilexy.nil? ? char tilexy)[1] if condxy[1] >= @y
        jump
    (jxjy)
      
    end
      
      
    # distance
      
    def eval_distance(target)
        if 
    target.is_a?(Array)
          
    distance_x = (@target[0]).abs
          distance_y 
    = (@target[1]).abs
        
    else
          
    distance_x = (@target.x).abs
          distance_y 
    = (@target.y).abs
        end
        
    return [distance_xdistance_y
      
    end
      
      
    # check if the game player and follower are executing an action
      
    def battler_acting?
        return 
    true if @user_casting[0] > || @targeting[0]
        return 
    true if @knockdown_data[0] > and battler.deadposing.nil?
        return 
    true if @anime_speed 0
        
    return true if @hookshoting[0] || @making_spiral
        
    if self.is_a?(Game_Player)
          
    $game_player.followers.each {|f| return true if f.battler_acting?}
        
    end
        
    return false
      end

      def battler
      end
      
      
    #use single tools
      
    def use_weapon(id)
        return 
    unless tool_can_use?
        
    process_tool_action($data_weapons[id])
      
    end
      
      def use_item
    (id)
        return 
    unless tool_can_use?
        
    process_tool_action($data_items[id])
      
    end
      
      def use_skill
    (id)
        return 
    unless tool_can_use?
        
    process_tool_action($data_skills[id])
      
    end
      
      def use_armor
    (id)
        return 
    unless tool_can_use?
        
    process_tool_action($data_armors[id])
      
    end
      
      
    # use multiple tools
      
    def rand_weapon(*args)
        return 
    unless tool_can_use?
        
    process_tool_action($data_weapons[args[rand(args.size)]])
      
    end
      
      def rand_item
    (*args)
        return 
    unless tool_can_use?
        
    process_tool_action($data_items[args[rand(args.size)]])
      
    end
      
      def rand_skill
    (*args)
        return 
    unless tool_can_use?
        
    process_tool_action($data_skills[args[rand(args.size)]])
      
    end
      
      def rand_armor
    (*args)
        return 
    unless tool_can_use?
        
    process_tool_action($data_armors[args[rand(args.size)]])
      
    end
      
      def tool_can_use
    ?
        return 
    false if @hookshoting[0] || @making_spiral
        
    return false if @user_casting[0] > || @targeting[0]
        return 
    false if battler.nil?
        return 
    false if battler.dead?
        return 
    false if @doingcombo || @battler_guarding[0]
        return 
    false if $game_message.busy?
        return 
    true
      end
      
      def load_target_selection
    (item)
        @
    targeting[0] = true; @targeting[1] = item
        
    if self.is_a?(Game_Player)
          
    $game_player.pearl_menu_call = [:battler2]
        
    elsif self.is_a?(Game_Follower)
          @
    targeting[2] = @targeted_character
          
    @targeting = [falseitem=nilchar=nil] if @targeting[2].nil?
        
    elsif self.is_a?(Projectile)
          if 
    user.is_a?(Game_Player)
            
    user.targeting[0] = trueuser.targeting[1] = item
            $game_player
    .pearl_menu_call = [:battler2]
          
    end
          
    if user.is_a?(Game_Follower)
            @
    targeting[2] = user.targeted_character
            
    @targeting = [falseitem=nilchar=nil] if @targeting[2].nil?
          
    end
        end
      end
      
      def playdead
        
    @angle_fx 90
      end
      
      def resetplaydead
        
    @angle_fx 0.0
      end

      
    #action canceling
      
    def force_cancel_actions
        
    @user_casting[0] = 0
        
    @anime_speed 0
      end
      
      def speed
    (x)
        @
    move_speed x
      end
      
      def anima
    (x)
        @
    animation_id x
      end
      
      
    # aply melee params
      
    def apply_weapon_param(weaponadd)
        
    id 0
        
    for param in weapon.params
          add 
    battler.add_param(idparam) : battler.add_param(id, -param)
          
    id += 1
        end
      end
      
      
    # Short script call for poping damage text
      
    def pop_damage(custom=nil)
        
    $game_player.damage_pop.push(DamagePop_Obj.new(selfcustom))
      
    end
      
      
    #check if target is unable to move
      
    def force_stopped?
        return 
    true if @anime_speed || @knockdown_data[0] > ||
        @
    stopped_movement || @hookshoting[0] || @angle_fx != 0.0
        
    return true if @making_spiral
        
    return false
      end
      
      
    # sensor 
      
    def obj_size?(targetsize)
        return 
    false if size.nil?
        
    distance = (@target.x).abs + (@target.y).abs
        enable   
    = (distance <= size-1)
        return 
    true if enable
        
    return false
      end
      
      
    # sensor body
      
    def body_size?(targetsize)
        
    distance = (@target[0]).abs + (@target[1]).abs
        enable   
    = (distance <= size-1)
        return 
    true if enable
        
    return false
      end
      
      def faceto_face
    ?(target)
        return 
    true if @direction == and target.direction == 8
        
    return true if @direction == and target.direction == 6
        
    return true if @direction == and target.direction == 4
        
    return true if @direction == and target.direction == 2
        
    return false
      end
      
      def adjustcxy
        push_x
    push_y =   0,   if @direction == 2
        push_x
    push_y = - 1,   if @direction == 4
        push_x
    push_y =   1,   if @direction == 6
        push_x
    push_y =   0, - if @direction == 8
        
    return [push_xpush_y]
      
    end
      
      def in_frontof
    ?(target)
        return 
    true if @direction == and @== target.and (@y+1) == target.y
        
    return true if @direction == and (@x-1) == target.and @== target.y
        
    return true if @direction == and (@x+1) == target.and @== target.y
        
    return true if @direction == and @== target.and (@y-1) == target.y
        
    return false
      end
      
      
    # detect map edges ignoring loop maps
      
    def facing_corners?
        case 
    $game_map.map.scroll_type
        when 1 then 
    return false if @direction == || @direction == 8
        when 2 then 
    return false if @direction == || @direction == 6
        when 3 then 
    return false
        end
        m 
    $game_map
        unless 
    @x.between?(1m.width 2) && @y.between?(1m.height 2)
          return 
    true if @== and @direction == 4
          
    return true if @== and @direction == 8
          
    return true if @== m.width  1  and @direction == 6
          
    return true if @== m.height 1  and @direction == 2
        end
        
    return false
      end
      
      
    # item usable test
      
    def usable_test_passed?(item)
        return 
    true if battler.is_a?(Game_Enemy) && item.is_a?(RPG::Item)
        
    itemcost item.tool_data("Tool Item Cost = ")
        
    invoke item.tool_data("Tool Invoke Skill = ")
        if 
    battler.is_a?(Game_Actor) and itemcost != nil and itemcost != 0
          
    return false if !battler.usable?($data_items[itemcost])
        
    end
        
    if item.is_a?(RPG::Skill) || item.is_a?(RPG::Item)
          return 
    false if !battler.usable?(item)
        else
          if 
    invoke != nil and invoke != 0
            
    return false if !battler.usable?($data_skills[invoke])
          else
            return 
    false if !battler.attack_usable?
          
    end
        end
        
    return true
      end
      
      
    # process the tool and verify wheter can be used
      
    def process_tool_action(item)
        
    PearlKernel.load_item(item)
        return if !
    battler.tool_ready?(item)
      
        
    unless PearlKernel.has_data?
          if 
    item.is_a?(RPG::Weapon) || item.is_a?(RPG::Armor)
            
    msgbox('Tool data missing') if $DEBUG
            
    return
          
    end
          
    if item.scope.between?(16)
            
    msgbox('Tool data missing') if $DEBUG
            
    return
          
    elsif item.scope == 0
            
    return
            
          
    elsif !battler.usable?(item)
            
    RPG::SE.new("Cursor1"80).play if self.is_a?(Game_Player)
            return 
          
    end
        end
        
        
    if PearlKernel.has_data? and not usable_test_passed?(item)
          
    RPG::SE.new("Cursor1"80).play if self.is_a?(Game_Player)
          return
        
    end
        
        
    @user_casting = [PearlKernel.tool_castime,item] if PearlKernel.has_data?
        if @
    user_casting[0] > 0
          
    @animation_id 0
          
    @animation_id PearlKernel.tool_castanimation
        
    else
          
    load_abs_tool(item)
        
    end
      end
      
      
    # load the abs tool
      
    def load_abs_tool(item)
        return if @
    knockdown_data[0] > 0
        PearlKernel
    .load_item(item)
      
        return if 
    self.is_a?(Game_Follower) and @targeted_character.nil?
        
        if !@
    targeting[0] and  self.battler.is_a?(Game_Actor)
          if 
    item.is_a?(RPG::Skill) || item.is_a?(RPG::Item)
            
    # apply target to skills items 
            
    if PearlKernel.tool_target == "true" || item.scope == ||
              
    item.scope == 9
              load_target_selection
    (item)
              return
            
    end
          
    else
            
    # apply target parsing the invoked skill to weapons and armors
            
    invoke PearlKernel.tool_invoke
            
    if invoke != nil && invoke && invoke != && invoke != 2
              invokeskill 
    $data_skills[invoke]
              if 
    PearlKernel.tool_target == "true" || invokeskill.scope == ||
                
    invokeskill.scope == 9
                load_target_selection
    (item)
                return
              
    end
              
    # apply target to normal weapon and armor without invoking
            
    else
              if 
    PearlKernel.tool_target == "true"
                
    load_target_selection(item)
                return
              
    end
            end
          end
        end
        
    if item.is_a?(RPG::Skill) || item.is_a?(RPG::Item)
          
    battler.use_item(item
        else
          if 
    PearlKernel.tool_invoke != 0
            battler
    .use_item($data_skills[PearlKernel.tool_invoke])
          
    end
        end
        
        
    # if the tool has data continue
        
    if PearlKernel.has_data?
          
    consume_ammo_item(item) if battler.is_a?(Game_Actor) and
          
    PearlKernel.tool_itemcost != 0
          
    @anime_speed PearlKernel.user_animespeed
          battler
    .apply_cooldown(itemPearlKernel.tool_cooldown)
        
    end
        create_projectile_object
    (item)
        
    create_anime_sprite_object(item)
      
    end
      
      
    # projectile creator
      
    def create_projectile_object(item)
        if 
    PearlKernel.tool_special == "hook"
          
    PearlKernel.tool_distance.times {|i|
          
    $game_player.projectiles.push(Projectile.new(selfitemi))}
          @
    hookshoting[0] = true
        elsif PearlKernel
    .tool_special == "triple"       # loads 3 projectiles
          
    for i in [:uno, :dos, :tres]
            
    $game_player.projectiles.push(Projectile.new(selfitemi))
          
    end
        elsif PearlKernel
    .tool_special == "quintuple"     #loads 5 projectiles
          
    for i in [:uno, :dos, :tres, :cuatro, :cinco]
            
    $game_player.projectiles.push(Projectile.new(selfitemi))
          
    end
        elsif PearlKernel
    .tool_special == "octuple"       # loads 8 projectiles
          
    for i in [:uno, :dos, :tres, :cuatro, :cinco, :seis, :siete, :ocho]
            
    $game_player.projectiles.push(Projectile.new(selfitemi))
          
    end
        
    else # load default projectile
          
    $game_player.projectiles.push(Projectile.new(selfitem))
        
    end
      end
      
      
    # User anime sprite creation
      
    def create_anime_sprite_object(item)
        
    $game_player.anime_action.each {|i|
        if 
    i.user == self
          
    if i.custom_graphic
            
    @transparent false 
            i
    .user.using_custom_g false
          end
          $game_player
    .anime_action.delete(i)
        
    end}
        
        if 
    PearlKernel.user_graphic != "nil"
          
    return if PearlKernel.user_graphic.nil?
          
    $game_player.anime_action.push(Anime_Obj.new(selfitem))
        
    end
        
        
    # using iconset graphic
        
    if PearlKernel.user_graphic == "nil" and
          !
    item.tool_data("User Iconset = "false).nil?
          return if 
    PearlKernel.user_graphic.nil?
          
    $game_player.anime_action.push(Anime_Obj.new(selfitem))
        
    end
      end
      
      
    # consume ammo item
      
    def consume_ammo_item(item)
        
    itemcost $data_items[PearlKernel.tool_itemcost]
        return if 
    item.is_a?(RPG::Item) and item.consumable and item == itemcost
        battler
    .use_item(itemcost)
      
    end
      
      alias falcaopearl_chaupdate update
      def update
        update_falcao_pearl_abs
        falcaopearl_chaupdate
      end
      
      
    # Falcao pearl abs main update
      
    def update_falcao_pearl_abs
        
    if @user_move_distance[0] > and not moving?
          
    move_forward ; @user_move_distance[0] -= 1
        end
        
    return if battler.nil?
        
    update_pearlabs_timing
        update_followers_attack 
    if self.is_a?(Game_Follower) && self.visible?
        if @
    targeting[2] != nil
          load_abs_tool
    (@targeting[1]) if battler.is_a?(Game_Actor)
          @
    targeting = [falseitem=nilchar=nil]
        
    end
        update_battler_collapse
        update_state_effects
        
        
    @combodata.each {|combo|
        if 
    combo[3] > 0
          combo
    [3] -= 1
          
    if combo[3] == 0
            perform_combo
    (combo[0], combo[1], combo[2])
            @
    combodata.delete(combo)
          
    end
          
    break
        
    end}
      
    end
      
    #Насколько я понял, эта функция выполняет прыжок для комбо:
      
    def perform_combo(kindidjumpp)
        if 
    jumpp == 'jump'
          
    jump(00)
          
    move_forward
        end
        
    case kind
        when 
    :weapon then use_weapon(id)
        
    when :armor  then use_armor(id)
        
    when :item   then use_item(id)
        
    when :skill  then use_skill(id)
        
    end
        
    @doingcombo 12
      end
      
      
    #========================================================================
      #     * followers attacks engine
      
      
    def fo_tool
        
    return actor.equips[0]       if actor.primary_use == 1
        
    return actor.equips[1]       if actor.primary_use == 2
        
    return actor.assigned_item   if actor.primary_use == 3
        
    return actor.assigned_item2  if actor.primary_use == 4
        
    return actor.assigned_skill  if actor.primary_use == 5
        
    return actor.assigned_skill2 if actor.primary_use == 6
        
    return actor.assigned_skill3 if actor.primary_use == 7
        
    return actor.assigned_skill4 if actor.primary_use == 8
      end
      
      
    # followers attack engine
      
    def update_followers_attack
        
    if fo_tool.nil? || battler.dead?
          @
    targeted_character nil if @targeted_character != nil
          
    return
        
    end
        
    return if @stopped_movement 0
        
    if @follower_attacktimer 0
          
    @follower_attacktimer -= 1
          
    if @follower_attacktimer == 40 and !moving?
            
    rand(3)
            
    move_random if == || == 1
            move_away_from_character
    (@targeted_character) if 
            !@
    targeted_character.nil? and == 2
          end
        end
        
         
    # si la skill es para el player 
        
    if @targeted_character != nil and @targeted_character.is_a?(Game_Player)
          if 
    all_enemies_dead?
            
    delete_targetf
            
    return
          
    end
          use_predefined_tool
          
    return
        
    end
        
        
    # si la skill es para un enemigo continuar
        
    if @targeted_character != nil
          use_predefined_tool
          
    return if @targeted_character.nil?
          
    # reset if the target is dead
          
    if @targeted_character.collapsing?
            
    force_cancel_actions
            delete_targetf
          end
        
    else
          
    # select a follower slected target
          
    $game_player.followers.each do |follower|
            if !
    follower.targeted_character.nil?
              
    next if follower.targeted_character.is_a?(Game_Player)
              if 
    follower.stuck_timer >= 10
                follower
    .targeted_character nil
                
    return
              
    end
              
    @targeted_character follower.targeted_character
              
    break
            
    end
          end
        end
      end
      
      
    # prepare the tool usage
      
    def setup_followertool_usage
        
    @range_view 2
        
    @range_view if fo_tool.tool_data("Tool Target = "false) == "true" ||
        
    fo_tool.tool_data("Tool Special = "false) == "autotarget"
        
        
    if fo_tool.is_a?(RPG::Skill) || fo_tool.is_a?(RPG::Item)
          if 
    fo_tool.scope.between?(16)
            
    setup_target 
          
    else ; @targeted_character $game_player
            
    @range_view 6
          end
          
    # prepare tool for invoke follower
        
    elsif fo_tool.is_a?(RPG::Weapon) || fo_tool.is_a?(RPG::Armor)
          
    invoke fo_tool.tool_data("Tool Invoke Skill = ")
          if 
    invoke 0
            
    if $data_skills[invoke].scope.between?(16)
              
    setup_target
            
    else ; @targeted_character $game_player
              
    @range_view 6
            end
          
    else
            
    # no invoke skill just set up an enemy target
            
    setup_target
          end
        end
      end
      
      
    # use the predifined tool
      
    def use_predefined_tool
        update_follower_movement
        
    return if @targeted_character.nil?
        if 
    obj_size?(@targeted_character, @range_view) && @follower_attacktimer == 0
          turn_toward_character
    (@targeted_character
          
    use_weapon(fo_tool.id) if actor.primary_use == 
          use_armor
    (fo_tool.id)  if actor.primary_use == 2
          use_item
    (fo_tool.id)   if actor.primary_use == || actor.primary_use == 4
          use_skill
    (fo_tool.id)  if actor.primary_use==|| actor.primary_use==||
          
    actor.primary_use == || actor.primary_use == 8
          
    if fo_tool.tool_data("User Graphic = "false).nil?
            @
    targeted_character nil
            turn_toward_player
          end
          
    @follower_attacktimer 60
        end
        delete_targetf 
    if self.actor.dead?
      
    end
      
      def all_enemies_dead
    ?
        for 
    event in $game_map.event_enemies
          
    if event.on_battle_screen? && event.enemy_ready?
            return 
    false if $game_player.obj_size?(event,PearlKernel::PlayerRange+1)
          
    end
        end
        
    return true
      end
      
      def delete_targetf
        
    @targeted_character nil
      end
      
      
    #------------------------
      # follower movement attack
      
    def reset_targeting_settings(target)
        
    target.being_targeted false if target.is_a?(Game_Event)
        
    delete_targetf
        turn_toward_player
        
    @stuck_timer 0
      end
      
      def update_follower_movement
        target 
    = @targeted_character
        
    if @stuck_timer >= 30
          reset_targeting_settings
    (target)
          return
        
    end
        
        
    # if the follower is unabble to use the tool
        
    unless usable_test_passed?(fo_tool)
          if 
    SceneManager.scene_is?(Scene_Map)
            
    reset_targeting_settings(target)
            @
    balloon_id PearlKernel::FailBalloon
            
    return
          
    end
        end
        
        
    return if target.nil?
        @
    stuck_timer += if !obj_size?(target, @range_view) and !moving?
      
        if 
    moving? || @anime_speed || @making_spiral || @hookshoting[0] ||
          @
    knockdown_data[0] > 0
          
    @stuck_timer 0
        end
        
    return if moving?
        if 
    fo_tool.tool_data("Tool Target = "false) == "true" || 
          
    fo_tool.tool_data("Tool Special = "false) == "autotarget" ||
          
    target.is_a?(Game_Player)
          
    # using skill con target true magical
          
    cpu_reactiontype(1target)
          return 
          
    # target not exist
        
    else
        
          if 
    fo_tool.is_a?(RPG::Skill) || fo_tool.is_a?(RPG::Item)
            
    fo_tool.scope.between?(16) ? cpu_reactiontype(2target) : # to enemy
            
    cpu_reactiontype(1target# benefical
          
    else
            
    # for weapon armor without target
            
    cpu_reactiontype(2target)
          
    end
        end
        
    return if !obj_size?(target, @range_view)
        return if 
    target.is_a?(Game_Player)
        case 
    rand(40)
        
    when 4  then move_backward
        when 10 then move_random
        end
      end
      
      
    # cpu reaction
      
    def cpu_reactiontype(typetarget)
        
    unless on_battle_screen?
          
    3.times.each {|i|  move_toward_player}
          return
        
    end
        move_toward_character
    (target) if !obj_size?(target, @range_view) if type==1
        
    if @follower_attacktimer == || !obj_size?(target, @range_view)
          
    move_toward_character(target) if type == 2
        end
      end
      
    #-------------------------------------------------
      
      # buff timer 
      
    def update_buff_timing
        battler
    .buff_turns.each do |idvalue|
          if 
    battler.buff_turns[id] > 0
            battler
    .buff_turns[id] -= 1
            
    if battler.buff_turns[id] <= 0
              battler
    .remove_buff(id)
              
    pop_damage
            end
          end
        end
      end
      
      
    #blow power effect
      
    def update_blow_power_effect
        
    if @blowpower[4] > 0
          
    @blowpower[4] -= 1
          
    if @blowpower[4] == 0
            
    @direction_fix = @blowpower[2]
            @
    move_speed = @blowpower[3]
          
    end
        end
        
    if @blowpower[0] > and !moving?
          @
    move_speed 5.5
          
    @direction_fix true
          move_straight
    (@blowpower[1]); @blowpower[0] -= 1
          
    if @blowpower[0] == 0
            
    @blowpower[4] = 10
          end
        end
      end
      
      
    # Pearl timing
      
    def update_pearlabs_timing
        
    @just_hitted -= if @just_hitted 0
        
    @stopped_movement -= if @stopped_movement 0
        
    @doingcombo -= if @doingcombo 0
        
        
    # hookshooting
        
    if @hookshoting[3] > 0
          
    @hookshoting[3] -= 1
          
    if @hookshoting[3] == 0
            
    @hookshoting = [falsefalsefalse0
            @
    user_move_distance[3].being_grabbed false if
            @
    user_move_distance[3].is_a?(Game_Event)
            @
    user_move_distance[3] = nil
          end
        end
        update_buff_timing
        update_blow_power_effect
        
    # anime 
        
    if @anime_speed 0
          
    @pattern 
          
    @anime_speed -= 1
        end
        
    # casting
        
    if @user_casting[0] > 0
          
    @user_casting[0] -= 1
          load_abs_tool
    (@user_casting[1]) if @user_casting[0] == 
        end
        update_knockdown
      end
      
      
    # Update battler collapse
      
      
    def check_for_dead_four
        
    return if $game_party.members.size <= 4
        SceneManager
    .goto(Scene_Gameover) if all_fourdead?
      
    end
     
      def all_fourdead
    ?
        
    $game_party.battle_members
        
    return true if m[0].dead? && m[1].dead? && m[2].dead? && m[3].dead?
        return 
    false
      end
      
      def update_battler_collapse
        
    if @colapse_time 0
          
    @colapse_time -= 
          force_cancel_actions
          
    if battler.is_a?(Game_Actor)
            
    Sound.play_actor_collapse if @secollapse.nil?
            @
    secollapse true
            
            
    if @colapse_time == 0
              
    @secollapse nil
              
    for event in $game_map.event_enemies 
                
    if event.agroto_f == self
                  event
    .agroto_f nil
                end
              end
              
              check_for_dead_four
              member 
    $game_party.battle_members
              
    # swap and reset player
              
    if self.is_a?(Game_Player)
                
    reset_knockdown_actors
                battler
    .deadposing=$game_map.map_id if PearlKernel::FollowerDeadPose
                $game_party
    .swap_order(0,3) if !member[3].nil? and !member[3].dead?
                
    $game_party.swap_order(0,2) if !member[2].nil? and !member[2].dead?
                
    $game_party.swap_order(0,1) if !member[1].nil? and !member[1].dead?
              else
                if 
    PearlKernel::FollowerDeadPose
                  battler
    .deadposing $game_map.map_id
                  
    if !$game_player.follower_fighting? and member.size 2
                    swap_dead_follower
                  
    else
                    
    $game_player.reserved_swap << battler.id if member.size 2
                  end
                end
              end
            end
            
          elsif battler
    .is_a?(Game_Enemy)
            @
    die_through = @through if @die_through.nil?
            @
    through true
            apply_collapse_anime
    (battler.collapse_type)
            @
    secollapse true
            battler
    .object ? @transparent true : @opacity -= if !@deadposee
            
    if @colapse_time == 0
              self
    .kill_enemy
            end
          end
        end
      end
      
      def swap_dead_follower
        reset_knockdown_actors
        member 
    $game_party.battle_members
        member
    .each_with_index.each do |actorri|
          
    next unless actorr.id == self.actor.id
          
    case member.size
          when 3
            
    break if == 2
            $game_party
    .swap_order(i2)
          
    when 4
            
    break if == 3
            
    if !member[3].dead?
              
    $game_party.swap_order(i3
              break
            
    end
            
    if !member[2].dead?  
              
    $game_party.swap_order(i2
              break
            
    end
          end
        end
      end

      def apply_collapse_anime
    (type)
        
    # sound and animation
        
    if battler.die_animation != nil
          
    @animation_id battler.die_animation if @secollapse.nil?
        else
          
    Sound.play_enemy_collapse if @secollapse.nil? and !battler.object
        end
        
    return if battler.object
        
    if @deadposee
          
    @knockdown_data[0] = 8
          
    return
        
    end
        type 
    PearlKernel::DefaultCollapse if type.nil?
        case 
    type.to_sym
        when 
    :zoom_vertical
          
    @zoomfx_x -= 0.03
          
    @zoomfx_y += 0.02
        when 
    :zoom_horizontal
          
    @zoomfx_x += 0.03
          
    @zoomfx_y -= 0.02
        when 
    :zoom_maximize
          
    @zoomfx_x += 0.02
          
    @zoomfx_y += 0.02
        when 
    :zoom_minimize
          
    @zoomfx_x -= 0.02
          
    @zoomfx_y -= 0.02
        end
      end
      
      
    # konck down engine update
      
    def update_knockdown
        
    if @knockdown_data[0] > 0
          
    @knockdown_data[0] -= 1
          
    @knockdown_data[0] == knowdown_effect(2) : knowdown_effect(1)
          if @
    knockdown_data[1] != nil
            
    @pattern = @knockdown_data[2]
            @
    direction = @knockdown_data[3]
          
    end
        end
      end
      
      def knowdown_effect
    (type)
        return if 
    self.is_a?(Projectile)
        if 
    type[0] == 1
          
    if @knockdown_data[1] == nil
            
    if battler.is_a?(Game_Enemy)
              if 
    self.knockdown_enable
                force_cancel_actions
                self_sw 
    PearlKernel::KnockdownSelfW
                $game_self_switches
    [[$game_map.map_idself.idself_sw]] = true
                
    @knockdown_data[1] = self_sw
                self
    .refresh
                
    @knockdown_data[2] = self.page.graphic.pattern
                
    @knockdown_data[3] = self.page.graphic.direction
                $game_map
    .screen.start_shake(7420)
              
    end
              
              
    @knockdown_data[0] = if @knockdown_data[1] == nil
           elsif battler
    .is_a?(Game_Actor)
             if 
    PearlKernel.knock_actor(self.actor) != nil and
               if @
    knockdown_data[1] == nil
                 force_cancel_actions
                 
    @knockdown_data[1] = @character_name
                 
    @knockdown_data[4] = @character_index
                 
    @character_name PearlKernel.knock_actor(self.actor)[0]
                 @
    character_index PearlKernel.knock_actor(self.actor)[1]
                 @
    knockdown_data[2] = PearlKernel.knock_actor(self.actor)[2]
                 @
    knockdown_data[3] = PearlKernel.knock_actor(self.actor)[3]
                 
    $game_map.screen.start_shake(7420) if battler.deadposing.nil?
               
    end
             end
             
    @knockdown_data[0] = if @knockdown_data[1] == nil
            end
          end
        elsif type 
    == 2
          
    if battler.is_a?(Game_Enemy)
            if @
    deadposee and battler.dead?
              @
    knockdown_data[1] = nil
              
    return 
            
    end
            $game_self_switches
    [[$game_map.map_idself.id
            @
    knockdown_data[1]]] = false if @knockdown_data[1] != nil
            
    @knockdown_data[1] = nil
          
    else
            @
    character_name = @knockdown_data[1]
            @
    character_index = @knockdown_data[4]
            @
    knockdown_data[1] = nil
          end
        end
      end
      
      
    #================================
      # states
      
    def primary_state_ani
        
    return nil if battler.states[0].nil?
        return 
    battler.states[0].tool_data("State Animation = ")
      
    end
      
      
    # higer priority state animation displayed
      
    def update_state_effects
        
    return if battler.nil?
        @
    state_poptimer[0] += 1 unless primary_state_ani.nil?
        if @
    state_poptimer[0] == 30
          
    @animation_id primary_state_ani
          
    @animation_id if @animation_id.nil?
        
    elsif @state_poptimer[0] == 180
          
    @state_poptimer[0] = 0
        end
        update_state_action_steps 
      end
      
      
    # update state actions
      
    def update_state_action_steps
        
    for state in battler.states
          
    if state.remove_by_walking
            
    if !battler.state_steps[state.id].nil? &&
              
    battler.state_steps[state.id] > 0
              battler
    .state_steps[state.id] -= 
            end
            
    if battler.state_steps[state.id] == 0
              battler
    .remove_state(state.id)
              
    pop_damage
            end
          end
          
    if state.restriction == 4
            
    @stopped_movement 10
            
    @pattern if @knockdown_data[0] == 0
          end
          state
    .features.each do |feature|
            if 
    feature.code == 22 
              
    @knockdown_data[0] =10 if state.restriction == && feature.data_id==1
              next unless feature
    .data_id.between?(79)
              
    apply_regen_state(statefeature.data_id)
            
    end
          end
        end
      end
      
      
    # apply regen for hp, mp and tp
      
    def apply_regen_state(statetype)
        
    random state.tool_data("State Effect Rand Rate = "
        
    random 120 if random.nil?
        if 
    rand(random) == 1
          battler
    .regenerate_hp if type == 7
          battler
    .regenerate_mp if type == 8
          battler
    .regenerate_tp if type == 9
          
    if type == and battler.result.hp_damage == 0
            
    @colapse_time 80
            battler
    .add_state(1)
            return
          
    end
          type 
    == pop_damage("Tp Up!") : pop_damage
        end
      end
      
      alias falcaopearl_update_anime_pattern update_anime_pattern
      def update_anime_pattern
        
    return if @anime_speed || @knockdown_data[0] > 0
        falcaopearl_update_anime_pattern
      end
      
      
    #=============================================================================
      # Reset Pearl ABS System
      
      # reset from game player call
      
    def reset_knockdown_actors
        
    # reset knock down
        
    if @knockdown_data[1] != nil
          
    @knockdown_data[0] = 0
          knowdown_effect
    (2)
        
    end
        
    # force clear knock down
        
    $game_player.followers.each do |follower|
          if 
    follower.knockdown_data[1] != nil
            follower
    .knockdown_data[0] = 0
            follower
    .knowdown_effect(2)
          
    end
        end
      end
      
      
    # reset knockdown enemies game player call
      
    def reset_knockdown_enemies
        $game_map
    .events.values.each do |event|
          if 
    event.knockdown_data[1] != nil
            event
    .knockdown_data[0] = 0
            event
    .knowdown_effect(2)
          
    end
          
    if event.deadposee and event.killed
            $game_self_switches
    [[$game_map.map_idevent.id,
            
    PearlKernel::KnockdownSelfW]] = false
          end
        end
      end
      
      
    # glabal reseting
      
    def pearl_abs_global_reset
        force_cancel_actions
        battler
    .remove_state(9) if @battler_guarding[0]
        @
    battler_guarding = [falsenil]
        @
    making_spiral false
        set_hook_variables
        
    @using_custom_g false
        $game_player
    .followers.each do |f|
          
    f.targeted_character nil if !f.targeted_character.nil?
          
    f.stuck_timer if f.stuck_timer 0
          f
    .follower_attacktimer if f.follower_attacktimer 0
          f
    .force_cancel_actions unless f.visible?
          
    f.battler.remove_state(9) if f.battler_guarding[0]
          
    f.battler_guarding = [falsenil]
          
    f.set_hook_variables
          f
    .making_spiral false
        end
        reset_knockdown_actors
        reset_knockdown_enemies
        $game_player
    .projectiles.clear
        $game_player
    .damage_pop.clear
        $game_player
    .anime_action.clear
        $game_player
    .enemy_drops.clear
        
    @send_dispose_signal true
      end
    end

    #===============================================================================
    # Evets as enemies registration

    class Game_Event Game_Character
      attr_accessor 
    :enemy, :move_type, :page, :deadposee
      attr_accessor 
    :being_targeted, :agroto_f, :draw_drop, :dropped_items
      attr_accessor 
    :start_delay, :epassive, :erased, :killed, :boom_grabdata
      attr_reader   
    :token_weapon, :token_armor,:token_item,:token_skill,:boom_start
      attr_reader   
    :hook_pull, :hook_grab, :event, :knockdown_enable, :boom_grab
      attr_reader   
    :respawn_anim
      alias falcaopearlabs_iniev initialize
      def initialize
    (map_idevent)
        @
    inrangeev nil
        
    @being_targeted false
        
    @agroto_f nil
        
    @draw_drop false
        
    @dropped_items = []
        @
    epassive false
        
    @touch_damage 0
        
    @start_delay 0
        
    @touch_atkdelay 0
        
    @killed false
        
    @knockdown_enable false
        
    @deadposee false
        
    @respawn_anim 0
        create_token_arrays
        falcaopearlabs_iniev
    (map_idevent)
        
    register_enemy(event)
      
    end
      
      def create_token_arrays
        
    @token_weapon = []
        @
    token_armor  = []
        @
    token_item   = []
        @
    token_skill  = []
      
    end
      
      alias falcaopearl_setup_page_settings setup_page_settings
      def setup_page_settings
        create_token_arrays
        falcaopearl_setup_page_settings
        wtag 
    string_data("<start_with_weapon: ")
        @
    token_weapon wtag.split(",").map { |ss.to_i } if wtag != nil
        atag 
    string_data("<start_with_armor: ")
        @
    token_armor atag.split(",").map { |ss.to_i } if atag != nil
        itag 
    string_data("<start_with_item: ")
        @
    token_item itag.split(",").map { |ss.to_i } if itag != nil
        stag 
    string_data("<start_with_skill: ")
        @
    token_skill stag.split(",").map { |ss.to_i } if stag != nil
        
    @hook_pull string_data("<hook_pull: ") == "true"
        
    @hook_grab string_data("<hook_grab: ") == "true"
        
    @boom_grab string_data("<boom_grab: ") == "true"
        
    @boom_start string_data("<boomed_start: ") == "true"
        
    @direction_fix false if @hook_grab
        
    if has_token? || @hook_pull || @hook_grab || @boom_grab || @boom_start
          $game_map
    .events_withtags.push(selfunless
          $game_map
    .events_withtags.include?(self)
        
    end
      end
      
      def has_token
    ?
        !@
    token_weapon.empty? || !@token_armor.empty? || !@token_item.empty? ||
        !@
    token_skill.empty?
      
    end
      
      def register_enemy
    (event)
        
        if !
    $game_system.remain_killed[$game_map.map_id].nil? and
          
    $game_system.remain_killed[$game_map.map_id].include?(self.id)
          return
        
    end
        
        
    @enemy  Game_Enemy.new(0, $1.to_i) if event.name =~ /<enemy: (.*)>/i
        
    if @enemy != nil
          passive 
    = @enemy.enemy.tool_data("Enemy Passive = "false)
          @
    epassive true if passive == "true"
          
    touch = @enemy.enemy.tool_data("Enemy Touch Damage Range = ")
          @
    sensor = @enemy.esensor
          
    @touch_damage touch if touch != nil
          $game_map
    .event_enemies.push(self# new separate enemy list
          
    $game_map.enemies.push(@enemy)     # just enemies used in the cooldown
          
    @event.pages.each do |page|
            if 
    page.condition.self_switch_valid and
              
    page.condition.self_switch_ch == PearlKernel::KnockdownSelfW
              
    @knockdown_enable true
              
    break
            
    end
          end
          pose 
    = @enemy.enemy.tool_data("Enemy Dead Pose = "false) == "true"
          
    @deadposee true if pose and @knockdown_enable
        end
      end
      
      def update_state_effects
        
    @killed ? return : super
      end
      
      def collapsing
    ?
        return 
    true if @killed || @colapse_time 0
        
    return false
      end
      
      def enemy_ready
    ?
        return 
    false if @enemy.nil? || @page.nil? || collapsing? || @enemy.object
        
    return true
      end
      
      def battler
        
    return @enemy
      end
      
      def apply_respawn
        
    return if @colapse_time 0
        
    @draw_drop false
        
    @dropped_items.clear
        
    @through = @die_through
        
    @through false if @through.nil?
        @
    die_through nil
        
    @secollapse nil
        
    @colapse_time 0
        
    @erased false ; @opacity 255
        
    @zoomfx_x 1.0 ; @zoomfx_y 1.0
        
    @killed false
        
    @priority_type if @deadposee
        resetdeadpose
        refresh
      end
      
      def resetdeadpose
        
    if @deadposee
          $game_self_switches
    [[$game_map.map_id, @id,
          
    PearlKernel::KnockdownSelfW]] = false
        end
      end
      
      def kill_enemy
        
    @secollapse nil
        
    @killed true
        
    @priority_type if @deadposee
        gain_exp
        gain_gold
        etext 
    'exp: '  + @enemy.exp.to_s if @enemy.exp 0
        gtext 
    ' руб: ' + @enemy.gold.to_s if @enemy.gold 0
        $game_player
    .pop_damage("#{etext} #{gtext}") if etext || gtext
        make_drop_items
        run_assigned_commands
      end
      
      def run_assigned_commands
        transform 
    = @enemy.enemy.tool_data("Enemy Die Transform = ")
        switch = @
    enemy.enemy.tool_data("Enemy Die Switch = ")
        
    $game_switches[switch] = true if switch != nil
        variable 
    = @enemy.enemy.tool_data("Enemy Die Variable = ")
        
    $game_variables[variable] += if variable != nil
        self_sw 
    = @enemy.enemy.tool_data("Enemy Die Self Switch = "false)
        
    #$game_map.event_enemies.delete(self) if @enemy.object
        #$game_map.enemies.delete(@enemy) if @enemy.object
        
    if self_sw.is_a?(String)
          
    $game_self_switches[[$game_map.map_idself.idself_sw]] = true
          apply_respawn
          $game_map
    .event_enemies.delete(self)
          
    $game_map.enemies.delete(@enemy)
          
    unless $game_system.remain_killed.has_key?($game_map.map_id)
            
    $game_system.remain_killed[$game_map.map_id] = []
          
    end
          $game_system
    .remain_killed[$game_map.map_id].push(self.idunless
          $game_system
    .remain_killed[$game_map.map_id].include?(self.id)
          @
    enemy nil
        
    else
          
    erase unless @deadposee
          respawn 
    = @enemy.enemy.tool_data("Enemy Respawn Seconds = ")
          
    animation = @enemy.enemy.tool_data("Enemy Respawn Animation = ")
          @
    respawn_count respawn 60 unless respawn.nil?
          
          @
    respawn_anim animation unless animation.nil?
          
        
    end
        
    if transform != nil
          
    @enemy Game_Enemy.new(0transform)
          
    apply_respawn
        end
      end
      
      def make_drop_items
        
    @dropped_items = @enemy.make_drop_items
        unless 
    @dropped_items.empty?
          
    $game_player.enemy_drops.push(self)
          
    $game_map.events_withtags.push(selfunless 
          $game_map
    .events_withtags.include?(self)
        
    end
      end
      
      def gain_exp
        
    return if @enemy.exp == 0
        $game_party
    .all_members.each do |actor|
          
    actor.gain_exp(@enemy.exp)
        
    end
      end
      
      def gain_gold
        
    return if @enemy.gold == 0
        $game_party
    .gain_gold(@enemy.gold)
      
    end
      
      alias falcaopearlabs_updatev update
      def update
        
    @start_delay -= if @start_delay 0
        
    @touch_atkdelay -= if @touch_atkdelay 0
        update_enemy_sensor unless 
    @enemy.nil?
        
    update_enemy_touch_damage unless @enemy.nil?
        
    falcaopearlabs_updatev
      end
      
      def update_enemy_touch_damage
        
    return unless @touch_damage 0
        
    return unless @character_name != ""
        
    return if @epassive || @killed
        
    return if @touch_atkdelay 0
        unless 
    @enemy.object
          
    @agroto_f.nil? ? target $game_player target = @agroto_f
        
    else
          
    target $game_player
          $game_player
    .followers.each do |follower|
            
    next unless follower.visible?
            if 
    obj_size?(follower, @touch_damage) and !follower.battler.dead?
              
    execute_touch_damage(follower)
            
    end
          end
        end
        execute_touch_damage
    (target) if obj_size?(target, @touch_damage)
      
    end
      
      def execute_touch_damage
    (target)
        
    target.battler.attack_apply(@enemy)
        
    target.pop_damage
        
    @touch_atkdelay 50
        target
    .colapse_time 60 if target.battler.dead?
        return if 
    target.battler.result.hp_damage == 0
        target
    .jump(00)
      
    end
      
      
    # enemy sensor
      
    def update_enemy_sensor
        
    return if @hookshoting[0]
        return if @
    epassive
        
    if @sensor != nil
          
    @agroto_f.nil? ? target $game_player target = @agroto_f
          
    if obj_size?(target, @sensor)
            
    data = [$game_map.map_id, @idPearlKernel::Enemy_Sensor]
            if @
    inrangeev.nil? and !$game_self_switches[[data[0], data[1],
              
    data[2]]]
              
    $game_self_switches[[data[0], data[1], data[2]]] = true
              
    @inrangeev true
            end
          elsif 
    @inrangeev != nil
            data 
    = [$game_map.map_id, @idPearlKernel::Enemy_Sensor]
            if 
    $game_self_switches[[data[0], data[1], data[2]]]
              
    $game_self_switches[[data[0], data[1], data[2]]] = false
              
    @inrangeev nil
            end
          end
        end
      end
      
      
    # on battle pixel, take a lot of time procesing, but it is very exact
      
    def on_battle_pixel?(out=0)
        
    Graphics.width outGraphics.height out
        
    return true if screen_x.between?(out,w) and screen_y.between?(out,h)
        return 
    false
      end

      def cmt_data
    (comment)
        return 
    if @list.nil? or @list.size <= 0
        
    for item in @list
          if 
    item.code == 108 or item.code == 408
            
    return $1.to_i if item.parameters[0] =~ /#{comment}(.*)>/i
          
    end
        end
        
    return 0
      end
      
      def string_data
    (comment)
        return 
    nil if @list.nil? or @list.size <= 0
        
    for item in @list
          if 
    item.code == 108 or item.code == 408
            
    return $1.to_s if item.parameters[0] =~ /#{comment}(.*)>/i
          
    end
        end
        
    return nil
      end
      
      
    # stop event movement
      
    alias falcaopearl_update_self_movement update_self_movement
      def update_self_movement
        
    return if !@boom_grabdata.nil?
        return if 
    force_stopped? || @colapse_time || @blowpower[0] > 0
        falcaopearl_update_self_movement
      end
    end


    class Game_System
      attr_accessor 
    :remain_killed
      alias falcao_fantastic_store_ini initialize
      def initialize
        falcao_fantastic_store_ini
        
    @remain_killed = {}
      
    end
    end

    #===============================================================================

    # mist
    class Game_Map
      attr_reader   
    :map
      attr_accessor 
    :event_enemies, :enemies, :events_withtags
      alias falcaopearl_enemycontrol_ini initialize
      def initialize
        
    @event_enemies = []
        @
    enemies = []
        @
    events_withtags = []
        
    falcaopearl_enemycontrol_ini
      end
      
      alias falcaopearl_enemycontrol_setup setup
      def setup
    (map_id)
        @
    event_enemies.clear
        
    @enemies.clear
        
    @events_withtags.clear
        falcaopearl_enemycontrol_setup
    (map_id)
        if 
    $game_temp.loadingg != nil
          
    @event_enemies.each do |event|
            
    event.resetdeadpose
          end
          $game_temp
    .loadingg nil
        end
      end
      
      alias falcaopearl_damage_floor damage_floor
    ?
      
    def damage_floor?(xy)
        return if 
    $game_player.hookshoting[1]
        
    falcaopearl_damage_floor(xy)
      
    end
    end

    class Game_Temp
      attr_accessor 
    :pop_windowdata, :loadingg
      def pop_w
    (timenametext)
        return 
    unless @pop_windowdata.nil?
        @
    pop_windowdata = [timetextname]
      
    end
    end

    class Game_Party Game_Unit
      alias falcaopearl_swap_order swap_order
      def swap_order
    (index1index2)
        
    unless SceneManager.scene_is?(Scene_Map)
          if 
    $game_player.in_combat_mode?
            
    $game_temp.pop_w(180'Pearl ABS'
            
    'You cannot switch player while in combat!')
            return
          
    elsif $game_player.any_collapsing?
            
    $game_temp.pop_w(180'Pearl ABS'
            
    'You cannot switch player while collapsing!')
            return
          
    elsif $game_party.battle_members[index2].deadposing != nil
             $game_temp
    .pop_w(180'Pearl ABS'
            
    'Вы не можете управлять компаньонами, что без сознания!')
            return
          
    end
        end
        falcaopearl_swap_order
    (index1index2)
      
    end
    end

    class << DataManager
      alias falcaopearl_extract extract_save_contents
      def DataManager
    .extract_save_contents(contents)
        
    falcaopearl_extract(contents)
        
    $game_temp.loadingg true
      end
    end 
    [/SPOILER]

  2. #2
    Познающий Аватар для Amur_87
    Информация о пользователе
    Регистрация
    28.09.2014
    Адрес
    ДВ, Амурская область
    Сообщений
    316
    Записей в дневнике
    3
    Репутация: 27 Добавить или отнять репутацию

    По умолчанию

    В моей игре Антиква использую это боевку и есть скрипт, при зажатии клавиши "V" Открывалась карта. Проект вроде не зашиврован был.

  3. #3
    Познающий Аватар для VarVarKa
    Информация о пользователе
    Регистрация
    27.03.2016
    Сообщений
    352
    Записей в дневнике
    1
    Репутация: 44 Добавить или отнять репутацию

    По умолчанию

    Дарчан же на Светлой написал команду, с помощью которой можно проверять нажатие клавиш. Для кнопки Z она будет выглядит так: PearlKey.trigger?(0x5A)
    И её можно использовать для проверок в условии.
    К сожалению, не знаю как сделать, чтобы кнопка Z не работала как Enter, но могу показать несколько примеров использования вышеуказанной команды.
    Спойлер Для события:

    С учётом того, что нажатие кнопок в параллельном событие иногда не срабатывает, можно дополнительно использовать цикл с ожиданием:
    Спойлер +:

    Также можно вставить проверку на нажатие клавиши в скрипт боёвки:
    Код:
        if PearlKey.trigger?(0x5A)
          $game_temp.reserve_common_event(15)
        end
    Спойлер :

    Но эта проверка будет работать всегда во время игры, поэтому может вызвать какие-нибудь баги)
    Есть в ней и плюс, в этом случае Z не активирует события по нажатию)
    В примере облачко движется в случайном направление при нажатие z:
    Спойлер Гифка1:

    Через событие:
    Спойлер Гифка2:

  4. #4

    По умолчанию

    Я тут недавно, ты выкладывал проект на форум "Нейтралки"?

  5. #5

    По умолчанию

    Спасибо, ты мне очень сильно помогла!
    Теперь я смогу реализовать давно задуманные идеи! Ура!!

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
Отследить новые клавиши Falcao