ESS多版本 【原创】无限之笛实现飞翔

ES泽洛

世末鸽者
管理员
元老
2022-08-04
226
14
286
2,116
23
安徽
www.esplus.club
本教程为原创,使用或转载请注明出自宝可饭堂社区https://bbs.pokefans.cn/threads/51/
仅在18.1和19.1测试过,并且代码不同,请按需查看。20.1的代码请看楼下。
在教程开始之前先看效果示例,虽然有徽章检测,但仍建议给道具的NPC放在给飞翔秘传机的NPC一起或者附近。
QQ图片20220829124159.pngQQ图片20220829124205.pngQQ图片20220829124209.pngQQ图片20220829124212.png
接着来看教程,首先准备好无限之笛道具的数据写在PBS/items.txt中,XXXX为你的道具内部编号。
代码:
XXXX,EONFLUTE,无限之笛,无限之笛,8,0,无论身在何处,都能召唤拉帝亚斯或 拉帝欧斯飞翔的笛子。,2,0,6,
对于ESS18,将图标放在Graphics/Icons文件夹,并命名为itemXXXX.png,XXXX为你的道具内部编号。
对于ESS19,将图标放在Graphics/Items文件夹,并命名为EONFLUTE.png。
音效文件放在Audio/ME文件夹下
(以上文件见附件)
最后是实现代码

