Показано с 11 по 19 из 19

Тема: Уровни Врагов (Enemy Levels)

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию Уровни Врагов (Enemy Levels)

    Уровни Врагов
    Автор: DK (Денис Кузнецов)
    Мейкер: VX Ace
    Версия: 1.2 от 30.10.15
    Тип: Добавляющий возможности

    Описание:
    Возможность настраивать уровни врагам.

    Спойлер Код:
    Код:
    =begin
    ###############################################################################
    #                                                                             #
    #          						    Уровни Врагов (Enemy Levels)	  			   	          #
    #                                                                             #
    ###############################################################################
    
    Автор: DK (Денис Кузнецов) (http://vk.com/id8137201)
    Группа ВК: http://vk.com/rpgmakervxaceandmv
    Версия: 1.2 Финальная версия
    Релиз от: 30.10.15
    Первый релиз: 27.08.15
    
    Что нового:
    -Исправлены ошибки
    
    Инструкция:
    
    Установить уровень врага:
    enemy_id - ID врага из Базы Данных
    level - уровень врага
    
    	set_enemy_level(enemy_id, level)
    
    Получить уровень врага:
    	get_enemy_level(enemy_id)
    
    =end
    
    module Enemy_Levels_Settings
    	
    	# Если Вы указали настройки для врага в ENEMY_LEVELS, то ENEMY_BASIC_LEVELS не будет применено к нему!
    	
    	# Настройка уровней всех врагов
    	# параметры: :mhp (жизни), :mmp (мана), :atk (атака), :def (защита), :mat (маг. атака)
    	# :mdf (маг. защита), :agi (проворство), :luk (удача), :exp (опыт), :gold (золото)
    	# :name (имя врага), :graphic (название графики)
    	# :actions (действия), :drop_items (награда за победу)
    	# Чтобы указать процентное увеличение параметра, укажите его в ковычках ""
    	# Пример: "20" - значение будет увеличено на 20% от значения Базы Данных
    	# -1 чтобы оставить один из параметров без изменений (будет значение из Базы Данных)
    	# :name => Имя врага в ковычках
    	# :graphic => Название графики в ковычках
    	# :actions => [номера действий из таблицы ENEMY_LEVELS_ACTIONS]
    	# :drop_items => [номера наград из таблицы ENEMY_LEVELS_DROP_ITEMS]
    	# уровень => { параметр => значение и т.д. }
    	ENEMY_BASIC_LEVELS = {
    		1 => { :mhp => 1, :mmp => 400, :atk => 10, :def => 1, :mat => 10, :mdf => 10, :agi => 10, :luk => 10, 
    			:exp => 11, :gold => '100', :name => "Оса", :graphic => "God", 
    			:actions => [1], :drop_items => [1, 2] }
    	}
    	
    	# Настройка уровней отдельных врагов
    	# номер_врага (ID из Базы Данных) => { уровень => { параметр => значение и т.д. } }
    	ENEMY_LEVELS = {
    		
    	}
    	
    	# Настройка действий врага
    	# :id => ID навыка из Базы Данных
    	# :type => тип условия
    	# 1 - Всегда
    	# 2 - Ход №
    	# 3 - HP
    	# 4 - MP
    	# 5 - Состояние
    	# 6 - Ур. партии
    	# 7 - Переключатель
    	# :param1 => условие1
    	# :param2 => условие2
    	# Для типа 1 (Всегда): :param1 => 0 и :param2 => 0
    	# Для типа 2 (Ход №): :param1 => Ход1 и :param2 => Ход2
    	# Для типа 3 (HP): :param1 => Процент1 и :param2 => Процент2 (Проценты в пределах 0 - 1) Пример: 0.35 (35% HP)
    	# Для типа 4 (MP): :param1 => Процент1 и :param2 => Процент2 (Проценты в пределах 0 - 1) Пример: 0.1 (10% MP)
    	# Для типа 5 (Состояние): :param1 => ID состояния и :param2 => 0
    	# Для типа 6 (Ур. партии): :param1 => Уровень партии и :param2 => 0
    	# Дли типа 7 (Переключатель): :param1 => ID переключателя и :param2 => 0
    	# :priority => приоритет действия
    	# номер => { :id => значение, :type => значение, :param1 => значение, :param2 => значение, :priority => значение }
    	ENEMY_LEVELS_ACTIONS = {
    		1 => { :id => 2, :type => 0, :param1 => 0, :param2 => 0, :priority => 6 }
    	}
    	
    	# Настройка награды за победу
    	# :type => тип награды
    	# 1 - вещь
    	# 2 - оружие
    	# 3 - броня
    	# :id => ID предмета из Базы Данных
    	# :chance => шанс добычи (1 / chance)
    	# номер => { :type => значение, :id => значение, :chance => значение }
    	ENEMY_LEVELS_DROP_ITEMS = {
    		1 => { :type => 1, :id => 1, :chance => 1 },
    		2 => { :type => 2, :id => 2, :chance => 2 }
    	}
    	
    	# Отображать уровень в имени врага ?
    	ENEMY_LEVELS_SHOW_LEVEL = true
    	
    end # module Enemy_Levels_Settings
    
    class Enemy_Levels_Functions
    	
    	include Enemy_Levels_Settings
    	
    	# Получить врага
    	def self.get_enemy(enemy_id)
    		enemy_lvl = get_enemy_lvl(enemy_id)
    		if $Enemy_Levels_Enemies.has_key?(enemy_id)
    			return $Enemy_Levels_Enemies[enemy_id][0] if $Enemy_Levels_Enemies[enemy_id][1] == enemy_lvl
    		end
    		enemy = Marshal.load(Marshal.dump($data_enemies[enemy_id])) # чтобы не использовать объект из Базы Данных
    		enemy.name = get_enemy_name(enemy_id)
    		if !check_enemy_levels_settings(enemy_id)
    			$Enemy_Levels_Enemies[enemy_id] = [enemy, enemy_lvl]
    			return enemy
    		end
    		enemy_preset = get_enemy_preset(enemy_id)
    		params = [:mhp, :mmp, :atk, :def, :mat, :mdf, :agi, :luk]
    		for i in 0..7
    			value = enemy_preset[params[i]]
    			enemy.params[i] = get_value(value) if check_standard_value(value)
    		end
    		enemy.exp = get_enemy_exp(enemy_id)
    		enemy.gold = get_enemy_gold(enemy_id)
    		enemy.drop_items = get_enemy_drop_items(enemy_id)
    		enemy.actions = get_enemy_actions(enemy_id)
    		enemy.battler_name = get_enemy_graphic(enemy_id)
    		$Enemy_Levels_Enemies[enemy_id] = [enemy, enemy_lvl]
    		return enemy
    	end
    	
    	# Получить настройки для врага (общие или индивидуальные)
    	def self.get_enemy_preset(enemy_id)
    		enemy_lvl = get_enemy_lvl(enemy_id)
    		return ENEMY_LEVELS[enemy_id][enemy_lvl] if check_enemy_levels(enemy_id)
    		return ENEMY_BASIC_LEVELS[enemy_lvl]
    	end
    	
    	# Проверить наличие индивидуальных настроек для врага
    	def self.check_enemy_levels(enemy_id)
    		enemy_lvl = get_enemy_lvl(enemy_id)
    		return false if !ENEMY_LEVELS.has_key?(enemy_id)
    		return false if ENEMY_LEVELS[enemy_id] == {}
    		return false if !ENEMY_LEVELS[enemy_id].has_key?(enemy_lvl)
    		return false if ENEMY_LEVELS[enemy_id][enemy_lvl] == {}
    		return true
    	end
    	
    	# Проверить наличие общих настроек для врага
    	def self.check_enemy_basic_levels(enemy_id)
    		enemy_lvl = get_enemy_lvl(enemy_id)
    		return false if !ENEMY_BASIC_LEVELS.has_key?(enemy_lvl)
    		return false if ENEMY_BASIC_LEVELS[enemy_lvl] == {}
    		return true
    	end
    	
    	# Проверить общих и индивидуальных настроек
    	def self.check_enemy_levels_settings(enemy_id)
    		return false if !check_enemy_levels(enemy_id) && !check_enemy_basic_levels(enemy_id)
    		return true
    	end
    	
    	# Проверка значения
    	def self.check_standard_value(value)
    		return false if value.nil?
    		return false if value == ""
    		return false if value == -1
    		return true
    	end
    	
    	# Получить уровень врага
    	def self.get_enemy_lvl(enemy_id)
    		if !$Enemy_Levels.has_key?(enemy_id)
    			$Enemy_Levels[enemy_id] = 1
    		end
    		return $Enemy_Levels[enemy_id]
    	end
    	
    	# Получить текст уровня врага
    	def self.get_enemy_lvl_name(enemy_id)
    		return "" if !ENEMY_LEVELS_SHOW_LEVEL
    		return " Ур. " + get_enemy_lvl(enemy_id).to_s + " "
    	end
    	
    	# Получить имя врага
    	def self.get_enemy_name(enemy_id)
    		enemy = $data_enemies[enemy_id]
    		lvl = get_enemy_lvl_name(enemy_id)
    		return enemy.name + lvl if !check_enemy_levels_settings(enemy_id)
    		enemy_preset = get_enemy_preset(enemy_id)
    		if enemy_preset.has_key?(:name)
    			name = enemy_preset[:name]
    			name = enemy.name if !check_standard_value(name)
    		end
    		return name + lvl
    	end
    	
    	# Получить графику врага
    	def self.get_enemy_graphic(enemy_id)
    		enemy = $data_enemies[enemy_id]
    		return enemy.battler_name if !check_enemy_levels_settings(enemy_id)
    		enemy_preset = get_enemy_preset(enemy_id)
    		if enemy_preset.has_key?(:graphic)
    			graphic = enemy_preset[:graphic]
    			return graphic if check_standard_value(graphic)
    		end
    		return enemy.battler_name
    	end
    	
    	# Получить действия врага
    	def self.get_enemy_actions(enemy_id)
    		enemy = $data_enemies[enemy_id]
    		return enemy.actions if !check_enemy_levels_settings(enemy_id)
    		actions = []
    		enemy_preset = get_enemy_preset(enemy_id)
    		return enemy.actions if !enemy_preset.has_key?(:actions)
    		enemy_preset[:actions].each do |value|
    			next if !check_standard_value(value)
    			next if !ENEMY_LEVELS_ACTIONS.has_key?(value)
    			action = ENEMY_LEVELS_ACTIONS[value]
    			actions.push(RPG::Enemy::Action.new)
    			actions[-1].skill_id = action[:id]
    			actions[-1].condition_type = action[:type]
    			actions[-1].condition_param1 = action[:param1]
    			actions[-1].condition_param2 = action[:param2]
    			actions[-1].rating = action[:priority]
    		end
    		return actions
    	end
    	
    	# Получить награды за победу
    	def self.get_enemy_drop_items(enemy_id)
    		enemy = $data_enemies[enemy_id]
    		return enemy.drop_items if !check_enemy_levels_settings(enemy_id)
    		drop_items = []
    		enemy_preset = get_enemy_preset(enemy_id)
    		return enemy.drop_items if !enemy_preset.has_key?(:drop_items)
    		enemy_preset[:drop_items].each do |value|
    			next if !check_standard_value(value)
    			next if !ENEMY_LEVELS_DROP_ITEMS.has_key?(value)
    			drop_item = ENEMY_LEVELS_DROP_ITEMS[value]
    			drop_items.push(RPG::Enemy::DropItem.new)
    			drop_items[-1].kind = drop_item[:type]
    			drop_items[-1].data_id = drop_item[:id]
    			drop_items[-1].denominator = drop_item[:chance]
    		end
    		return drop_items
    	end
    	
    	# Получить значение
    	def self.get_value(value, basic_value = nil)
    		return value if value.is_a?(Integer)
    		return (basic_value * ((100 + value.to_i).to_f / 100)).to_i if value.is_a?(String)
    	end
    	
    	# Получить опыт врага
    	def self.get_enemy_exp(enemy_id)
    		enemy = $data_enemies[enemy_id]
    		enemy_preset = get_enemy_preset(enemy_id)
    		if enemy_preset.has_key?(:exp)
    			return get_value(enemy_preset[:exp], enemy.exp)
    		else
    			return enemy.exp
    		end
    	end
    	
    	# Получить золото врага
    	def self.get_enemy_gold(enemy_id)
    		enemy = $data_enemies[enemy_id]
    		enemy_preset = get_enemy_preset(enemy_id)
    		if enemy_preset.has_key?(:gold)
    			return get_value(enemy_preset[:gold], enemy.gold)
    		else
    			return enemy.gold
    		end
    	end
    	
    end # class Enemy_Levels_Functions
    
    $imported = {} if $imported.nil?
    $imported["DenKyz_Enemy_Levels"] = true
    
    class Game_Enemy < Game_Battler
    	
    	alias denis_kyznetsov_enemy_levels_game_enemy_initialize initialize
    	def initialize(index, enemy_id)
    		denis_kyznetsov_enemy_levels_game_enemy_initialize(index, enemy_id)
    		@original_name = enemy.name
    		@battler_name = enemy.battler_name
    	end
    	
    	def enemy
    		Enemy_Levels_Functions.get_enemy(@enemy_id)
    	end
    	
    end # class Game_Enemy < Game_Battler
    
    class Game_Interpreter
    	
    	def set_enemy_level(enemy_id, level)
    		$Enemy_Levels[enemy_id] = level
    	end
    	
    	def get_enemy_level(enemy_id)
    		return Enemy_Levels_Functions.get_enemy_lvl(enemy_id)
    	end
    	
    end # class Game_Interpreter
    
    module DataManager
    	
    	class << self
    		alias denis_kyznetsov_enemy_levels_data_manager_create_game_objects create_game_objects
    		alias denis_kyznetsov_enemy_levels_data_manager_make_save_contents make_save_contents
    		alias denis_kyznetsov_enemy_levels_data_manager_extract_save_contents extract_save_contents
    	end
    	
    	def self.create_game_objects
    		denis_kyznetsov_enemy_levels_data_manager_create_game_objects
    		$Enemy_Levels_Enemies = {}
    		$Enemy_Levels = {}
    	end
    	
    	def self.make_save_contents
    		contents = denis_kyznetsov_enemy_levels_data_manager_make_save_contents
    		contents[:Enemy_Levels] = $Enemy_Levels
    		contents
    	end
    	
    	def self.extract_save_contents(contents)
    		denis_kyznetsov_enemy_levels_data_manager_extract_save_contents(contents)
    		$Enemy_Levels = contents[:Enemy_Levels]
    	end
    	
    end # module DataManager


    Уровни Врагов
    Автор: DK (Денис Кузнецов)
    Мейкер: MV
    Версия: 1.1

    Требования:
    Ядро DKCore версии 1.3 или выше

    Скачать с Яндекс.Диск:
    Яндекс.Диск
    Последний раз редактировалось DK; 22.11.2015 в 19:24. Причина: Обновление

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
Уровни Врагов (Enemy Levels)