设为首页收藏本站同能贴吧 切换语言 繁体中文
开启辅助访问 切换到窄版
扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 108|回复: 0

[转载发布] Region Restricted Movement

[复制链接]
累计送礼:
0 个
累计收礼:
1 个
  • TA的每日心情
    开心
    2026-7-12 04:10
  • 签到天数: 209 天

    连续签到: 2 天

    [LV.7]常住居民III

    9071

    主题

    864

    回帖

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    7
    卡币
    58883
    OK点
    16
    推广点
    0
    同能卷
    50
    积分
    68848

    灌水之王

    发表于 2026-8-2 09:20:16 | 显示全部楼层 |阅读模式
    Region Restricted Movement





    Overview
    This script lets you create regions on the map that the player/events can't pass through.
    You can specific the forbidden regions for each event individually or all of them(globally), as well
    as having multiple forbidden regions per event/player if you desire.

    Install
    Paste the script in the Script Editor under Materials and above Main.

    Usage

    SpoilerPlease see the attached demo below if any of this is confusing.

    First create regions on the map you don't want crossed.

    Use any of the following script calls within a movement route,
    (note these work for both player and event and are for use in a movement routes only):
    move_down_region(region)  - where region is the id of the region

    You can also have up to 6 forbidden regions per script call, and do all direction and random:
    move_down_region(region1,region2,....region6)
    move_left_region(region1,region2,....region6)
    move_right_region(region1,region2,....region6)
    move_up_region(region1,region2,....region6)
    move_random_region(region1,region2,....region6)

    You can also use globally forbidden regions on either all events, the player, or both.
    You can add as many as you want.
    Use any of the following script calls, these will work outside of movement route:
    ---for forbidding the player
    player_forbid_region_add(region)
    player_forbid_region_remove(region)
    player_forbid_region_reset

    ---for forbidding all events
    events_forbid_region_add(region)
    events_forbid_region_remove(region)
    events_forbid_region_reset
    ---for forbidding all events and player
    all_forbid_region_add(region)
    all_forbid_region_remove(region)
    all_forbid_region_reset



    Script
    Spoiler#===============================================================================# Region Restricted Movement Script By pizzacat# v1# July 19, 2015#===============================================================================## ---Description---## This script lets you create regions that the player/events can't pass/through# Using this script you can set specific regions for specific events or the player# with movement routes as well as on a global level.#-------------------------------------------------------------------------------## ---Installation---# place this script below Materials and above Main in the Script Editor.#-------------------------------------------------------------------------------## ------How to use in movement routes-------# ------------------------------------------# First draw a region(s) on the map you don't want to the event/player to pass,# you can create as many regions as you want, the following supports up to 6 per# event/player.# Second, in a movement route for the Event, choose script and use # any of the follow methods:##   move_down_region(forbidden_region)#   move_left_region(forbidden_region)#   move_right_region(forbidden_region)#   move_up_region(forbidden_region)#   move_random_region(forbidden_region)## forbidden_region is the ID number of the region you don't want the # event/player to pass.# have up to 6 forbidden regions per method above, like:# move_down_region(forbidden_region1,forbidden_region2,......,forbidden_region6)# Event/player will not pass any forbidden regions## ------How to use globally--------# ---------------------------------# You can also simply forbid all movement pass regions# You can have as many globally forbidden regions as you want# use the following script calls(can be done outside a movement route):## ---for forbidding the player#  player_forbid_region_add(region)#  player_forbid_region_remove(region)#  player_forbid_region_reset## ---for forbidding all events#  events_forbid_region_add(region)#  events_forbid_region_remove(region)#  events_forbid_region_reset## ---for forbidding all events and player#  all_forbid_region_add(region)#  all_forbid_region_remove(region)#  all_forbid_region_reset## use methods with "add" to forbid a region, "remove" to re-allow a region,# "reset" to allow all regions again.#-------------------------------------------------------------------------------###code starts belowmodule PIZZA  module REGION    ####below are used to set GLOBAL regions to forbid all from passing     #Can be set while is running with script calls using        # Creates an empty array to hold player forbidden regions.    FP = Array[]    # Creates an empty array to hold events forbidden regions.    FE = Array[]    # Creates an empty array to hold All(Player+Event) forbidden regions.    FA = Array[]    endendclass Game_Interpreter  ##creates methods    def player_forbid_region_add(region)    #forbids the player to move in a region    PIZZA::REGION::FP.push(region)  end    def player_forbid_region_remove(region)    #removes a previously added forbidden regions    PIZZA::REGION::FP.delete(region)  end    def player_forbid_region_reset    #removes all forbidden regions    while (PIZZA::REGION::FP.empty? == false)      PIZZA::REGION::FP.pop()    end  end    def events_forbid_region_add(region)    #forbids the player to move in a region    PIZZA::REGION::FE.push(region)  end    def events_forbid_region_remove(region)    #removes a previously added forbidden regions    PIZZA::REGION::FE.delete(region)  end    def events_forbid_region_reset    #removes all forbidden regions    while (PIZZA::REGION::FE.empty? == false)      PIZZA::REGION::FE.pop()    end  end    def all_forbid_region_add(region)    #forbids the player to move in a region    PIZZA::REGION::FA.push(region)  end    def all_forbid_region_remove(region)    #removes a previously added forbidden regions    PIZZA::REGION::FA.delete(region)  end    def all_forbid_region_reset    #removes all forbidden regions    while (PIZZA::REGION::FA.empty? == false)      PIZZA::REGION::FA.pop()    end  end  endclass Game_Character < Game_CharacterBase  ##----------------------------------------------#  handles global regions##----------------------------------------------  #alias method to passable?  alias pizza_passable passable?  def passable?(x, y, d)    return false if (passable_region?(d) == false)    return pizza_passable(x, y, d)  end    #checks if passable global regions  def passable_region?(d)    if (self.is_a?(Game_Player) == true)      region = region_get(d)      PIZZA::REGION::FP.each_index do |index|          return false if (region == PIZZA::REGION::FP[index])      end      PIZZA::REGION::FA.each_index do |index|          return false if (region == PIZZA::REGION::FA[index])      end      elsif (self.is_a?(Game_Event) == true)      region = region_get(d)      PIZZA::REGION::FE.each_index do |index|          return false if (region == PIZZA::REGION::FE[index])      end      PIZZA::REGION::FA.each_index do |index|          return false if (region == PIZZA::REGION::FA[index])      end     end    return true  end    ##----------------------------------------------  #  Methods for player/indivdual events  #  All methods below are to be used with  #  movement routes  ##----------------------------------------------    def move_random_region(freg1=1,freg2=-1,freg3=-1,freg4=-1,freg5=-1,freg6=-1)    #checks if not moving to a forbidden region(s), moves randomly if none    #freg is short for forbidden region, set to -1 to not use extras    d = 2 + rand(4) * 2 #new random direction    region = region_get(d)    #moves if it doesn't hit forbidden region    if ((region != freg1) and (region != freg2) and (region != freg3) and       (region != freg4) and (region != freg5) and (region != freg6))      #moves if not in a disallowed region      move_straight(d, false)    else      #waits if can't move that direction      @wait_count = 60    end  end    def move_down_region(freg1=1,freg2=-1,freg3=-1,freg4=-1,freg5=-1,freg6=-1)    #moves down if doesn't pass a region that is forbidden    d = 2    region = region_get(d)    #moves if it doesn't hit forbidden region    if ((region != freg1) and (region != freg2) and (region != freg3) and       (region != freg4) and (region != freg5) and (region != freg6))      #moves if not in a disallowed region      move_straight(d, false)    else      #waits if can't move that direction      @wait_count = 60    end  end    def move_left_region(freg1=1,freg2=-1,freg3=-1,freg4=-1,freg5=-1,freg6=-1)    #moves left if doesn't pass a region that is forbidden    d = 4    region = region_get(d)    #moves if it doesn't hit forbidden region    if ((region != freg1) and (region != freg2) and (region != freg3) and       (region != freg4) and (region != freg5) and (region != freg6))      #moves if not in a disallowed region      move_straight(d, false)    else      #waits if can't move that direction      @wait_count = 60    end  end    def move_right_region(freg1=1,freg2=-1,freg3=-1,freg4=-1,freg5=-1,freg6=-1)    #moves right if doesn't pass a region that is forbidden    d = 6    region = region_get(d)    #moves if it doesn't hit forbidden region    if ((region != freg1) and (region != freg2) and (region != freg3) and       (region != freg4) and (region != freg5) and (region != freg6))      #moves if not in a disallowed region      move_straight(d, false)    else      #waits if can't move that direction      @wait_count = 60    end  end    def move_up_region(freg1=1,freg2=-1,freg3=-1,freg4=-1,freg5=-1,freg6=-1)    #moves up if doesn't pass a region that is forbidden    d = 8    region = region_get(d)    #moves if it doesn't hit forbidden region    if ((region != freg1) and (region != freg2) and (region != freg3) and       (region != freg4) and (region != freg5) and (region != freg6))      #moves if not in a disallowed region      move_straight(d, false)    else      #waits if can't move that direction      @wait_count = 60    end  end    def region_get(d)    #gets the region at a given facing direction    #d = facing direction to check    case d    when 1; region = $game_map.region_id(@x-1, @y+1)    when 2; region = $game_map.region_id(@x, @y+1)    when 3; region = $game_map.region_id(@x+1, @y+1)    when 4; region = $game_map.region_id(@x-1, @y)    when 5; region = $game_map.region_id(@x, @y)    when 6; region = $game_map.region_id(@x+1, @y)    when 7; region = $game_map.region_id(@x-1, @y-1)    when 8; region = $game_map.region_id(@x, @y-1)    when 9; region = $game_map.region_id(@x+1, @y-1)    end    return region  endend



    Script Demo

    Download here


    本贴来自国际rpgmaker官方论坛作者:pizzacat处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:https://forums.rpgmakerweb.com/threads/region-restricted-movement.42728/

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    简体中文
    繁體中文
    English(英语)
    日本語(日语)
    Deutsch(德语)
    Русский язык(俄语)
    بالعربية(阿拉伯语)
    Türkçe(土耳其语)
    Português(葡萄牙语)
    ภาษาไทย(泰国语)
    한어(朝鲜语/韩语)
    Français(法语)
    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2026-8-17 12:37 , Processed in 0.141692 second(s), 55 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表