Pomógł: 15 razy Dołączył: 20 Kwi 2012 Posty: 186 Skąd: się biorą dzieci?
Wysłany: Sob 19 Maj, 2012 09:36
Deity Lockpick
~ Lockpick System ~
Krótki opis:
Jest to całkiem fajny skrypt, który pozwala za pomocą wytrychów otwierać skrzynie.
Autor:
Deity (email nieznany)
Kompatybilność:
RPG Maker VX
Skrypt:
Spoiler:
Kod:
##
# Script: Lockpick System #
# by Deity [translated to English by modern algebra (rmrk.net)] #
##
# Description: #
# This script simulates a lockpicking system similar to that #
# in Oblivion which allows you to set certain chests to only #
# open once successfully picking the lock. Essentially, the #
# system requires the player to successfully push all of the #
# "sticks" into the up position - a failure results in a #
# destroyed lockpick. Once all sticks are up, self-switch A of #
# the particular event is turned on and you can put in the #
# success results #
##
# Instructions: #
# First, you must look at all of the constants under the #
# Settings heading and configure the script to your liking. #
# Read all the descriptions before using the script. #
# #
# Now, to create a lock on an event, you must create a #
# comment somewhere in the event. The first line in this #
# comment must be what you have set as SP_WORD at line 70. You #
# must then go down to the second line of the comment and #
# write the positions of the five "sticks". for ones that you #
# want the player to have to unlock, put "down" and for the #
# ones you already want to be unlocked, put "up". Be sure to #
# put spaces between each word #
# #
# EXAMPLE: #
# @>Comment:SP_WORD #
# : :up down up down down #
# #
# This would create a lock where the player would have to #
# push up the 2nd, 4th, and 5th sticks, while the other two #
# are already up. #
# #
# Once the player is successful, Self-Switch A for that event #
# is turned on. #
# Settings #
# true = yes / false = no #
module Lockpicking
# Picture Resources (Graphics/Pictures) #
# Name of the background image (appears behind sticks and lockpick)
BACKGROUND_IAMGE_NAME = "LockBack"
# Name of the image used for each "stick"
STICK_IMAGE_NAME = "LockStick"
# Name of the image used for the lockpick
LOCKPICK_IMAGE_NAME = "Lockpick"
# Name of the foreground image (appears above sticks and lockpick)
FORGROUND_IMAGE_NAME = "LockFor"
# System Settings #
# Opacity of info and help window (0-255)
OPACITY = 200
# default amount of time stick waits in up position for player to press ENTER
# It is in frames (60 frames = 1 second)
WAIT_TIME = 20
# ID of the variable to add or subtract time from the wait period. This can
# be used to make some locks harder or easier - the value of the variable
# will be added to the WAIT_TIME.
WAIT_MOD_VARIABLE_ID = 1
# ID of the lockpick item.
LOCKPICK_ID = 1
# Lockpicks destroyed upon failure? true => breakable; false => unbreakable
LOCKPICK_BREAKABLE = true
# Text to show in information window
INFO_TEXT = "ESC: Exit | ARROW KEYS: Control | ENTER: Attempt | SHIFT: Info"
# Plural name for lockpicks
LOCKPICK_NAME = "Lockpicks:"
# This is the key word which you have to preface you comment with
SP_WORD = "Treasure"
# Sound Effects #
# Sound Effect when succeed in opening lock
SOUND_OPEN = "Close1"
# Sound Effect when attempt fails
SOUND_FAIL = "Bite"
# Sound Effect when the
SOUND_STICK = "Stare"
# Sound Effect when toggling the visibility of the Info Window
SOUND_INFOSWITCH = "Switch2"
# Do not edit past this point unless you are a scripter and #
# know what you are doing.
##
end
include Lockpicking
class Scene_Lockpick < Scene_Base
def initialize(switches,event_id = 0)
@switches = switches
@controll = switches
@images = []
@sticks = []
@lockpick_index = 1
@animation = 0
@press = false
@sekunde = 0
@event_id = event_id
@normal_stick_y = 0
@wait_for_press = false
end
def start
@help = Window_Help.new
@help.opacity = OPACITY
@help.y = 416 - 56
@help.set_text(INFO_TEXT,1)
@info = Window_Base.new(0,0,544,56)
@info.opacity = OPACITY
@info.contents.draw_text(0,0,512,24,LOCKPICK_NAME,0)
@info.contents.draw_text(0,0,512,24,$game_party.item_number($data_items[LOCKPICK_ID]).to_s,2)
create_menu_background
@menuback_sprite.z -= 1
draw_scene
end
def draw_scene
@background = Sprite.new
@background.bitmap = Cache.picture(BACKGROUND_IAMGE_NAME)
@background.x = (544 - @background.width) / 2
@background.y = (416 - @background.height) / 2
@images.push(@background)
for i in 0...5
stick = Sprite.new
stick.bitmap = Cache.picture (STICK_IMAGE_NAME)
stick.x = ((544 - (stick.width*9)) / 2) + (2 * i * stick.width)
stick.y = (416 - stick.height) / 2
stick.y -= 20 if @switches[i].include? ("up")
@images.push (stick)
@sticks.push (stick)
end
@normal_stick_y = (416 - @sticks[0].height) / 2
@lockpick = Sprite.new
if $game_party.item_number($data_items[LOCKPICK_ID]) > 0
@lockpick.bitmap = Cache.picture(LOCKPICK_IMAGE_NAME)
@lockpick.x = @sticks[0].x - @lockpick.width + (@sticks[0].width / 2)
@lockpick.y = @normal_stick_y + @sticks[0].height + 5
@lockpicky = @lockpick.y
@images.push(@lockpick)
end
@forground = Sprite.new
@forground.bitmap = Cache.picture(FORGROUND_IMAGE_NAME)
@forground.x = (544 - @forground.width) / 2
@forground.y = (416 - @forground.height) / 2
@forground.z = @lockpick.z + 1
@images.push(@forground)
end
def dispose_all
for i in @images
i.dispose if i != nil
end
@help.dispose
@info.dispose
dispose_menu_background
end
def update_lockpick
@lockpick.x = @sticks[0].x - @lockpick.width + (@sticks[0].width * (2*@lockpick_index - 1.5))
end
def start_lockpick_animation
if @press == true && @switches[@lockpick_index - 1] == "down"
if @animation <= 5
@lockpick.y -= 1
@animation += 1
end
if @animation > 5 && @animation <= 10
@sticks[@lockpick_index - 1].y -= 1
@lockpick.y -= 1 if @animation <= 10
@animation += 1
end
wait_time = WAIT_TIME
wait_time += $game_variables[WAIT_MOD_VARIABLE_ID] unless WAIT_MOD_VARIABLE_ID < 1
wait_time = 1 if wait_time < 1
if @animation > 10 && @animation <= 25
@lockpick.y += 1 if @animation <= 21
if @switches[@lockpick_index - 1].include?("down")
@sticks[@lockpick_index - 1].y -= 1
end
@animation += 1
elsif @animation > 25 && @sekunde == 0
@wait_for_press = true
elsif @sekunde >= wait_time
@animation = 0
@sekunde = 0
@press = false
@wait_for_press = false
return_to_normal
end
else
@press = false
end
end
def set_variables_standart
@animation = 0
@sekunde = 0
@press = false
@wait_for_press = false
end
def return_to_normal
set_variables_standart
@sticks[@lockpick_index - 1].y = @normal_stick_y
@lockpick.y = @normal_stick_y + @sticks[0].height + 5
end
def stick_is_at_top
return true if @sticks[@lockpick_index - 1].y == @normal_stick_y - 20
end
def check_chest
for i in @controll
if i == "down"
return false
end
end
return true
end
def update
if $game_party.item_number($data_items[LOCKPICK_ID]) < 1
@lockpick.visible = false
end
if Input.trigger?(Input::A)
Audio.se_play("Audio/SE/"+SOUND_INFOSWITCH, 100, 150)
@info.visible = !@info.visible
@help.visible = !@help.visible
end
if @info.visible == true
@info.contents.clear
@info.contents.draw_text(0,0,512,24,LOCKPICK_NAME,0)
@info.contents.draw_text(0,0,512,24,$game_party.item_number($data_items[LOCKPICK_ID]),2)
end
if check_chest
Audio.se_play("Audio/SE/"+SOUND_OPEN, 100, 150)
$game_map.events[@event_id].open=(true)
key = [$game_map.events[@event_id].map_id, @event_id, "A"]
$game_self_switches[key] = true
$scene = Scene_Map.new
dispose_all
end
@sekunde += 1 if @wait_for_press == true
if Input.trigger?(Input::LEFT) && @press == false && $game_party.item_number($data_items[LOCKPICK_ID]) > 0
@lockpick_index -= 1
if @lockpick_index < 1
@lockpick_index = 1
end
update_lockpick
end
if Input.trigger?(Input::RIGHT) && @press == false && $game_party.item_number($data_items[LOCKPICK_ID]) > 0
@lockpick_index += 1
if @lockpick_index > 5
@lockpick_index = 5
end
update_lockpick
end
if Input.trigger?(Input::UP) && @press == false && $game_party.item_number($data_items[LOCKPICK_ID]) > 0
@press = true
Audio.se_play("Audio/SE/"+SOUND_STICK, 100, 100) if @switches[@lockpick_index - 1] != "up"
end
start_lockpick_animation if @press == true && $game_party.item_number($data_items[LOCKPICK_ID]) > 0
if Input.trigger?(Input::C) && $game_party.item_number($data_items[LOCKPICK_ID]) > 0
if stick_is_at_top && @wait_for_press == true
set_variables_standart
@switches[@lockpick_index - 1] = "up"
@controll[@lockpick_index - 1] = "up" if @controll[@lockpick_index - 1].include?("down")
else
@sticks[@lockpick_index - 1].y = @normal_stick_y if @switches[@lockpick_index - 1] == "down"
Audio.se_play("Audio/SE/"+SOUND_FAIL, 100, 100) if @switches[@lockpick_index - 1] == "down"
return_to_normal if @switches[@lockpick_index - 1] == "down"
$game_party.lose_item($data_items[LOCKPICK_ID], 1, true) if LOCKPICK_BREAKABLE == true
end
@animation = 0
@press = false
@wait_for_press = false
end
if Input.trigger?(Input::B)
Sound.play_cancel
dispose_all
return_scene
end
end
def return_scene
$scene = Scene_Map.new
end
end
class Game_Event
attr_accessor :open
attr_reader :map_id
alias initialize_lockpick initialize
def initialize(map_id, event)
initialize_lockpick(map_id, event)
@open = false if $game_self_switches[[map_id, event.id, "A"]] == false
end
alias refresh_lockpick refresh
def refresh
refresh_lockpick
if @open == true
key = [@map_id, @event.id, "A"]
$game_self_switches[key] = true
end
end
end
class Game_Interpreter
alias execute_command_lockpick execute_command
def execute_command (*args)
if @index < @list.size-1 && @list[@index].code == 108 && @list[@index].parameters[0].include?(SP_WORD)
sticks = @list[@index + 1].parameters[0].split
$scene = Scene_Lockpick.new (sticks, @event_id)
@index += 1
return false
end
return execute_command_lockpick (*args)
end
end
Screeny:
Spoiler:
Demo:
Dodatkowe informacje:
Demo nie jest moje...
Żeby demo działało trzeba skopiować z folderu z demem w Pictures 4 grafiki czyli:
LockBack LockStick LockFor Lockpik
Dodać do folderu Pictures.
________________________ Jeśli pomogłem, daj
Spoiler:
POMÓGŁ
Uwielbiam się bawić na zdarzeniach w VX-ie... Więc jeśli masz jakieś pytanie jak coś zrobić na zdarzeniach to napisz. Jeśli będę wiedział to odpowiem
Fajny skrypcik, ale... no właśnie zawsze jest to jedno "ale"-mianowicie spodziewałem się czegoś chociaż troszeczkę bardziej skomplikowanego, a przejście całego dema tym czasem jest niewiele trudniejsze od przejścia gry "Alf" z twierdzy...
Ogólnie fajny pomysł tylko z wykonaniem mogli się bardziej przyłożyć iż aktualnie nie zmienia to nic oprócz wciśnięcia parę razy więcej spacji tzw 0 trudności itp choć może coś jest w konfiguracji gdyż prawdę mówiąc jeszcze nie badałem go "od środka" dlatego do krytyki nie będę się przykładał^^
Mimo to zaznaczam "przydatny" gdyż urozmaiceń wg mnie nigdy za wiele
Pomógł: 15 razy Dołączył: 20 Kwi 2012 Posty: 186 Skąd: się biorą dzieci?
Wysłany: Nie 20 Maj, 2012 10:28
Nie żeby coś ale w szukaniu w skryptach VX NIE MA twojego tematu, jest tylko jeden ten post napisany wyżej... Ale temat do zamknięcia ponieważ znalazłem podobny temat tylko że od użytkownika "darkengrand" Twojego nie znalazłem...
________________________ Jeśli pomogłem, daj
Spoiler:
POMÓGŁ
Uwielbiam się bawić na zdarzeniach w VX-ie... Więc jeśli masz jakieś pytanie jak coś zrobić na zdarzeniach to napisz. Jeśli będę wiedział to odpowiem
Nie żeby coś ale w szukaniu w skryptach VX NIE MA twojego tematu, jest tylko jeden ten post napisany wyżej... Ale temat do zamknięcia ponieważ znalazłem podobny temat tylko że od użytkownika "darkengrand" Twojego nie znalazłem...
A mógłbyś podać link? Bo mi się wydaje, że takiego skryptu jeszcze nie było ;)
@Topic
Skrypt bardzo użyteczny, no ale zawsze można zrobić trochę trudniejszy. Przetestuję go dokładniej to się przekonam co można dzięki nie mu zrobić ^^
Czy tamten link to ty wrzuciłeś bo twój opis skryptu który ponoć zamieściłeś się zgadza z tym od Darkengranda...
A jeżeli tak to czy czytałeś regulamin?
________________________ Jeśli pomogłem, daj
Spoiler:
POMÓGŁ
Uwielbiam się bawić na zdarzeniach w VX-ie... Więc jeśli masz jakieś pytanie jak coś zrobić na zdarzeniach to napisz. Jeśli będę wiedział to odpowiem
Ostatnio zmieniony przez Nhadala Wto 10 Lip, 2012 21:48, w całości zmieniany 1 raz
Skrypt miodzio, tylko mam problem. Nie potrafię stworzyć ów "zdarzenia" (nie wiedziałem jak to powiedzieć), blokuje się na tworzeniu skrzyni i dodaniu skryptu do bazy danych -.-
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Możesz ściągać załączniki na tym forum