Ich hab deinen Code so in Scene_Map reingepresst und die zwei Stellen korrigiert. Damit funktioniert es.
Code:
class Window_DebugStates < Window_SkillList
def col_max
return 1
end
def enable?(item)
return true
end
def include?(item)
return true
end
def make_item_list
@data = $data_states
end
def draw_item(index)
state = @data[index]
if state
rect = item_rect(index)
rect.width -= 4
draw_item_name(state, rect.x, rect.y, enable?(state))
infl = inflicted?(state) ? "[ON]" : "[OFF]"
draw_text(item_rect_for_text(index), infl, 2)
end
end
def inflicted?(state)
return @actor.state?(state.id)
end
end
class Scene_Map < Scene_Base
alias start_debugstates start
def start
start_debugstates
@actor = $game_party.members.first
command_edit_states
end
def command_edit_states
@states_window = Window_DebugStates.new(100, 120, 250, 250)
@states_window.actor = @actor
@states_window.set_handler(:ok, method(:on_state_ok))
@states_window.set_handler(:cancel, method(:on_state_cancel))
@states_window.activate
@states_window.refresh
@states_window.select(1)
@states_window.actor = @actor
end
def on_state_cancel
end
def on_state_ok
state_id = @states_window.index
if @actor.state?(state_id)
@actor.remove_state(state_id)
@actor.result.removed_states.clear
else
@actor.add_state(state_id)
end
#@states_window.select(@states_window.index)
@states_window.refresh
@states_window.activate
end
end
Eine Zeile hab ich noch eingefügt:
Code:
@actor.result.removed_states.clear
muss nach @actor.remove_state aufgerufen werden, da ein Zustand der beseitigt wurde in der selben "Kampfrunde" nicht noch einmal gesetzt werden darf.
Kannst du mal deinen kompletten Code zeigen?