PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Item erst ab bestimmten lvl verwendbar?



Lil_M2006
18.02.2007, 15:47
Hey Leute kann mir jemand weiter helfen und sagen wie man es einstellt das der Held ein Item erst ab einem bestimmten lvl einsetzten kann?z.b. lvl3
danke schonma lim voraus =)

~Hauptmann Krey~
18.02.2007, 16:00
Du machst ein allgemeines Ereignis welches abfragt, auf welchem Level dein ehld ist.
Mach ersma zwei versionen deiner Waffe.
Eine normale und eine nichts könnende (allgemeine Waren).

Also, "wenn Held lv. größergleich 3", dann soll noch mal abgefragt werden, ob das Item "Schwert"(das nutzlose) da ist. Wenn ja, dann soll es mit dem richtigen Item ausgetauscht werden.

V-King
18.02.2007, 16:24
Wenn du kein selbst geskriptetes Menü benutzt, geht das nicht.
Du könntest maximal das Item so einstellen, dass es einen Switch an stellt, der wiederrum ein Common Event startet, in dem abgefragt wird, ob der Held über das notwendige Level verfügt.

Falls ja, die Auswirkungen des Items in das Common Event dazu skripten (z.B. Helden um 10 KP heilen oder so)

Falls nein, eine Meldung ausgeben, dass der Level des Helden noch nicht hoch genug ist, das Item benutzen zu können.

EDIT: IEKS, ich seh grad, dass es ja um den RMXP geht...
Naja, die Sache ist aber fast dieselbe, mit der Ausnahme, dass du es wahrscheinlich per Ruby ändern kannst. Wie das dann allerdings geht, weiss ich nicht :D"

Kelven
18.02.2007, 18:43
Über die normale Datenbank geht es wie V-King schon gesagt hat nicht. Du müsstest also die Klasse, in der das Itemmanagement geregelt wird umschreiben. Wie genau erklären dir aber lieber die Leute, die sich mit Ruby auskennen. ^^

Lil_M2006
18.02.2007, 19:44
Okay Danke für die infos^^

Kann mir das dan jemand genau erlkären mit ruby?
was das ist und vielleicht nen link zu nem tut reinstellen wenns eins gibt=)
danke

Kaat
18.02.2007, 19:52
Die Lösung mit dem Common Event ist aber leichter. Da es mit der Methode einfach und ohne große Umstände machbar ist, würde ich daher auch nicht sagen, "es geht nicht". Rein technisch ist es im Maker nicht integriert, das mag sein, aber man kann es imitieren. Ist also ganz einfach.

Wie gesagt: du sorgst dafür, dass das Item einen Switch anstellt. Von diesem Switch abhängig machst du ein Auto Start-Common Event, das zunächst abfragt, ob der Held höher als Level X ist. Wenn ja > Effekt bewirken, Switch wieder OFF stellen, 1 Item dieser Art entfernen. Wenn nein > entsprechende Meldung bewirken, Switch OFF stellen.

Kelven
19.02.2007, 09:36
Die Lösung mit dem Common Event ist aber leichter.

Na na, das würde ich nicht sagen. Ok, kommt darauf an wie man leicht definiert. Beim Kampf finde ich es mit Ruby einfacher, da müsste man nur in einer einzelnen Klasse eine zusätzliche Bedingung einführen, die Benutzer und seine Stufe mit dem Level vergleicht. Außerhalb des Kampfes ist es schwieriger, da man dort soweit ich weiß keinen Benutzer hat.

Kaat
19.02.2007, 20:00
Hab' mich unglücklich ausgedrückt. Mit leichter meinte ich, dass man diese Lösung mit "Maker only"-Wissen anwenden kann, wenn man (so wie ich) von Ruby keine Ahnung hat. ;)

-KD-
19.02.2007, 20:41
module RPG
#=============================================================================
# ** Item
#=============================================================================
class Item
SYNTAX = /\[(\d*?)\]/ #Levelbegrenzung beim Itemnamen als [level] angeben
#--------------------------------------------------------------------------
# * Überprüft, ob das Item eine Levelbegrenzung hat und wandelt es
# dementsprechend um
#--------------------------------------------------------------------------
def limited?
name = @name
if (name.slice!(SYNTAX)) then
new_item = Level_Limited_Item.new($1.to_i)
variablen = self.instance_variables
variablen.each {|variable|
symbol = variable.to_sym
new_item.instance_variable_set(symbol,self.instance_variable_get(symbol))
new_item.name = name
}
return new_item
else
return self
end
end
#--------------------------------------------------------------------------
# * Überprüft alle Items der Database nach ihrer Levelbegrenzung
#--------------------------------------------------------------------------
def self.check
$data_items.each_index {|index|
$data_items[index] = $data_items[index].limited? if $data_items[index]
}
end
#--------------------------------------------------------------------------
# * Wenn ein Item keine Levelbegrenzung hat, dann ist diese automatisch 1
#--------------------------------------------------------------------------
def level
return 1
end
end
#==============================================================================
# ** Level_Limited_Item
#------------------------------------------------------------------------------
# Zur besseren Kompatibilität mit bestehenden Items und Speicherständen
# werden levelbegrenzte Items als neue Klasse behandelt
#==============================================================================
class Level_Limited_Item < Item
attr_accessor(:level)
#--------------------------------------------------------------------------
# * Items mit Levelbegrenzung haben eine öffentliche Instanzvariable @level
#--------------------------------------------------------------------------
def initialize(level)
super()
@level = level
end
#--------------------------------------------------------------------------
# * Ein bereits begrenztes Item brauch nicht erneut überprüft werden
#--------------------------------------------------------------------------
def limited?
return self
end
end
end
#==============================================================================
# ** Game_Party
#==============================================================================
class Scene_Title
alias new_main main
#--------------------------------------------------------------------------
# * Im Titelbildschirm soll die Database eingelesen und die Items
# überprüft werden
#--------------------------------------------------------------------------
def main
new_main
RPG::Item.check
end
end

