Code:
## Skillmenu requested by user
## Author: D.T. Linkey
## Date: 03.03.2018
module LDT_SKILL_MENU
#Confirmation texts
CONFIRM_TITLE = " aufwerten?"
CONFIRM_TRUE = "Ja"
CONFIRM_FALSE = "Nein"
#Headline/Title
SKILL_TITLE = "Skillpunkte insg."
#skill names ( array can be used to display different Names per Level)
SKILL_NAMES = ["Skillname1", #skill 1
"Skillname2", #skill 2
["Skillname3 St0","Skillname3 St1","Skillname3 MAX"],#skill 3
"Skillname4"] #skill 4
#skill icon ids ( array can be used to display different Icons per Level)
ICON_IDS = [4, #skill 1
[8,10,11,12], #skill 2
9, #skill 3
26] #skill 4
#skill costs (-1 = skill can't be upgraded anymore)
SKILL_COSTS = [[3,7,11,24,49,-1],
[3,15,33,-1],
[4,60,-1],
[7,23,59,-1]]
#variable for each skill (e.g. 1 = $game_variables[1])
SKILL_VARS = [1,2,3,4]
#variable for each skillcosts (e.g. 1 = $game_variables[1])
COST_VARS = [5,6,7,8]
#variable for total skill points (e.g. 1 = $game_variables[1])
SKILL_TOTAL_POINT_VAR = 9
#Symbol displayed if max Level is reached
MAX_LEVEL_SIGN = "-"
#Graphics
#Start position vertical (0 = top, 480 = botton)
G_START_Y = 0
#start position horizontal (0 = left, 640 = right)
G_START_X = 0
#Width of the first Window
G_WIDTH_1 = 280
#Width of the second Window
G_WIDTH_2 = 240
#Confirmation window alignment (1 = horiz., 2= vert.)
G_CONFIRM_ALIGN = 2
end
class LDT_Skill_Scene < Scene_Base
def start
super
create_title_window
create_skill_window
create_confirmation_windows
create_background
end
def create_title_window()
@title_window = LDT_Skill_Window_Title.new(LDT_SKILL_MENU::G_START_X,LDT_SKILL_MENU::G_START_Y,1,LDT_SKILL_MENU::G_WIDTH_1)
@title_window.set_text(LDT_SKILL_MENU::SKILL_TITLE)
end
def create_skill_window()
ty = LDT_SKILL_MENU::G_START_Y + @title_window.height
th = LDT_SKILL_MENU::SKILL_NAMES.size * 24 + 32
@skill_window = LDT_Skill_Window.new(LDT_SKILL_MENU::G_START_X,ty,LDT_SKILL_MENU::G_WIDTH_1,th)
@skill_window.viewport = @viewport
@skill_window.set_handler(:ok, method(:on_menu_ok))
@skill_window.set_handler(:cancel, method(:return_scene))
@skill_window.activate
@skill_window.select(0)
@skill_window.show
end
def create_background
@background_sprite = Sprite.new
@background_sprite.bitmap = SceneManager.background_bitmap
@background_sprite.color.set(16, 16, 16, 128)
end
def create_confirmation_windows()
if(LDT_SKILL_MENU::G_CONFIRM_ALIGN == 1)
tx = LDT_SKILL_MENU::G_START_X + LDT_SKILL_MENU::G_WIDTH_1
ty = LDT_SKILL_MENU::G_START_Y
else
tx = LDT_SKILL_MENU::G_START_X
ty = LDT_SKILL_MENU::G_START_Y + @title_window.height + @skill_window.height
end
@confirm_title_window = LDT_Confirm_Window_Title.new(tx,ty,1,LDT_SKILL_MENU::G_WIDTH_2)
@confirm_title_window.set_text("")
@confirm_title_window.hide
th = 2 * 24 + 32
ty = ty + @confirm_title_window.height
@confirm_window = LDT_Skill_Window_Confirmation.new(tx,ty,LDT_SKILL_MENU::G_WIDTH_2,th)
@confirm_window.viewport = @viewport
@confirm_window.set_handler(:ok, method(:on_conf_ok))
@confirm_window.set_handler(:cancel, method(:on_conf_cancel))
@confirm_window.hide
end
def on_menu_ok
ti = @skill_window.index
if(@skill_window.current_item_enabled?)
ttext = get_skill_name(ti) + LDT_SKILL_MENU::CONFIRM_TITLE
@confirm_title_window.set_text(ttext)
@confirm_title_window.show
@confirm_window.activate
@confirm_window.select(0)
@confirm_window.show
else
@skill_window.activate
end
end
def on_conf_ok
if(@confirm_window.index >= 1)
on_conf_cancel
else
ti = @skill_window.index
$game_variables[LDT_SKILL_MENU::SKILL_VARS[ti]] += 1
$game_variables[LDT_SKILL_MENU::SKILL_TOTAL_POINT_VAR] -= $game_variables[LDT_SKILL_MENU::COST_VARS[ti]]
refresh_windows
on_conf_cancel
end
end
def refresh_windows
@skill_window.refresh
@title_window.refresh
end
def on_conf_cancel
@confirm_window.deactivate
@confirm_window.hide
@confirm_title_window.hide
@skill_window.activate
end
def get_skill_name(index)
tskill = LDT_SKILL_MENU::SKILL_NAMES[index]
if(tskill[index].is_a?(Array))
return tskill[index][$game_variables[LDT_SKILL_MENU::SKILL_VARS[index]]]
else
return tskill[index]
end
end
end
class LDT_Skill_Window < Window_Selectable
def initialize(x, y, width, height)
super(x,y,width,height)
@skills = LDT_SKILL_MENU::SKILL_NAMES
refresh
end
def item_max
@skills ? @skills.size : 1
end
def item
@skills && index >= 0 ? @skills[index] : nil
end
def refresh
set_costs()
create_contents
draw_all_items
end
def draw_item(index)
rect = item_rect(index)
rect.width -= 4
if(current_item_enabled?(index))
contents.font.color.alpha = 255
else
contents.font.color.alpha = translucent_alpha
end
draw_icon(get_icon_num(index), rect.x, rect.y, current_item_enabled?(index))
draw_text(rect.x + 26, rect.y, rect.width - 26, rect.height, get_skill_name(index))#, rect.x, rect.y)
draw_text(rect,get_costs(index),2)
end
def get_icon_num(index)
ticon = LDT_SKILL_MENU::ICON_IDS[index]
if(ticon.is_a?(Array))
return ticon[$game_variables[LDT_SKILL_MENU::SKILL_VARS[index]]]
else
return ticon
end
end
def get_skill_name(index)
if(@skills[index].is_a?(Array))
return @skills[index][$game_variables[LDT_SKILL_MENU::SKILL_VARS[index]]]
else
return @skills[index]
end
end
def set_costs()
LDT_SKILL_MENU::COST_VARS.each_with_index do |tcv,ti|
tskill = $game_variables[LDT_SKILL_MENU::SKILL_VARS[ti]]
$game_variables[tcv] = LDT_SKILL_MENU::SKILL_COSTS[ti][tskill]
end
end
def current_item_enabled?(tindex = index)
return false if(tindex < 0)
tc = get_costs(tindex)
return false if(tc == LDT_SKILL_MENU::MAX_LEVEL_SIGN)
return ($game_variables[LDT_SKILL_MENU::SKILL_TOTAL_POINT_VAR] >= tc)
end
def get_costs(index)
tcosts = $game_variables[LDT_SKILL_MENU::COST_VARS[index]]
return tcosts >= 0 ? tcosts : LDT_SKILL_MENU::MAX_LEVEL_SIGN
end
end
class LDT_Skill_Window_Confirmation < Window_Selectable
def initialize(x, y, width, height)
super(x,y,width,height)
@items = [LDT_SKILL_MENU::CONFIRM_TRUE,LDT_SKILL_MENU::CONFIRM_FALSE]
refresh
end
def item_max
@items ? @items.size : 1
end
def item
@items && index >= 0 ? @items[index] : nil
end
def refresh
create_contents
draw_all_items
end
def draw_item(index)
rect = item_rect(index)
rect.width -= 4
draw_text(rect,get_item_name(index))
end
def get_item_name(index)
return @items[index]
end
def get_costs(index)
return $game_variables[LDT_SKILL_MENU::COST_VARS[index]]
end
end
class LDT_Skill_Window_Title < Window_Base
def initialize(x,y,line_number = 1, tw = nil)
tw = (tw ? tw : Graphics.width)
super(x, y, tw, fitting_height(line_number))
end
def refresh
contents.clear
draw_text_ex(4, 0, @text)
draw_text(4, 0, width - 32, line_height, get_second_text(), 2)
end
def get_second_text()
return $game_variables[LDT_SKILL_MENU::SKILL_TOTAL_POINT_VAR]
end
def set_text(text)
if text != @text
@text = text
refresh
end
end
end
class LDT_Confirm_Window_Title < Window_Base
def initialize(x,y,line_number = 1, tw = nil)
tw = (tw ? tw : Graphics.width)
super(x, y, tw, fitting_height(line_number))
@text2 = ""
end
def refresh
contents.clear
draw_text_ex(4, 0, @text)
end
def set_text(text)
if text != @text
@text = text
refresh
end
end
end