在PItem_ItemEffects的末尾添加如下代码:
Ruby:
#在背包中使用
ItemHandlers::UseFromBag.add(:EONFLUTE,proc{|item|
  next false if !pbCheckHiddenMoveBadge(BADGE_FOR_FLY,true)
  pbMessage(_INTL("\\me[无限之笛]{1}吹响了无限之笛。\\wtnp[30]",$Trainer.name))
  if !pbGetMetadata($game_map.map_id,MetadataOutdoor)
    pbMessage(_INTL("似乎没有宝可梦听到笛声。"))
    next 0
  end
  pbMessage(_INTL("宝可梦听到笛声了!"))
  scene = PokemonRegionMap_Scene.new(-1,false)
  screen = PokemonRegionMapScreen.new(scene)
  ret = screen.pbStartFlyScreen
  next 0 if !ret
  $PokemonTemp.flydata=ret
  pkmn = pbGenPkmn(:LATIOS,50)    #拉帝欧斯
#  pkmn = pbGenPkmn(:LATIAS,50)    #拉帝亚斯
  if !pbHiddenMoveAnimation(pkmn)
    pbMessage(_INTL("{1}召唤的宝可梦使用了飞翔!",$Trainer.name))
  end
  pbFadeOutIn {
    $game_temp.player_new_map_id    = $PokemonTemp.flydata[0]
    $game_temp.player_new_x         = $PokemonTemp.flydata[1]
    $game_temp.player_new_y         = $PokemonTemp.flydata[2]
    $game_temp.player_new_direction = 2
    $PokemonTemp.flydata = nil
    $scene.transfer_player
    $game_map.autoplay
    $game_map.refresh
  }
  pbEraseEscapePoint
  next 0
})
#在野外通过快捷键使用
ItemHandlers::UseInField.add(:EONFLUTE,proc{|item|
  next false if !pbCheckHiddenMoveBadge(BADGE_FOR_FLY,true)
  pbMessage(_INTL("\\me[无限之笛]{1}吹响了无限之笛。\\wtnp[30]",$Trainer.name))
  if !pbGetMetadata($game_map.map_id,MetadataOutdoor)
    pbMessage(_INTL("似乎没有宝可梦听到笛声。"))
    next false
  end
  pbMessage(_INTL("宝可梦听到笛声了!"))
  scene = PokemonRegionMap_Scene.new(-1,false)
  screen = PokemonRegionMapScreen.new(scene)
  ret = screen.pbStartFlyScreen
  next false if !ret
  $PokemonTemp.flydata=ret
  pkmn = pbGenPkmn(:LATIOS,50)    #拉帝欧斯
#  pkmn = pbGenPkmn(:LATIAS,50)    #拉帝亚斯
  if !pbHiddenMoveAnimation(pkmn)
    pbMessage(_INTL("{1}召唤的宝可梦使用了飞翔!",$Trainer.name))
  end
  pbFadeOutIn {
    $game_temp.player_new_map_id    = $PokemonTemp.flydata[0]
    $game_temp.player_new_x         = $PokemonTemp.flydata[1]
    $game_temp.player_new_y         = $PokemonTemp.flydata[2]
    $game_temp.player_new_direction = 2
    $PokemonTemp.flydata = nil
    $scene.transfer_player
    $game_map.autoplay
    $game_map.refresh
  }
  pbEraseEscapePoint
  next true
})
在Item_Effects的末尾添加如下代码:
Ruby:
#在背包中使用
ItemHandlers::UseFromBag.add(:EONFLUTE,proc{|item|
  next false if !pbCheckHiddenMoveBadge(Settings::BADGE_FOR_FLY,true)
  pbMessage(_INTL("\\me[无限之笛]{1}吹响了无限之笛。\\wtnp[30]",$Trainer.name))
  if !GameData::MapMetadata.get($game_map.map_id).outdoor_map
    pbMessage(_INTL("似乎没有宝可梦听到笛声。"))
    next 0
  end
  pbMessage(_INTL("宝可梦听到笛声了!"))
  scene = PokemonRegionMap_Scene.new(-1,false)
  screen = PokemonRegionMapScreen.new(scene)
  ret = screen.pbStartFlyScreen
  next 0 if !ret
  $PokemonTemp.flydata=ret
  pkmn = pbGenPkmn(:LATIOS,50)    #拉帝欧斯
#  pkmn = pbGenPkmn(:LATIAS,50)    #拉帝亚斯
  if !pbHiddenMoveAnimation(pkmn)
    pbMessage(_INTL("{1}召唤的宝可梦使用了飞翔!",$Trainer.name))
  end
  pbFadeOutIn {
    $game_temp.player_new_map_id    = $PokemonTemp.flydata[0]
    $game_temp.player_new_x         = $PokemonTemp.flydata[1]
    $game_temp.player_new_y         = $PokemonTemp.flydata[2]
    $game_temp.player_new_direction = 2
    $PokemonTemp.flydata = nil
    $scene.transfer_player
    $game_map.autoplay
    $game_map.refresh
  }
  pbEraseEscapePoint
  next 0
})
#在野外通过快捷键使用
ItemHandlers::UseInField.add(:EONFLUTE,proc{|item|
  next false if !pbCheckHiddenMoveBadge(Settings::BADGE_FOR_FLY,true)
  pbMessage(_INTL("\\me[无限之笛]{1}吹响了无限之笛。\\wtnp[30]",$Trainer.name))
  if !GameData::MapMetadata.get($game_map.map_id).outdoor_map
    pbMessage(_INTL("似乎没有宝可梦听到笛声。"))
    next false
  end
  pbMessage(_INTL("宝可梦听到笛声了!"))
  scene = PokemonRegionMap_Scene.new(-1,false)
  screen = PokemonRegionMapScreen.new(scene)
  ret = screen.pbStartFlyScreen
  next false if !ret
  $PokemonTemp.flydata=ret
  pkmn = pbGenPkmn(:LATIOS,50)    #拉帝欧斯
#  pkmn = pbGenPkmn(:LATIAS,50)    #拉帝亚斯
  if !pbHiddenMoveAnimation(pkmn)
    pbMessage(_INTL("{1}召唤的宝可梦使用了飞翔!",$Trainer.name))
  end
  pbFadeOutIn {
    $game_temp.player_new_map_id    = $PokemonTemp.flydata[0]
    $game_temp.player_new_x         = $PokemonTemp.flydata[1]
    $game_temp.player_new_y         = $PokemonTemp.flydata[2]
    $game_temp.player_new_direction = 2
    $PokemonTemp.flydata = nil
    $scene.transfer_player
    $game_map.autoplay
    $game_map.refresh
  }
  pbEraseEscapePoint
  next true
})
教程结束。
 

附件

  • 无限之笛.mp3
    24.8 KB
  • item1091.png
    item1091.png
    5.4 KB · 查看: 14
最后编辑:

LQWU

