Jump to content


  • Content Count

  • Joined

  • Last visited

About _Tim_

  • Rank
    Teletub Prod
  • Birthday July 12

Profile Information

  • Gender
  • Location
  • Interests

RPG Maker Information

  • RM Skill -
    Jack of All Trades

Recent Profile Visitors

415 profile views
  1. YES! Finally i've got it to work! so here's the notetag: <feature condition: 1> a.hp <= (a.mhp * 0.25) </feature condition> The first Top feature is a defense boost. YOU'LL NEED THIS SCRIPT: =begin #=============================================================================== Title: Feature Conditions Author: Hime Date: Nov 22, 2014 -------------------------------------------------------------------------------- ** Change log Nov 22, 2014 - fixed bug where conditions were always false Nov 14, 2014 - added checks to prevent recursive calls Jul 10, 2014 - added support for tagging multiple features in one note-tag Jul 9, 2014 - added support for individual features Jul 16, 2013 - Initial release -------------------------------------------------------------------------------- ** Terms of Use * Free to use in non-commercial projects * Contact me for commercial use * No real support. The script is provided as-is * Will do bug fixes, but no compatibility patches * Features may be requested but no guarantees, especially if it is non-trivial * Credits to Hime Works in your project * Preserve this header -------------------------------------------------------------------------------- ** Description This script allows you to add "feature conditions" to any objects that hold features. These conditions are used to control whether the features from an object are applied to your actor or not. For example, suppose you have shield equips that have special elemental immunities when the "guard" state is applied. You can add these features to the shield and then use feature conditions to indicate that the "guard" state must be applied before the features are transferred. Feature conditions can be applied at the object level, which means all conditions must be met for any features to be applied. Feature conditions can also be applied at the feature level, which provides finer control over when specific features can be applied. -------------------------------------------------------------------------------- ** Installation Place this script below Materials and above Main -------------------------------------------------------------------------------- ** Usage To add a feature conditions, use the notetag for any objects with features, such as Actors, Classes, Weapons, Armors, Enemies, or States. If you are using the Feature Manager, then it will be applied to skills and items as well. == Object-level feature conditions == For object-level conditions, use the note-tag of the form <feature condition> FORMULA </feature condition> For any valid ruby formula that returns true or false. Three variables are available for your convenience: a - subject the feature applies to s - game switches v - game variables By "subject" I refer to "actor" or "enemy". For example, a state can be applied to both actors or enemies, so if the enemy has the state, then that enemy is the subject. If the actor has the state, then that actor is the subject. Be careful when writing your formulas. == Feature-level conditions == Applying conditions to individual features is the same as object-level conditions, except in the note-tag you specify which feature it applies to <feature condition: x> FORMULA </feature condition> <feature condition: x, y, ... > FORMULA </feature condition> Where x and y are the ID's of the features. The ID of the feature is based on its position in the list, so the feature at the top of the list has ID 1, the next one has ID 2, and so on. You can specify multiple ID's by separating them with commas. -------------------------------------------------------------------------------- ** Examples Here are some quick examples of some conditions you might have * Feature 2 and 3 are applied only if the party has more than 5000 gold <feature condition: 2,3 > $game_party.gold > 5000 </feature condition> * Features of the object are only applied if state 23 is applied <feature condition> a.state?(23) </feature condition> #=============================================================================== =end $imported = {} if $imported.nil? $imported["TH_FeatureConditions"] = true #=============================================================================== # ** Configuration #=============================================================================== module TH module Feature_Conditions Regex = /<feature[-_ ]condition>(.*?)<\/feature[-_ ]condition>/im Ft_Regex = /<feature[-_ ]condition:\s*(.*?)\s*>(.*?)<\/feature[-_ ]condition>/im end end #=============================================================================== # ** Rest of Script #=============================================================================== module RPG class BaseItem def feature_conditions_met?(subject) load_notetag_feature_conditions unless @feature_conditions_loaded return eval_feature_conditions(subject) end def load_notetag_feature_conditions @feature_conditions_loaded = true conditions = "true" res = self.note.scan(TH::Feature_Conditions::Regex) res.each_with_index do |cond, i| conditions << " && " if i > 0 conditions << cond[0] end build_condition_method(conditions.empty? ? "true" : conditions) load_notetag_individual_feature_conditions end def load_notetag_individual_feature_conditions results = self.note.scan(TH::Feature_Conditions::Ft_Regex) results.each do |res| ids = res[0].strip.split(",") ids.each do |id| id = id.to_i - 1 @features[id].feature_condition = res[1] end end end #--------------------------------------------------------------------------- # Builds the condition-checking method. This is done for performance # reasons since features are checked several hundred times very frequently. # It assumes the conditions do not change dynamically once they have been # loaded. #--------------------------------------------------------------------------- def build_condition_method(conditions) eval( "def eval_feature_conditions(a, v=$game_variables, s=$game_switches) #{conditions} end" ) end end class BaseItem::Feature attr_accessor :feature_condition def feature_condition_met?(subject) return true unless @feature_condition eval_feature_condition(subject) end def eval_feature_condition(a, v=$game_variables, s=$game_switches) eval(@feature_condition) end end end class Game_BattlerBase def feature_conditions_met?(obj, subject) obj.feature_conditions_met?(subject) end alias :th_feature_conditions_all_features :all_features def all_features return [] if @feature_eval_checking @feature_eval_checking = true fts = th_feature_conditions_all_features.select {|ft| ft.feature_condition_met?(self)} @feature_eval_checking = false return fts end end class Game_Actor < Game_Battler alias :th_feature_conditions_feature_objects :feature_objects def feature_objects fts = th_feature_conditions_feature_objects.select {|obj| feature_conditions_met?(obj, self) } return fts end end class Game_Enemy < Game_Battler alias :th_feature_conditions_feature_objects :feature_objects def feature_objects fts = th_feature_conditions_feature_objects.select {|obj| feature_conditions_met?(obj, self) } return fts end end I'm documenting as much as possible for people like me who don't understand everything that well.
  2. okay! I've tried to toy around with the notebox so here's what i came up with: <feature condition> a.hp <= 300 </feature condition> i've tried to use a flat number just to test it out. So now the issue is that the conditions applies when the combat starts, but the features won't update when the conditions are met
  3. Thanks a lot. I think using a different variable for each actor would be way to tedious for me, also, i've tried understanding the script a bit and i have very poor attention, so going quickly i don't get why you can't just do: <feature condition> a.hp <= a.mhp * 0.25 <\feature condition> Edit: i've made i chart of how i think it works It's in french but i think you get the idea
  4. Hey, so i would like to make an accessory that boost your defense but only when you have low hp. I would like the item to have high stats, but those stats would only be active while having low hp, when the user's hp are not let's say below 25% the accessory doesn't provide any stats bonuses. How would i go about that?
  5. This crashes the game i already got help on the discord here's what i got: $game_party.menu_actor = $game_party.members[4] @actor = $game_party.members[4] SceneManager.call(Scene_Equip) but that's still great for future devs still thanks