Opis:
Skrypt pozwala na łatwe dodawanie aczików, np. za zabicie stu królików, czy pokonanie jakiegoś bossa. Wszystko opiera się na grafikach, więc jest naprawdę dużo możliwości spersonalizowania go.
Możliwości wersji 1.1
Spoiler:
> Achievementy aktywowane switchami
> Pasek aczika pojawia się po aktywacji switcha
> Podział aczików na Wszystkie, Odblokowane, Zablokowane
> Opisy
> Opisy mogą mieć tło
> Każdy aczik ma obrazek 90x90
> Tło menu
> Obrazki zablokowanych aczików (90x90)
> Kursor menu aczików jako obrazek (90x90)
> Pasek informujący
> Grafiki aczików kompletnych i niekompletnych w menu opisu
WAŻNE!!!
Jeśli chcemy wywołać menu w którym będą acziki, wywołujemy skrypt:
Kod:
$scene = Achievements.new
Info:
Wersja - v1.1
Autor - Omegas7
Tłumaczenie - Angius
Grafiki:
Za długo by wrzucać, więc daję link do paczki na Mediafire
Screen Shoty:
Spoiler:
Skrypt:
Spoiler:
Kod:
# =============================================================================
# Game Achievements
# Version: 1.1
# Author: Omegas7
# Site: http://omegas7.blogspot.com || http://omegadev.biz
# -----------------------------------------------------------------------------
# Features:
# > 1.1
# > Achievementy aktywowane switchami
# > Pasek aczika pojawia się po aktywacji switcha
# > Podział aczików na Wszystkie, Odblokowane, Zablokowane
# > Opisy
# > Opisy mogą mieć tło
# > Każdy aczik ma obrazek 90x90
# > Tło menu
# > Obrazki zablokowanych aczików (90x90)
# > Kursor menu aczików jako obrazek (90x90)
# > Pasek informujący
# > Grafiki aczików kompletnych i niekompletnych w menu opisu
# -----------------------------------------------------------------------------
# Instrukcje:
# Podstawowy szablon aczika:
#
# Achievements[ID] = ["Nazwa","Obrazek",ID Switcha]
# Descriptions[ID] = ["1 wers","2 wers","3 wers"]
#
# ID = ID aczika w skrypcie. Każdy aczik ma jeden, unikalny począwszy od 0.
# "Nazwa" => Nazwa wyświetlana aczika. Podana w cudzysłowie " "
# "Obrazek" => 90x90 nazwa grafiki w folderze [Pictures]. Podana w cudzysłowie " "
# ID Switcha => ID switcha który ma aktywować danego aczika.
# Możesz dodać tyle linii opisu ile ci się żywnie podoba.
# Każda linia w cudzysłowiu " ", i każda oddzielona przecinkiem.
# =============================================================================
# KONFIGURACJA
# =============================================================================
module AchievementsDATA
MenuBackground = "AchievementBG" # [Pictures] folder
LockedTrohyGraphic = "LockedTrophy" # [Pictures] folder 90x90
TrophyCursorGraphic = "TrophyCursor" # [Pictures] folder 90x90
DescriptionScreenGraphic = "DescriptionScreen" # [Pictures] folder
AchievementBarGraphic = "AchievementBar" # [Pictures] folder
AchievementIsCompleteGraphic = "AchievementCompleted" # [Pictures] folder
AchievementIsIncompleteGraphic = "AchievementIncomplete" # [Pictures] folder
# Te grafiki to obrazki kompletnego i niekompletnego aczika.
Achievements[0] = ["Greedy Ralph","Trophy",1]
Descriptions[0] = ["Open 5 chests!","Commonly known as a noob-level achievement."]
Achievements[1] = ["Defeat Gary","Trophy",2]
Descriptions[1] = ["Beat evil Gary at the garden!"]
Achievements[2] = ["LOVE OMEGAS7","Trophy",3]
Descriptions[2] = ["Show your love for Omegas7 to a stranger."]
# ==============================================================================
# NIE TYKAĆ! (chyba, że wiesz, co robisz)
# ==============================================================================
end
class Achievements < Scene_Base
include AchievementsDATA
def initialize
create_background
create_menu
create_trohpies
@view = 'NONE'
@chosen = false
@locked = 0
@unlocked = 0
for i in 0...Achievements.size
if $game_switches[Achievements[i][2]]
@unlocked += 1
else
@locked += 1
end
end
end
def update
updateInput
updateMenus if !@chosen
@chosen = false
end
def updateMenus
case @view
when 'NONE'
@menu.update
when 'TROPHIES'
@trophyMenu.update
end
end
def updateInput
if Input.trigger?(Input::C) && @view == 'NONE'
case @menu.index
when 0 # All
@view = 'TROPHIES'
@trophyMenu.setView('all')
@trophyMenu.setOpacity(255)
Sound.play_decision
@chosen = true
return
when 1 # Unlocked
if @unlocked <= 0
Sound.play_buzzer
return
end
@view = 'TROPHIES'
@trophyMenu.setView('unlocked')
@trophyMenu.setOpacity(255)
Sound.play_decision
@chosen = true
return
when 2 # Locked
if @locked <= 0
Sound.play_buzzer
return
end
@view = 'TROPHIES'
@trophyMenu.setView('locked')
@trophyMenu.setOpacity(255)
Sound.play_decision
@chosen = true
return
when 3 # Exit
@trophyMenu.finish
@bg.dispose
@menu.dispose
$scene = Scene_Map.new
@chosen = true
return
end
end
if Input.trigger?(Input::B) && @view == 'NONE'
@trophyMenu.finish
@bg.dispose
@menu.dispose
$scene = Scene_Map.new
@chosen = true
return
end
if Input.trigger?(Input::B) && @view == 'TROPHIES' && !@trophyMenu.description?
@view = 'NONE'
@trophyMenu.setOpacity(0)
Sound.play_cancel
end
end
def create_background
@bg = Sprite_Base.new
@bg.bitmap = Cache.picture(MenuBackground)
@bg.z = 0
end
def create_menu
commands = ['All','Unlocked','Locked','Back']
@menu = Window_Command.new(130,commands)
@menu.contents.font.size = 20
@menu.refresh
@menu.opacity = 0
@menu.z = 9
end
def create_trohpies
@trophyMenu = AchievementTrophyMenuManager.new
@trophyMenu.setOpacity(0)
end
end
class AchievementTrophyMenuManager
include AchievementsDATA
def initialize
@trophies = []
draw_trophies('all')
@moved_y = 0
if !@trophies.empty?
@cursor = Sprite_Base.new
@cursor.bitmap = Cache.picture(TrophyCursorGraphic)
@cursor.z = 2
@cursor.x,@cursor.y = @trophies[0].sprite.x,@trophies[0].sprite.y
end
@cursorIndex = 0
@toBeY = 0
@viewingDescription = false
@description = Sprite_Base.new
@description.bitmap = Cache.picture(DescriptionScreenGraphic)
@description.z = 100
@description.opacity = 0
@descriptionWindow = Window_Base.new(30,90,544 - 60,270)
@descriptionWindow.opacity = 0
@name = Window_Base.new(12,-12,300,90)
@name.contents.font.size = 18
@name.opacity = 0
@block = false
end
def draw_trophies(view)
@trophies = []
@chart = []
trueIndex = 0
for i in 0...Achievements.size
if $game_switches[Achievements[i][2]]
if view == 'all' || view == 'unlocked'
@trophies.push(AchievementTrophy.new(trueIndex,true,Achievements[i][0]))
@chart.push(Descriptions[i])
trueIndex += 1
end
else
if view == 'all' || view == 'locked'
@trophies.push(AchievementTrophy.new(trueIndex,false,Achievements[i][0]))
@chart.push(Descriptions[i])
trueIndex += 1
end
end
end
end
def update
if !@viewingDescription
if Input.trigger?(Input::DOWN)
Sound.play_cursor
@cursorIndex += 4
end
if Input.trigger?(Input::UP)
Sound.play_cursor
@cursorIndex -= 4
end
if Input.trigger?(Input::RIGHT)
Sound.play_cursor
@cursorIndex += 1
end
if Input.trigger?(Input::LEFT)
Sound.play_cursor
@cursorIndex -= 1
end
checkCursorPosition
if Input.trigger?(Input::C)
@descriptionWindow.contents.clear
@name.contents.clear
@description.opacity = 255
for i in 0...@chart[@cursorIndex].size
@descriptionWindow.contents.draw_text(0,(20 * i),500,20,@chart[@cursorIndex][i].to_s)
end
@viewingDescription = true
@block = true
@name.contents.draw_text(0,0,300,20,@trophies[@cursorIndex].name)
@completed = Sprite_Base.new
if @trophies[@cursorIndex].obtained
@completed.bitmap = Cache.picture(AchievementIsCompleteGraphic)
else
@completed.bitmap = Cache.picture(AchievementIsIncompleteGraphic)
end
@completed.x = 544 - @completed.width
@completed.y = 416 - @completed.height
@completed.z = 300
return
end
else
if (Input.trigger?(Input::C) || Input.trigger?(Input::B)) && !@block
Sound.play_cancel
@descriptionWindow.contents.clear
@name.contents.clear
@description.opacity = 0
@viewingDescription = false
@completed.dispose
@completed = nil
return
end
end
@block = false
if Input.trigger?(Input::L)
print @description.opacity
end
end
def description?
return @viewingDescription
end
def checkCursorPosition
if @cursorIndex < 0
@cursorIndex = 0
end
if @cursorIndex > @trophies.size - 1
@cursorIndex = @trophies.size - 1
end
@toBeY = @trophies[@cursorIndex].sprite.y
a = false
while @toBeY >= 10 + (90 * 4)
moveY(-90)
a = true
end
if !a
while @toBeY < 10
moveY(90)
end
end
@cursor.x = @trophies[@cursorIndex].sprite.x
@cursor.y = @trophies[@cursorIndex].sprite.y
end
def moveY(y)
for i in 0...@trophies.size
@trophies[i].sprite.y += y
@toBeY += y
end
end
def setOpacity(n)
for i in 0...@trophies.size
@trophies[i].sprite.opacity = n
end
@cursor.opacity = n
end
def setView(view)
for i in 0...@trophies.size
@trophies[i].sprite.dispose
@trophies[i] = nil
end
@cursorIndex = 0
@trophies.compact!
@chart = []
draw_trophies(view)
end
def finish
@cursor.dispose
for i in 0...@trophies.size
@trophies[i].sprite.dispose
@trophies[i] = nil
end
@trophies.compact!
@description.dispose
@descriptionWindow.dispose
@name.dispose
end
end
class AchievementTrophy
include AchievementsDATA
attr_accessor :sprite
attr_reader :obtained
attr_reader :name
def initialize(index,obtained,name)
@sprite = Sprite_Base.new
if obtained
@sprite.bitmap = Cache.picture(Achievements[index][1])
else
@sprite.bitmap = Cache.picture(LockedTrohyGraphic)
end
@sprite.z = 1
@sprite.x = 180 + (90 * (index % 4))
@sprite.y = 10 + (90 * (index / 4))
@obtained = obtained
@name = name
end
end
class Game_Party
alias omega_achievements_initialize initialize
attr_accessor :achievements
def initialize
omega_achievements_initialize
@achievements = []
for i in 0...AchievementsDATA::Achievements.size
@achievements.push([AchievementsDATA::Achievements[i][2],
$game_switches[AchievementsDATA::Achievements[i][2]]])
end
end
end
class AchievementBar
include AchievementsDATA
attr_reader :finished
def initialize(id)
@sprite = Sprite_Base.new
@sprite.bitmap = Cache.picture(AchievementBarGraphic)
@sprite.z = 300
@sprite.x = 272 - (@sprite.width/2)
@sprite.y = 416 - @sprite.height
@sprite.zoom_x = 0.1
@sprite.zoom_y = 0.1
@timer = -1
@leaving = false
@finished = false
end
def update
if @sprite.zoom_x < 1.0
@sprite.zoom_x += 0.05
@sprite.zoom_y += 0.05
if @sprite.zoom_x >= 1.0
@timer = 140
end
end
if @timer > 0
@timer -= 1
else
if !@leaving && @sprite.zoom_x >= 1.0
@leaving = true
end
end
if @leaving
@sprite.opacity -= 3
if (@sprite.opacity <= 0) && (!@finished)
finish
end
end
end
def finish
@sprite.dispose
@finished = true
end
end
class Scene_Map
alias omegaAchievementInitialize initialize
alias omegaAchievementUpdate update
alias omegaAachievementTerminate terminate
def initialize
omegaAchievementInitialize
@achievements = []
end
def update
omegaAchievementUpdate
for i in 0...@achievements.size
@achievements[i].update
if @achievements[i].finished
@achievements[i] = nil
end
end
@achievements.compact!
end
def terminate
omegaAachievementTerminate
for i in 0...@achievements.size
@achievements[i].finish
end
end
def addAchievementBar(id)
@achievements.push(AchievementBar.new(id))
end
end
class Game_Interpreter
alias omegaAchievementsSwitch command_121
def command_121
omegaAchievementsSwitch
if $scene.is_a?(Scene_Map)
for i in 0...$game_party.achievements.size
if $game_party.achievements[i][1] != $game_switches[$game_party.achievements[i][0]]
if $game_switches[$game_party.achievements[i][0].to_i]
$game_party.achievements[i][1] = $game_switches[$game_party.achievements[i][0]]
$scene.addAchievementBar(i)
break
end
end
end
end
end
end
Achievementy, osiągnięcia. W większości gier flashowych w necie są takowe, przyznawane za przejście pierwszego poziomu, za pokonanie bossa jak już wspomniałem, etc. Nie dają tu żadnego bonusa, ale urozmaicają grę i wciągają na dłużej - jak choćby zbieranie zwojów, ksiąg i pudełek w Sacredzie...
Zapomniałbym!
WAŻNE!!!
Jeśli chcemy wywołać menu w którym będą acziki, wywołujemy skrypt:
Kod:
$scene = Achievements.new
Prosiłbym o aktualizację pierwszego posta...[/code]
________________________
"Na trolla pewne są tylko dwie pewne metody, jedna samopowtarzalna i druga, wymagająca przeładowania ręcznego."
Pomogła: 232 razy Dołączyła: 18 Wrz 2007 Posty: 2424
Wysłany: Czw 21 Kwi, 2011 12:08
Skrypty na ogół nie są "noob-friendly", dlatego proponowałabym wpierw zapoznać się z samouczkiem http://www.ultimateam.pl/viewtopic.php?t=1896 a następnie dokładnie przeczytać instrukcję do skryptu (zazwyczaj zawarta jest w nagłówku).
Są problemy z działaniem gdy mamy "Minimapę obrazkową" (konkretniej drugi skrypt niezbędny do jej działania). Po wduszeniu "Nowej gry" wyskakuje jakiś error.
________________________ Obecny projekt - Chwilowo brak
Dziwne, mnie errora nie wywala po uruchomieniu, a mam oba te skrypty...
Umieściłem Omegę na samym dole listy skryptów i działa. Wcześniej miałem ją wyżej i wywalało error przy próbie wywołania menu aczików. Spróbuj przenieść, a jak nie pomoże, to jakiś rubysta coś zaradzi
Edit: tak mam rozplanowany skrypty
Spoiler:
________________________
"Na trolla pewne są tylko dwie pewne metody, jedna samopowtarzalna i druga, wymagająca przeładowania ręcznego."
Pomogła: 13 razy Dołączyła: 15 Lut 2011 Posty: 73 Skąd: Kraków
Wysłany: Czw 26 Maj, 2011 17:53
Znalazłam takie coś:
KLIK
i mnie zastanawia, czy mogę tego użyć ot tak? Bo w opisie było, że mają 90x90, ale czy muszę mieć dokładny wymiar kwadracika, wszystkie proporcje? Utnie mi kawałek obrazka lub go rozciągnie?
Na pewno musisz je pociąć na osobne kwadraty. I powinno działać, tak myślę. A jak nie, to utwórz w paint'cie obraz 90x90, pośrodku wklej fragment tej grafiki i zaimportuj. Albo wywal tło w GIMP-ie
________________________
"Na trolla pewne są tylko dwie pewne metody, jedna samopowtarzalna i druga, wymagająca przeładowania ręcznego."
F7 bodaj nie, ale możesz każdym innym. Zainstaluj skrypt na rozszerzoną klawiaturę i ustaw typowe zdarzenie wywołujące ten skrypt po wciśnięciu jakiejśtam litery.
Albo poproś kogoś o dopisanie kilku linijek kodu
________________________
"Na trolla pewne są tylko dwie pewne metody, jedna samopowtarzalna i druga, wymagająca przeładowania ręcznego."
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