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."
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