#==============================================================================
# ** Game_Party
#==============================================================================
class Game_Party
alias new_item_can_use? item_can_use?
#--------------------------------------------------------------------------
# * Wenn kein spezifischer Held ein Item verwendet, so soll automatisch der
# lebende Held mit dem höchsten Level das Item verwenden
#--------------------------------------------------------------------------
def highest_level
level = 1
self.actors.each {|actor|
if not actor.dead? and ((lev=actor.level)>level) then level = lev end
}
level
end
#--------------------------------------------------------------------------
# * Items können nur eingesetzt werden, wenn das eigene Level höher als
# das der Levelbegrenzung ist
#--------------------------------------------------------------------------
def item_can_use?(item_id,battler_level=self.highest_level)
item = $data_items[item_id]
if item.level > battler_level then
return false
else
new_item_can_use?(item_id)
end
new_item_can_use?(item_id)
end
end
#==============================================================================
# ** Scene_Battle
#------------------------------------------------------------------------------
# Editierte Stellen sind gekennzeichnet!
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# * Im Kampf wird für jeden Kämpfer einzeln überprüft, ob er die
# Levelbegrenzung erfüllt
#--------------------------------------------------------------------------
def update_phase3_item_select
@item_window.user_level = @active_battler.level #EDIT
# Make item window visible
@item_window.visible = true
# Update item window
@item_window.update
# If B button was pressed
if Input.trigger?(Input::B)
# Play cancel SE
$game_system.se_play($data_system.cancel_se)
# End item selection
end_item_select
return
end
# If C button was pressed
if Input.trigger?(Input::C)
# Get currently selected data on the item window
@item = @item_window.item
# If it can't be used
unless $game_party.item_can_use?(@item.id, @active_battler.level) #EDIT
# Play buzzer SE
$game_system.se_play($data_system.buzzer_se)
return
end
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Set action
@active_battler.current_action.item_id = @item.id
# Make item window invisible
@item_window.visible = false
# If effect scope is single enemy
if @item.scope == 1
# Start enemy selection
start_enemy_select
# If effect scope is single ally
elsif @item.scope == 3 or @item.scope == 5
# Start actor selection
start_actor_select
# If effect scope is not single
else
# End item selection
end_item_select
# Go to command input for next actor
phase3_next_actor
end
return
end
end
end
#==============================================================================
# ** Window_Item
#------------------------------------------------------------------------------
# Editierte Stellen sind gekennzeichnet!
#==============================================================================
class Window_Item < Window_Selectable
alias new_initialize initialize
#--------------------------------------------------------------------------
# * Die Window_Item Klasse erhält die private Instanzvariable @user_level
# Wenn kein Level angegeben, so ist diese automatisch so groß wie das
# Level des besten Heldens
#--------------------------------------------------------------------------
def initialize(level=$game_party.highest_level)
@user_level = level
new_initialize
end
#--------------------------------------------------------------------------
# * Die Instanzvariable @user_level kann jederzeit neu beschrieben werden
#--------------------------------------------------------------------------
def user_level=(other)
if other != @user_level then
@user_level = other
refresh
end
end
#--------------------------------------------------------------------------
# * Nicht verwendbare Items sollen grau dargestellt werden
#--------------------------------------------------------------------------
def draw_item(index)
item = @data[index]
case item
when RPG::Item
number = $game_party.item_number(item.id)
when RPG::Weapon
number = $game_party.weapon_number(item.id)
when RPG::Armor
number = $game_party.armor_number(item.id)
end
if item.is_a?(RPG::Item) and
$game_party.item_can_use?(item.id, @user_level) #EDIT
self.contents.font.color = normal_color
else
self.contents.font.color = disabled_color
end
x = 4 + index % 2 * (288 + 32)
y = index / 2 * 32
rect = Rect.new(x, y, self.width / @column_max - 32, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
bitmap = RPG::Cache.icon(item.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, item.name, 0)
self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
end
end

Funktioniert bisher nur mit Items. Rüstungen und Waffen kann ich aber, falls gewünscht, noch hinzufügen.

Schreib bei deinen Items in der Database neben den Namne einfach ein [level] (statt level eben das jeweilige Mindestlevel).

Beispiel: Potion[5]
--> Spieler kann Potion nur einsetzen, wenn er mindestens Level 5 ist.

Im Kampf wird zwischen jedem Kämpfer unterschieden, im Menü wird automatisch das Level des besten Charakters verwendet.

Xered
20.02.2007, 19:16
Wird das jez als neues event, oder in ein anderes eingefügt?

-KD-
20.02.2007, 19:17
Das kommt in den Scripteditor (F11) X_x
Einfach in ein neues Script über Main einfügen.

Xered
20.02.2007, 22:14
Das kommt in den Scripteditor (F11) X_x
Ja ne, da wär ich jetzt nicht von alleine drafu gekommen....


Einfach in ein neues Script über Main einfügen.
Das wollt ich wissen.
Hät ja auch in ein vorhandenes Skript bei den Menü Skripts reinkommen können.

Lil_M2006
21.02.2007, 20:58
Also danke an alle
es hat geklappt^^

Xered
22.02.2007, 15:14
Könntest du das mit den Rüstungen und Waffen hinzufügen?

Ist es auch möglich, das man zb Waffen erst ab einer bestimmten Stärke ausrüsten kann? Also auf diese Art und weise, ohne großes rumskripten.