天王
成员
2023-07-12
45
2
18
1,461
(这是在ES大佬原创的代码基础上改的)
非常感谢ES泽洛大佬的教程,但是这不支持20.1,所以我抄了抄大佬的作业,改了一点代码,没想到居然成了,再次感谢ES。(有点小报错,找不到ME的音乐,所以我将音乐格式改成了wav)
首先在PBS/items.txt中创建一个道具
代码:
[EONFLUTE]
Name = 无限之笛
NamePlural = 无限之笛
Pocket = 8
Price = 0
Flags = KeyItem
FieldUse = Direct
Description = 无论身在何处,都能召唤拉帝亚斯或拉帝欧斯飞翔的笛子
对于ESS20.1,将图标放在Graphics/Items文件夹,并命名为EONFLUTE.png。
音效文件放在Audio/ME文件夹下
在Item_Effects的末尾添加如下代码:
实现代码
Ruby:
#在背包中使用
ItemHandlers::UseFromBag.add(:EONFLUTE,proc{|item|
  next false if !pbCheckHiddenMoveBadge(Settings::BADGE_FOR_FLY,true)
  pbMessage(_INTL("\\me[无限之笛]{1}吹响了无限之笛。\\wtnp[30]",$Trainer.name))
  if !GameData::MapMetadata.get($game_map.map_id).outdoor_map
    pbMessage(_INTL("似乎没有宝可梦听到笛声。"))
    next 0
  end
  pbMessage(_INTL("宝可梦听到笛声了!"))
  scene = PokemonRegionMap_Scene.new(-1,false)
  screen = PokemonRegionMapScreen.new(scene)
  ret = screen.pbStartFlyScreen
  next 0 if !ret
  $game_temp.fly_destination=ret
  pkmn = Pokemon.new(:LATIOS,50)    #拉帝欧斯
#  pkmn = Pokemon.new(:LATIAS,50)    #拉帝亚斯
  if !pbHiddenMoveAnimation(pkmn)
    pbMessage(_INTL("{1}召唤的宝可梦使用了飞翔!",$Trainer.name))
  end
  pbFadeOutIn {
    $game_temp.player_new_map_id    = $game_temp.fly_destination[0]
    $game_temp.player_new_x         = $game_temp.fly_destination[1]
    $game_temp.player_new_y         = $game_temp.fly_destination[2]
    $game_temp.player_new_direction = 2
    $game_temp.fly_destination = nil
    $scene.transfer_player
    $game_map.autoplay
    $game_map.refresh
  }
  pbEraseEscapePoint
  next 0
})
#在野外通过快捷键使用
ItemHandlers::UseInField.add(:EONFLUTE,proc{|item|
  next false if !pbCheckHiddenMoveBadge(Settings::BADGE_FOR_FLY,true)
  pbMessage(_INTL("\\me[无限之笛]{1}吹响了无限之笛。\\wtnp[30]",$Trainer.name))
  if !GameData::MapMetadata.get($game_map.map_id).outdoor_map
    pbMessage(_INTL("似乎没有宝可梦听到笛声。"))
    next false
  end
  pbMessage(_INTL("宝可梦听到笛声了!"))
  scene = PokemonRegionMap_Scene.new(-1,false)
  screen = PokemonRegionMapScreen.new(scene)
  ret = screen.pbStartFlyScreen
  next false if !ret
  $game_temp.fly_destination=ret
  pkmn = Pokemon.new(:LATIOS,50)    #拉帝欧斯
#  pkmn = Pokemon.new(:LATIAS,50)    #拉帝亚斯
  if !pbHiddenMoveAnimation(pkmn)
    pbMessage(_INTL("{1}召唤的宝可梦使用了飞翔!",$Trainer.name))
  end
  pbFadeOutIn {
    $game_temp.player_new_map_id    = $game_temp.fly_destination[0]
    $game_temp.player_new_x         = $game_temp.fly_destination[1]
    $game_temp.player_new_y         = $game_temp.fly_destination[2]
    $game_temp.player_new_direction = 2
    $game_temp.fly_destination = nil
    $scene.transfer_player
    $game_map.autoplay
    $game_map.refresh
  }
  pbEraseEscapePoint
  next true
})
由于我开始学ruby,也没啥基础,只是在找不同和抄大佬的作业,所从可能会有BUG(甚至非常恶性),所以如果你想使用它,请提前备份好你的游戏文件或等待大佬的更新支持,在此表示抱歉(因为有BUG我估计也无法修复,抱歉抱歉)备份!备份!备份!
 

附件

  • 无限之笛.wav
    218.3 KB
最后编辑:
  • 支持
反馈: 蔚然成风

在线成员

现在没有会员在线。

论坛统计

主题
338
消息
1,554
会员
2,309
最新会员
CHEN

关于我们

  • 宝可梦以及其他相关名称是任天堂的商标,版权归宝可梦公司所有。宝可饭堂是一个同人游戏中文社区,不隶属于宝可梦公司。在宝可饭堂上的粉丝游戏亦未获得其授权,请支持正版游戏。
© 2022- pokefans.cn
点此延长宝可饭堂生命