- Сообщений: 1239
- Спасибо получено: 1045
Skill items
12 года 8 мес. назад - 12 года 8 мес. назад #64251
от Sypherot
Всего хорошего, и спасибо за рыбу
Sypherot создал тему: Skill items
Данный скрипт позволяет изучать навыки путем использования предметов (скажем, прочитал книжку по врачеванию - научился навыку "лечение"). Да, подобное есть в эвентах, но в них скилл изучит только назначенный командой персонаж, тогда как в данном случае его изучает тот персонаж, на котором был использован данный предмет.
Собственно сам скрипт:
Собственно сам скрипт:
ВНИМАНИЕ: Спойлер!
Code:
=begin
Script: Skill Items
Author: game_guy
Date: May 5th, 2009
Intro:
Makes items teach players skills.
Insstructions:
First go in the database, go to the System Tab and make a new element id and name
it Skill Item. Come back in here and change the 17 below in the module to the id
of the element you just made.
Now go further below and you'll see
# CONFIG use
follow those instructions to set skills to item id's. Then you're set.
One more thing, in items, the ones that are skill items make sure to mark the
element id that you chose in the Elements or else it wont work.
=end
module GameGuy
ElementId = 17 # The elemental id in the System tab
end
module RPG
class Item
def skill
case id
# CONFIG use
# when x return y
# x = item id, y = skill id
# when 2 then return 13
# The above will make item id 2 make an actor learn the skill id of 13
when 48 then return 1
end
end
end
end
#==============================================================================
# ** Scene_Item
#------------------------------------------------------------------------------
# This class performs item screen processing.
#==============================================================================
class Scene_Item
#--------------------------------------------------------------------------
# * Main Processing
#--------------------------------------------------------------------------
def main
# Make help window, item window
@help_window = Window_Help.new
@item_window = Window_Item.new
# Associate help window
@item_window.help_window = @help_window
# Make target window (set to invisible / inactive)
@target_window = Window_Target.new
@target_window.visible = false
@target_window.active = false
# Execute transition
Graphics.transition
# Main loop
loop do
# Update game screen
Graphics.update
# Update input information
Input.update
# Frame update
update
# Abort loop if screen is changed
if $scene != self
break
end
end
# Prepare for transition
Graphics.freeze
# Dispose of windows
@help_window.dispose
@item_window.dispose
@target_window.dispose
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
# Update windows
@help_window.update
@item_window.update
@target_window.update
# If item window is active: call update_item
if @item_window.active
update_item
return
end
# If target window is active: call update_target
if @target_window.active
update_target
return
end
end
#--------------------------------------------------------------------------
# * Frame Update (when item window is active)
#--------------------------------------------------------------------------
def update_item
# If B button was pressed
if Input.trigger?(Input::B)
# Play cancel SE
$game_system.se_play($data_system.cancel_se)
# Switch to menu screen
$scene = Scene_Menu.new(0)
return
end
# If C button was pressed
if Input.trigger?(Input::C)
# Get currently selected data on the item window
@item = @item_window.item
# If not a use item
unless @item.is_a?(RPG::Item)
# Play buzzer SE
$game_system.se_play($data_system.buzzer_se)
return
end
# If it can't be used
unless $game_party.item_can_use?(@item.id)
# Play buzzer SE
$game_system.se_play($data_system.buzzer_se)
return
end
# Play decision SE
$game_system.se_play($data_system.decision_se)
# If effect scope is an ally
if @item.scope >= 3
# Activate target window
@item_window.active = false
@target_window.x = (@item_window.index + 1) % 2 * 304
@target_window.visible = true
@target_window.active = true
# Set cursor position to effect scope (single / all)
if @item.scope == 4 || @item.scope == 6
@target_window.index = -1
else
@target_window.index = 0
end
# If effect scope is other than an ally
else
# If command event ID is valid
if @item.common_event_id > 0
# Command event call reservation
$game_temp.common_event_id = @item.common_event_id
# Play item use SE
$game_system.se_play(@item.menu_se)
# If consumable
if @item.consumable
# Decrease used items by 1
$game_party.lose_item(@item.id, 1)
# Draw item window item
@item_window.draw_item(@item_window.index)
end
# Switch to map screen
$scene = Scene_Map.new
return
end
end
return
end
end
#--------------------------------------------------------------------------
# * Frame Update (when target window is active)
#--------------------------------------------------------------------------
def update_target
# If B button was pressed
if Input.trigger?(Input::B)
# Play cancel SE
$game_system.se_play($data_system.cancel_se)
# If unable to use because items ran out
unless $game_party.item_can_use?(@item.id)
# Remake item window contents
@item_window.refresh
end
# Erase target window
@item_window.active = true
@target_window.visible = false
@target_window.active = false
return
end
# If C button was pressed
if Input.trigger?(Input::C)
# If items are used up
if $game_party.item_number(@item.id) == 0
# Play buzzer SE
$game_system.se_play($data_system.buzzer_se)
return
end
# If target is all
if @target_window.index == -1
# Apply item effects to entire party
used = false
for i in $game_party.actors
used |= i.item_effect(@item)
end
end
# If single target
if @target_window.index >= 0
# Apply item use effects to target actor
target = $game_party.actors[@target_window.index]
if @item.element_set.include?(17)
$game_actors[$game_party.actors[@target_window.index].id].learn_skill(@item.skill)
used = true
else
used = target.item_effect(@item)
end
end
# If an item was used
if used
# Play item use SE
$game_system.se_play(@item.menu_se)
# If consumable
if @item.consumable
# Decrease used items by 1
$game_party.lose_item(@item.id, 1)
# Redraw item window item
@item_window.draw_item(@item_window.index)
end
# Remake target window contents
@target_window.refresh
# If all party members are dead
if $game_party.all_dead?
# Switch to game over screen
$scene = Scene_Gameover.new
return
end
# If common event ID is valid
if @item.common_event_id > 0
# Common event call reservation
$game_temp.common_event_id = @item.common_event_id
# Switch to map screen
$scene = Scene_Map.new
return
end
end
# If item wasn't used
unless used
# Play buzzer SE
$game_system.se_play($data_system.buzzer_se)
end
return
end
end
end
Всего хорошего, и спасибо за рыбу
Последнее редактирование: 12 года 8 мес. назад пользователем Cerberus.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Скрыть
Больше
- Сообщений: 437
- Спасибо получено: 165
12 года 8 мес. назад #64254
от Dprizrak1
(
)
Этот форум слишком умный для меня
Dprizrak1 ответил в теме Skill items
Глупый вопрос, но это же на VXA?
(
)Этот форум слишком умный для меня
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
12 года 8 мес. назад - 12 года 8 мес. назад #64256
от Sypherot
Всего хорошего, и спасибо за рыбу
Sypherot ответил в теме Skill items
Это на ХР, иначе бы он лежал в разделе скриптов RGSS2/3
хотя может и на эйсе пойдет.
хотя может и на эйсе пойдет.
Всего хорошего, и спасибо за рыбу
Последнее редактирование: 12 года 8 мес. назад пользователем Sypherot.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
12 года 8 мес. назад #64258
от DeadElf79
DeadElf79 ответил в теме Skill items
Воспользуйся тегом [ code type=ruby ], пожалуйста.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
12 года 8 мес. назад #64261
от Cerberus
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Время создания страницы: 0.096 секунд
