Skill Shop - Deuce - 07-09-14 14:45
~ Easy Skill Shop ~
Krótki opis:
Skrypt pozwala na kupno umiejętności za złoto
Autor:
imapro
Tłumaczenie:
Deuce
Skrypt:
Kod:
#==============================================================================
# ** Easy Skill Shop
#==============================================================================
# Author: imapro
# Version: 1.0
# Build Date: 11.26.10
#==============================================================================
#
#==============================================================================
=begin
=============================
* Info:
=============================
i made this cuase i was bored in my basement lol.
==============================
* How to Use:
==============================
call "$skill_shop =[i]" i = ID of skill...you must call the code for it to work!.
You will also need to call "$scene = Scene_Skill_Shop.new" to open up the Skill shop main window.
===============================
* Example:
===============================
$skill_shop = [1,2,3,6,7]
$scene = Scene_Skill_Shop.new
To set the text that appears in the Skill shop main windows Find "# Skill Shop Config
You can set Skill Price under "# Price Data".
You can allow skills to be learnt by individual heros by finding "# Skill data".
This is the layout:
[ID of skill, Level requirement for learn]
==============================
* Special Thanks & Credits:
==============================
Sephirothspawn: For all the coding help and the Skill Shop script which inspired me
to make my own.
=end
#===================================================
# ^ Module SkillShop_Config Begins
#===================================================
module Skill_Shop
# Skill Shop Config
#Edit here
Shop_Message = "Witam, w czym moge pomóc?"
How_Learn = "Czego chcesz się nauczyć?" #Text shown above Characters in shop window
Can_Learn = "Naucz!" #Text shown when a hearo can learn the skill
Can_Learn_Lv = "Learn on Lv" #text shown when a hero CAN learn the skill
Cant_Learn = "Nie mozna się nauczyć" #Text shown if a hero is unable to learn that perticular skill
Learnt = "Nauczony!" #text shown when a hero has learnt a skill
Teach = "Lista Nauk!" #Command (Buy in normal shops)
Cancel = "Wyjdź" #Command (Cancel in normal shops)
# Tutaj dodaj ceny
PRICE = {
0 => 80, #Domyślna cena umiejętności bez zestawu cen
1 => 129, #Cena dla Skill ID 1
2 => 300,
3 => 450,
}
# Skill Data
# add the skills that each individual hero can learn.
#Layout is mentioned above.
SKILL_BUY = {
1 => [
[1,4],[2,3],[3,1],[7,1],
],
2 => [
[1,4],[2,3],[3,1],[7,5],
],
3 => [
[1,4],[2,3],[3,1],[7,5],
],
}
# Add Price
def self.skill_price(id)
if PRICE.include?(id)
return PRICE[id]
else
return PRICE[0]
end
end
# Add Hero id
def self.skill_buy(id)
if SKILL_BUY.include?(id)
return SKILL_BUY[id]
else
return []
end
end
end
#==============================================================================
# ** Class Game_Actor
#------------------------------------------------------------------------------
# This class handles the actor array. Refer to "$game_actors" for each
# instance of this class.
#==============================================================================
class Game_Actor < Game_Battler
def learn?(skill)
learn = skill_learn?(skill.id)
if learn
return false
else
return true
end
end
end
#==============================================================================
#class Window_Skill_ShopCommand
#==============================================================================
class Window_Skill_ShopCommand < Window_Selectable
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(0, 64, 480, 64)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = "Tahoma"
self.contents.font.size = 21
@item_max = 2
@column_max = 2
#Commands Setup... if you wish to add more commands edit here.
s1 = Skill_Shop::Teach
s2 = Skill_Shop::Cancel
@commands = [s1, s2]
refresh
self.index = 0
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
for i in 0...@item_max
draw_item(i)
end
end
#--------------------------------------------------------------------------
def draw_item(index)
x = 4 + index * 240
self.contents.draw_text(x, 0, 128, 32, @commands[index])
end
end
#==============================================================================
#class Window_Skill_ShopBuy
#==============================================================================
class Window_Skill_ShopBuy < Window_Selectable
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize(shop_goods)
super(0, 128, 368, 352)
@skill_shop_goods = $skill_shop
refresh
self.index = 0
end
#--------------------------------------------------------------------------
def skill
return @data[self.index]
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@data = []
for i in 0...@skill_shop_goods.size
skill = $data_skills[@skill_shop_goods[i]]
if skill != nil
@data.push(skill)
end
end
# If the number of items is not 0, it draws up bit map, drawing all item
@item_max = @data.size
if @item_max > 0
self.contents = Bitmap.new(width - 32, row_max * 32)
self.contents.font.name = "Tahoma"
self.contents.font.size = 21
for i in 0...@item_max
draw_item(i)
end
end
end
#--------------------------------------------------------------------------
def draw_item(index)
skill = @data[index]
# Acquiring the frequency of possession of the item
price = Skill_Shop.skill_price(skill.id)
enabled = (price <= $game_party.gold)
# If price is not below the money in hand, at the same time the frequency of possession 99, usually in letter color
# So if is not, it sets to invalid letter color
if enabled
self.contents.font.color = normal_color
else
self.contents.font.color = disabled_color
end
x = 4
y = index * 32
rect = Rect.new(x, y, self.width - 32, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
bitmap = RPG::Cache.icon(skill.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(x + 28, y, 212, 32, skill.name, 0)
self.contents.draw_text(x + 240, y, 88, 32, price.to_s, 2)
end
#--------------------------------------------------------------------------
def update_help
@help_window.set_text(skill == nil ? "" : skill.description)
end
end
#==============================================================================
#class Window_Skill_ShopStatus
#==============================================================================
class Window_Skill_ShopStatus < Window_Selectable
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(368, 128, 272, 352)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = "Tahoma"
self.contents.font.size = 21
@item = nil
refresh
self.active = false
self.index = -1
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
@item_max = $game_party.actors.size
if @item == nil
return
end
self.contents.font.color = system_color
self.contents.draw_text(4, 0, self.width - 32, 32, Skill_Shop::How_Learn)
self.contents.font.color = normal_color
# Equipment supplementary information
for i in 0...$game_party.actors.size
# Acquiring the actor
can = false
lv = false
ac_lv = 0
actor = $game_party.actors[i]
can_learn = Skill_Shop.skill_buy(actor.id)
id = @item.id
for e in 0...can_learn.size
if can_learn[e][0] == id
can = true
if can_learn[e][1] <= actor.level
lv = true
else
lv = false
ac_lv = can_learn[e][1]
end
break
else
can = false
end
end
enabled = (can and lv and actor.learn?(@item))
# If equipment possibility if usually in letter color, the impossibility, it sets to invalid letter color
if enabled
self.contents.font.color = normal_color
else
self.contents.font.color = disabled_color
end
#Draw Character Pic
bitmap = RPG::Cache.character(actor.character_name, actor.character_hue)
cw = bitmap.rect.width / 4
ch = bitmap.rect.height / 4
src_rect = Rect.new(0, 0, cw, ch)
cx = contents.text_size(actor.name).width
self.contents.blt(cx, 64 + 64 * i, bitmap, src_rect)
# Drawing the name of the actor
self.contents.draw_text(4, 64 + 64 * i, 120, 32, actor.name)
# Check Skill
if can == false
text = Skill_Shop::Cant_Learn
elsif can == true and lv == false
ac = ac_lv.to_s
text = Skill_Shop::Can_Learn_Lv + " " + ac + "+"
elsif actor.learn?(@item) == false
text = Skill_Shop::Learnt
else
text = Skill_Shop::Can_Learn
end
# Drawing the item
self.contents.draw_text(124, 64 + 64 * i, 112, 32, text, 2)
end
end
#--------------------------------------------------------------------------
def item=(item)
if @item != item
@item = item
refresh
end
end
#--------------------------------------------------------------------------
def update_cursor_rect
# Cursor position as for -1 all selection, -2 below independence selection (user himself)
if @index < 0
self.cursor_rect.empty
else
self.cursor_rect.set(0, 62 + @index * 64, self.width - 32, 50)
end
end
end
#==============================================================================
#class Scene_Skill_Shop
#==============================================================================
#
#
#-----I advise you not to touch anything past here unless you know what you are doing.-------
#
#
class Scene_Skill_Shop
#--------------------------------------------------------------------------
def main
# Drawing up the help window
@help_window = Window_Help.new
# Drawing up the command window
@command_window = Window_Skill_ShopCommand.new
# Drawing up the Goldwyn dough
@gold_window = Window_Gold.new
@gold_window.x = 480
@gold_window.y = 64
# Drawing up the dummy window
@dummy_window = Window_Base.new(0, 128, 640, 352)
# Drawing up the purchase window
@buy_window = Window_Skill_ShopBuy.new($game_temp.shop_goods)
@buy_window.active = false
@buy_window.visible = false
@buy_window.help_window = @help_window
# Drawing up the status window
@status_window = Window_Skill_ShopStatus.new
@status_window.visible = false
@status_window.active
# Transition execution
Graphics.transition
# Main loop
loop do
# Renewing the game picture
Graphics.update
# Updating the information of input
Input.update
# Frame renewal
update
# When the picture changes, discontinuing the loop
if $scene != self
break
end
end
# Transition preparation
Graphics.freeze
# Releasing the window
@help_window.dispose
@command_window.dispose
@gold_window.dispose
@dummy_window.dispose
@buy_window.dispose
@status_window.dispose
end
#--------------------------------------------------------------------------
def update
# Renewing the window
@help_window.update
@command_window.update
@gold_window.update
@dummy_window.update
@buy_window.update
@status_window.update
# When the command window is active,: Update_command is called
if @command_window.active
update_command
return
end
# When the purchase window is active,: Update_buy is called
if @buy_window.active
update_buy
return
end
# When the target window is active,: Update_target is called
if @status_window.active
update_target
return
end
end
#--------------------------------------------------------------------------
def update_command
# The B when button is pushed
if Input.trigger?(Input::B)
# Performing cancellation SE
$game_system.se_play($data_system.cancel_se)
# Change to map picture
$scene = Scene_Map.new
return
end
# When C button is pushed
if Input.trigger?(Input::C)
# Eliminating the help text
@help_window.set_text("")
# It diverges at cursor position of the command window
case @command_window.index
when 0 # It purchases
# Performing decision SE
$game_system.se_play($data_system.decision_se)
# State of window to purchase mode
@command_window.active = false
@dummy_window.visible = false
@buy_window.active = true
@buy_window.visible = true
@buy_window.refresh
@status_window.visible = true
when 1 # It stops
# Performing decision SE
$game_system.se_play($data_system.decision_se)
# Change to map picture
$scene = Scene_Map.new
end
return
end
end
#--------------------------------------------------------------------------
def update_buy
# Setting the item of the status window
@status_window.item = @buy_window.skill
# The B when button is pushed
if Input.trigger?(Input::B)
# Performing cancellation SE
$game_system.se_play($data_system.cancel_se)
# State of window to early mode
@command_window.active = true
@dummy_window.visible = true
@buy_window.active = false
@buy_window.visible = false
@status_window.visible = false
@status_window.item = nil
# Eliminating the help text
@help_window.set_text("")
return
end
# When C button is pushed
if Input.trigger?(Input::C)
# Acquiring the item
@item = @buy_window.skill
@price = Skill_Shop.skill_price(@item.id)
enabled = (@price <= $game_party.gold)
# When the item is invalid, or when price it is on from the money in hand
unless enabled
# Performing buzzer SE
$game_system.se_play($data_system.buzzer_se)
return
end
# Performing decision SE
$game_system.se_play($data_system.decision_se)
@buy_window.active = false
@status_window.active = true
@status_window.index = 0
end
end
#--------------------------------------------------------------------------
def update_target
# The B when button is pushed
if Input.trigger?(Input::B)
# Performing cancellation SE
$game_system.se_play($data_system.cancel_se)
# Eliminating the target window
@buy_window.active = true
@status_window.index =- 1
@status_window.active = false
return
end
# When C button is pushed
if Input.trigger?(Input::C)
@actor = $game_party.actors[@status_window.index]
can = false
lv = false
can_learn = Skill_Shop.skill_buy(@actor.id)
id = @item.id
for i in 0...can_learn.size
if can_learn[i][0] == id
can = true
if can_learn[i][1] <= @actor.level
lv = true
else
lv = false
end
break
else
can = false
end
end
enabled = (can and lv and @actor.learn?(@item))
# When with SP and so on is cut off and it becomes not be able to use
unless enabled
# Performing buzzer SE
$game_system.se_play($data_system.buzzer_se)
return
end
# Performing shop SE
$game_system.se_play($data_system.shop_se)
@actor.learn_skill(@item.id)
$game_party.lose_gold(@price)
@buy_window.refresh
@gold_window.refresh
@status_window.refresh
@buy_window.active = true
@status_window.index =- 1
@status_window.active = false
end
end
end
Screeny:
Dodatkowe informacje:
Aby wywołać sklep w zakładce script wpisz:
Kod:
$scene = Scene_Skill_Shop.new
$skill_shop = [1]
1 oznacza ID sklepu, sklepy definiujemy od linijki 68 poniżej przykład sklepu:
1 => [
[1,4],[2,3],[3,1],[7,1],
],
1 - Oznacza ID skilla, 4 - Oznacza Lewel wymagany do nauczenia się umiejętności
RE: Skill Shop - Adrapnikram - 13-09-14 16:14
Czy ja wiem czy to komu do czego trzebne...
Można zrobić księgi, a gdy się je "przeczyta" dostaje się umiejętność.
Tak jest bardziej logicznie.
Fajny by był efekt jakby nie wyglądało to (sklep) jak podstawowy z XP.
Według mnie mało przydatne.
RE: Skill Shop - Deuce - 13-09-14 16:19
Wiesz robiąc na tym skrypcie oszczędzasz czas a i ma możliwość nauki danej umiejętności od lewela, na zdarzeniach zajmuje to o wiele więcej czasu jak i miejsca, sam zrobiłem porównanie.
Ten skrypt jest logiczny to jest sklep z zaklęciami nie wiem gdzie tu jest coś nie logicznego?
RE: Skill Shop - Adrapnikram - 13-09-14 20:44
W takim razie pójdę jutro do sklepu i dam kasjerce 50 zł i natychmiastowo nauczę się grać na gitarze.
RE: Skill Shop - Deuce - 13-09-14 20:50
Więc idź do sklepu i naucz się grać na gitarze.
Skrypt jest prosty i naprawdę nie rozumiem co w tym trudnego żeby załapać że można kupić umiejętność.
RE: Skill Shop - Dr Man - 13-09-14 22:21
W Tibii też się kupuję u NPC Czasu pokroju "Exura" "Utamo Vita" xD
Może i nie logiczne, ale przecież to gra, nie musi być realistyczna.
Jak by była logiczna i bardzo realistyczna to odbiło by się na grywalności, czyli nie było by rzucania czarami np. kulą ognia, ponieważ to nie jest realistyczne a tym bardziej logiczne, moc nieznanego pochodzenia którą doładowujemy sokiem z gumijagód, dodatkowo dzięki takiej mocy możemy strzelać płomieniami. Wat? I z tego wniosek, im bardziej gra realistyczna tym więcej traci na grywalności.
RE: Skill Shop - Adrapnikram - 13-09-14 22:49
Ja się niczego nie czepiam nawet realistyczności skryptu, tylko mówię że przykład z książką był bardziej logiczny, choć nadal nie realistyczny, bo nie można otworzyć książki i w sekundę się czegoś nauczyć XD.
Takie zakupy były możliwe w FF i się nie czepiam. Po prostu powiedziałem że jest mniej logicznie, to wszystko.
Skoro ma możliwość kupna od lv to plus. Jest powód aby tego użyć. Czy obsługuje również klasy itd.?
RE: Skill Shop - Deuce - 13-09-14 23:27
To wcale nie są książki, przedstaw to sobie w ten sposób:
Magia to odpowiednie skupienie i wykorzystanie many a zaklęcie to technika wykorzystania magii, jeżeli raz pokażę ci jak machać mieczem to będziesz pamiętał to do końca życia.
Czyli wyobraź sobie że NPC u którego wywołujesz skrypt to trener magicznych technik, wymagany Lewel to taki poziom trudności przyswojenia techniki.
Co do klas to sam skrypt tego nie posiada, ale można to łatwo zrobić w ten sposób:
Kod:
-Tworzymy NPC i warunki do poszczególnych klas np.
#W skrypcie definiujemy sklep np. dla wojownika, ustawiamy w nim skille leczenie, szybki atak i coś jeszcze.
Następnie jeżeli zdefiniowany sklep będzie zestawem pierwszym to jego wywołanie będzie następujące:
$scene = Scene_Skill_Shop.new
$skill_shop = [1]
#Warunek:Bohater to Wojownik
-Wywołaj skrypt:
$scene = Scene_Skill_Shop.new
$skill_shop = [1]
Tym sposobem jeżeli bohater będzie wojownikiem będzie mógł kupić skille tylko z zestawu 1, który według twoich potrzeb będzie miał umiejętności dla wojownika.
Jeżeli warunków ma być więcej tworzysz nowe zestawy tak jak to pisałem w opisie skryptu i zmieniasz warunki.
Co do samej definicji magii, najlepiej jest przedstawić ją na początku gry, wtedy osoba grająca wie czy magia w twojej grze bierze się sama, uczymy się jej z ksiąg, dostajemy specjalne lekcje technik magicznych czy zesłał ją nam sam Bóg.
Manę tez lepiej określić od razu, często jest to coś czerpane z niesamowitych przedmiotów lub nasza wewnętrzna energia przekształcana na moc, albo zwyczajna siła umysłu która po odpowiedniej koncentracji nabiera wyglądu i siły fizycznej przez co możemy zadawać fizyczne obrażenia.
Inaczej mówiąc logika gry zależy od interpretacji i określenia systemu i świata przez samego twórce.
RE: Skill Shop - takikaki012 - 14-09-14 10:55
A dało by sie zrobić tak, że zamiast płacić złotem płaci się punktami inteligencji
RE: Skill Shop - Deuce - 14-09-14 11:01
Do tego potrzeba przerobienia skryptu.
Ale odradzam płacenie punktami INT, nie jestem pewien czy wiesz ale te punkty są doliczane do ataku przy używaniu skila więc są potrzebne, jak kupisz sobie 5 umiejętności i zostanie 1 INT
to twój magiczny atak mocno spadnie.
|