Jump to content
Rpg²S Forum
  • 0

Mi serve uno script per delle combo!!


babin91
 Share

Question

11 answers to this question

Recommended Posts

  • 0
Dipende dal battle system che usi:standard, tattico, laterale, in tempo reale...

"Quarantadue!" urlò Loonquawl. "Questo è tutto ciò che sai dire dopo un lavoro di sette milioni e mezzo di anni?"

"Ho controllato molto approfonditamente," disse il computer, "e questa è sicuramente la risposta. Ad essere sinceri, penso che il problema sia che voi non abbiate mai saputo veramente qual è la domanda."

 

 

 

Gioco disponibile: Prophecy of Last Era - OPEN SOURCE

 

http://www.mediafire.com/?u6aut42ks12ixgf

 

Puoi utilizzare qualsiasi evento, mappa, chara, grafica, e programmazione contenuta nel gioco-demo.

Nessun diritto di copia.

Hope you enjoy.

http://www.rpg2s.net/awards/bestmusician3.jpg

Link to comment
Share on other sites

  • 0

Io conosco questo do KGC:

 

#==============================================================================
# ** Multi-Attack 
#------------------------------------------------------------------------------
#  Permette di effettuare attacchi multipli
#==============================================================================

#==============================================================================
#Istruzioni
#==============================================================================
#Create all'interno della cartella "Audio/SE" del vostro gioco 
#un nuovo file e rinominatelo come il valore della costante MATK_HIT_SE
#(di default "_multi_attack") e non dategli alcuna estensione.
#Ora aprite il database e andate su Animazione, create una nuova animazione
#(potete anche modificarne una gia esistente) e nella tabella effetti
#fate riprodurre l'effetto sonoro creato sopra dove volete che avvenga
#un attacco aggiuntivo(se l'effetto sonoro si trova più di una volta su uno
#stesso frame esso viene contato comunque per 1). Associate l'animazione
#alla skill o all'arma desiderata ed il gioco è fatto.
#==============================================================================

module KGC
 # Nome dell'effetto sonoro fittizio
 MATK_HIT_SE = "_multi_attack"
 # Ridisegna la Status Window ad ogni colpo
 MATK_HIT_REFRESH = false
 # Aspetta fino a che non mostra il danno
 # se settato su true
 MATK_WAIT_DAMAGE_EFFECT = false

 # Mostra il danno totale
 MATK_SHOW_TOTAL_DMG = false
 # Elimina danno precedente
 # Dopo averlo eliminato mostra il danno successivo
 MATK_DELETE_PREV_DMG = false

 # Sposta danno
 # Il prossimo danno verrà indicato in una posizione un po diversa
 MATK_SHIFT_DMG_POS = true
 # Setta di quanto la posizione
 # del danno verrà spostata
 MATK_SHIFT_DMG_POS_AMT = -10

 # Mostra contatore colpi
 MATK_SHOW_HIT_COUNT = true
 # Mostra il contatore alle coordinate [x, y]
 #  relative al danno.
 MATK_HIT_COUNT_POS = [0, 48]
 # Formato Contatore
 #  "{n}parola"
 MATK_HIT_COUNT_FORMAT = "{n}Colpi"
 # Colore Contatore
 MATK_HIT_COUNT_COLOR = Color.new(255, 224, 160)
 # Proprietà Font 
 MATK_HIT_COUNT_FONT_NAME   = ["Times New Roman", "Arial"] # Nome
 MATK_HIT_COUNT_FONT_SIZE   = 22	# Grandezza
 MATK_HIT_COUNT_FONT_BOLD   = true  # Grassetto
 MATK_HIT_COUNT_FONT_ITALIC = true  # Corsivo
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

$imported = {} if $imported == nil
$imported["MultiAttack"] = true

#==============================================================================
# ■ Game_Battler (分割定義 1)
#==============================================================================

class Game_Battler
 attr_accessor :prev_hp, :prev_sp
 #--------------------------------------------------------------------------
 # ● オブジェクト初期化
 #--------------------------------------------------------------------------
 alias initialize_KGC_MultiAttack initialize
 def initialize
initialize_KGC_MultiAttack

@prev_hp = nil
@prev_sp = nil
 end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Sprite_Battler
#==============================================================================

class Sprite_Battler < RPG::Sprite
 #--------------------------------------------------------------------------
 # ● オブジェクト初期化
 #--------------------------------------------------------------------------
 alias initialize_KGC_MultiAttack initialize
 def initialize(viewport, battler = nil)
initialize_KGC_MultiAttack(viewport, battler)

@_damage_sprite_array = []
@_damage_duration_array = []
@_damage_direct_type_array = []
@_latest_damage_sprite = nil
@_hit_count_sprite = RPG::Sprite.new
@_hit_count_sprite.bitmap =
  Bitmap.new(160, KGC::MATK_HIT_COUNT_FONT_SIZE * 3 / 2)
reset_hit_count
 end
 #--------------------------------------------------------------------------
 # ● 解放
 #--------------------------------------------------------------------------
 alias dispose_KGC_MultiAttack dispose
 def dispose
@_damage_sprite_array.each_index { |i| dispose_damage(i) }
@_hit_count_sprite.bitmap.dispose
@_hit_count_sprite.dispose

dispose_KGC_MultiAttack
 end
 #--------------------------------------------------------------------------
 # ● 多段ヒット判定
 #--------------------------------------------------------------------------
 def multi_attack?
if @_multi_attack
  @_multi_attack = false
  return true
end
return false
 end
 #--------------------------------------------------------------------------
 # ● ヒットカウント加算
 #--------------------------------------------------------------------------
 def add_hit_count
@_hit_count += 1
if KGC::MATK_SHOW_HIT_COUNT
  refresh_hit_count_sprite
end
 end
 #--------------------------------------------------------------------------
 # ● ヒットカウント初期化
 #--------------------------------------------------------------------------
 def reset_hit_count
@_hit_count = 0
if KGC::MATK_SHOW_HIT_COUNT
  refresh_hit_count_sprite
end
 end
 #------------------------------------------------------------------------
 # ● ダメージスプライト作成
 #------------------------------------------------------------------------
 def damage(value, critical)
@_damage_sprite_array.compact!
@_damage_duration_array.compact!
@_damage_direct_type_array.compact!
super
sprite = RPG::Sprite.new
sprite.bitmap = @_damage_sprite.bitmap.dup
sprite.ox = @_damage_sprite.ox
sprite.oy = @_damage_sprite.oy
sprite.x = @_damage_sprite.x
sprite.y = @_damage_sprite.y
if KGC::MATK_SHIFT_DMG_POS
  sprite.y += @_damage_sprite_array.size * KGC::MATK_SHIFT_DMG_POS_AMT
end
sprite.z = @_damage_sprite.z
@_damage_sprite_array.unshift(sprite)
@_damage_duration_array.unshift(40)
@_damage_direct_type_array.unshift(@_damage_direct_type)
@_latest_damage_sprite = sprite
dispose_damage
 end
 #--------------------------------------------------------------------------
 # ● ダメージスプライト破棄
 #--------------------------------------------------------------------------
 def dispose_damage(index = -1)
if index >= 0 && @_damage_sprite_array[index] != nil
  if @_latest_damage_sprite == @_damage_sprite_array[index]
	@_latest_damage_sprite = nil
  end
  @_damage_sprite_array[index].bitmap.dispose
  @_damage_sprite_array[index].dispose
  @_damage_sprite_array[index] = nil
  @_damage_duration_array[index] = nil
  @_damage_direct_type_array[index] = nil
else
  super()
end
 end
 #--------------------------------------------------------------------------
 # ● ダメージスプライトクリア
 #--------------------------------------------------------------------------
 def clear_damage
@_damage_sprite_array.each_index { |i|
  dispose_damage(i)
}
@_damage_sprite_array.compact!
@_damage_duration_array.compact!
@_damage_direct_type_array.compact!
 end
 #------------------------------------------------------------------------
 # ● ヒットカウントスプライト再描画
 #------------------------------------------------------------------------
 def refresh_hit_count_sprite
img = @_hit_count_sprite.bitmap
img.clear
if @_hit_count > 1
  img.font.name = KGC::MATK_HIT_COUNT_FONT_NAME
  img.font.size = KGC::MATK_HIT_COUNT_FONT_SIZE
  img.font.bold = KGC::MATK_HIT_COUNT_FONT_BOLD
  img.font.italic = KGC::MATK_HIT_COUNT_FONT_ITALIC
  img.font.color = KGC::MATK_HIT_COUNT_COLOR
  format = KGC::MATK_HIT_COUNT_FORMAT.gsub(/{n}/i) {"#{@_hit_count}"}
  img.draw_frame_text(0, 0, img.width, img.height, format, 1)
end
 end
 #--------------------------------------------------------------------------
 # ● アニメーション実行タイミング
 #--------------------------------------------------------------------------
 def animation_process_timing(timing, hit)
if (timing.condition == 0) || (timing.condition == 1 && hit) ||
   (timing.condition == 2 && !hit)
  if timing.se.name != ""
	@_multi_attack |= (timing.se.name.upcase == KGC::MATK_HIT_SE.upcase)
  end
end
super
 end
 #--------------------------------------------------------------------------
 # ● エフェクト中判定
 #--------------------------------------------------------------------------
 if KGC::MATK_WAIT_DAMAGE_EFFECT
 unless defined?(INITIALIZED_MULTI_ATTACK)
alias effect_KGC_MultiAttack? effect?
 end
 INITIALIZED_MULTI_ATTACK = true
 def effect?
result = false
@_damage_duration_array.each { |duration|
  result |= (duration > 0)
}
return result || effect_KGC_MultiAttack?
 end
 end
 #--------------------------------------------------------------------------
 # ● フレーム更新
 #--------------------------------------------------------------------------
 alias update_KGC_MultiAttack update
 def update
@_multi_attack = false if Graphics.frame_count % 2 == 0

update_KGC_MultiAttack

if @_damage_sprite_array.size > 0
  @_damage_sprite_array.each_with_index { |sp, i|
	if sp == nil
	  next
	end
	if @_damage_duration_array[i] == 0
	  dispose_damage(i)
	  next
	end
	@_damage_duration_array[i] -= 1
	sp.x = self.x
	if $imported["DamageAlter"]
	  @_damage_direct_type = @_damage_direct_type_array[i]
	  damage_direct(sp, @_damage_duration_array[i])
	else
	  case @_damage_duration_array[i]
	  when 38..39
		sp.y -= 4
	  when 36..37
		sp.y -= 2
	  when 34..35
		sp.y += 2
	  when 28..33
		sp.y += 4
	  end
	  sp.opacity = 256 - (12 - @_damage_duration_array[i]) * 32
	end
  }
  if KGC::MATK_SHOW_HIT_COUNT && @_latest_damage_sprite != nil
	update_hit_count_sprite
  end
end
@_damage_sprite_array.compact!
@_damage_duration_array.compact!
 end
 #------------------------------------------------------------------------
 # ● ヒットカウントスプライト更新
 #------------------------------------------------------------------------
 def update_hit_count_sprite
sp = @_latest_damage_sprite
sp2 = @_hit_count_sprite
sp2.ox = sp.ox
sp2.oy = sp.oy
sp2.x = sp.x + KGC::MATK_HIT_COUNT_POS[0]
sp2.y = sp.y + KGC::MATK_HIT_COUNT_POS[1]
sp2.z = sp.z + 1
sp2.opacity = sp.opacity
 end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Spriteset_Battle
#==============================================================================

class Spriteset_Battle
 #--------------------------------------------------------------------------
 # ● スプライト取得
 #--------------------------------------------------------------------------
 def sprites
return (@enemy_sprites + @actor_sprites).compact
 end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Scene_Battle (分割定義 1)
#==============================================================================

class Scene_Battle
 #--------------------------------------------------------------------------
 # ● フレーム更新
 #--------------------------------------------------------------------------
 alias update_KGC_MultiAttack update
 def update
update_multi_attack_effect

update_KGC_MultiAttack
 end
 #--------------------------------------------------------------------------
 # ● 多段攻撃更新
 #--------------------------------------------------------------------------
 def update_multi_attack_effect
attacker = ($imported["ActiveCountBattle"] ?
  @action_battler : @active_battler)
if @phase4_step == 5 && @target_battlers != [] && attacker != nil
  # ステータスウィンドウ再描画
  if KGC::MATK_HIT_REFRESH
	@status_window.refresh
  end
  @spriteset.sprites.each { |sp|
	# 多段ヒット判定
	unless sp.multi_attack? && @target_battlers.include?(sp.battler)
	  next
	end
	if KGC::MATK_DELETE_PREV_DMG
	  sp.clear_damage
	end

	# 合計ダメージ更新
	if @_matk_total_damage[sp.battler] == nil
	  @_matk_total_damage[sp.battler] = 0
	end
	if sp.battler.damage.is_a?(Numeric)
	  @_matk_total_damage[sp.battler] += sp.battler.damage
	end

	if KGC::MATK_SHOW_TOTAL_DMG
	  # 合計を表示
	  sp.damage(@_matk_total_damage[sp.battler], sp.battler.critical)
	else
	  # 逐次表示
	  sp.damage(sp.battler.damage, sp.battler.critical)
	end

	# ヒット数更新
	if KGC::MATK_SHOW_HIT_COUNT && sp.battler.damage.is_a?(Numeric)
	  sp.add_hit_count
	end
	# 効果を追加
	case attacker.current_action.kind
	when 0
	  if attacker.current_action.basic == 0
		sp.battler.attack_effect(attacker)
	  end
	when 1
	  skill = $data_skills[attacker.current_action.skill_id]
	  sp.battler.skill_effect(attacker, skill)
	when 2
	  item = $data_skills[attacker.current_action.item_id]
	  sp.battler.item_effect(item)
	end
	# 元のHP/SPを更新
	sp.battler.prev_hp = sp.battler.hp
	sp.battler.prev_sp = sp.battler.sp
  }
end
 end
end

#==============================================================================
# ■ Scene_Battle (分割定義 4)
#==============================================================================

class Scene_Battle
 #--------------------------------------------------------------------------
 # ● フレーム更新 (メインフェーズ ステップ 4 : 対象側アニメーション)
 #--------------------------------------------------------------------------
 alias update_phase4_step4_KGC_MultiAttack update_phase4_step4
 def update_phase4_step4
@_matk_total_damage = {}
if KGC::MATK_SHOW_HIT_COUNT
  @spriteset.sprites.each { |sp| sp.reset_hit_count }
end

update_phase4_step4_KGC_MultiAttack
 end
 #--------------------------------------------------------------------------
 # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
 #--------------------------------------------------------------------------
 alias update_phase4_step5_KGC_MultiAttack update_phase4_step5
 def update_phase4_step5
# 多段ダメージ更新処理
@spriteset.sprites.each { |sp|
  if @target_battlers.include?(sp.battler) &&
	  @_matk_total_damage[sp.battler] != nil &&
	  sp.battler.damage.is_a?(Numeric)
	if KGC::MATK_SHOW_TOTAL_DMG
	  sp.battler.damage = @_matk_total_damage[sp.battler] + sp.battler.damage
	end
	if KGC::MATK_SHOW_HIT_COUNT
	  sp.add_hit_count
	end
  end
}

update_phase4_step5_KGC_MultiAttack
 end
end

#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/	◆縁取り・影文字描画 - KGC_FrameShadowText◆
#_/----------------------------------------------------------------------------
#_/  draw_text を強化し、縁取りや影文字の描画機能を追加します。
#_/  Provides functions to draw texts which framed or dropped shadow.
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

$imported = {} if $imported == nil
$imported["FrameShadowText"] = true

#==============================================================================
# ■ Bitmap
#==============================================================================

class Bitmap
 #--------------------------------------------------------------------------
 # ● 縁取り文字描画
 #	 x, y, width, height, string[, align, frame_color]
 #	 rect, string[, align, frame_color]
 #--------------------------------------------------------------------------
 def draw_frame_text(*args)
# 引数判定
if args[0].is_a?(Rect)
  if args.size >= 2 && args.size <= 4
	# 引数を処理用のローカル変数へコピー
	x, y = args[0].x, args[0].y
	width, height = args[0].width, args[0].height
	string = args[1]
	align = args[2].equal?(nil) ? 0 : args[2]
	frame_color = args[3].equal?(nil) ? Color.new(0, 0, 0) : args[3]
  else
	# 引数が不正ならエラーを吐く
	raise(ArgumentError, "wrong number of arguments(#{args.size} of #{args.size < 2 ? 2 : 4})")
	return
  end
else
  if args.size >= 5 && args.size <= 7
	# 引数を処理用のローカル変数へコピー
	x, y, width, height = args
	string = args[4]
	align = args[5].equal?(nil) ? 0 : args[5]
	frame_color = args[6].equal?(nil) ? Color.new(0, 0, 0) : args[6]
  else
	# 引数が不正ならエラーを吐く
	raise(ArgumentError, "wrong number of arguments(#{args.size} of #{args.size < 5 ? 5 : 7})")
	return
  end
end
# 元の色を保存
origin_color = font.color.dup
# 縁取り
font.color = frame_color
draw_text(x - 1, y - 1, width, height, string, align)
draw_text(x - 1, y + 1, width, height, string, align)
draw_text(x + 1, y - 1, width, height, string, align)
draw_text(x + 1, y + 1, width, height, string, align)
# 元の色に戻す
font.color = origin_color
draw_text(x, y, width, height, string, align)
 end
 #--------------------------------------------------------------------------
 # ● 影文字描画
 #	 x, y, width, height, string[, align, shadow_color]
 #	 rect, string[, align, shadow_color]
 #--------------------------------------------------------------------------
 def draw_shadow_text(*args)
# 引数判定
if args[0].is_a?(Rect)
  if args.size >= 2 && args.size <= 4
	# 引数を処理用のローカル変数へコピー
	x, y = args[0].x, args[0].y
	width, height = args[0].width, args[0].height
	string = args[1]
	align = args[2].equal?(nil) ? 0 : args[2]
	shadow_color = args[3].equal?(nil) ? Color.new(0, 0, 0) : args[3]
  else
	# 引数が不正ならエラーを吐く
	raise(ArgumentError, "wrong number of arguments(#{args.size} of #{args.size < 2 ? 2 : 4})")
	return
  end
else
  if args.size >= 5 && args.size <= 7
	# 引数を処理用のローカル変数へコピー
	x, y, width, height = args
	string = args[4]
	align = args[5].equal?(nil) ? 0 : args[5]
	shadow_color = args[6].equal?(nil) ? Color.new(0, 0, 0) : args[6]
  else
	# 引数が不正ならエラーを吐く
	raise(ArgumentError, "wrong number of arguments(#{args.size} of #{args.size < 5 ? 5 : 7})")
	return
  end
end
# 元の色を保存
origin_color = font.color.dup
# 影描画
font.color = shadow_color
draw_text(x + 2, y + 2, width, height, string, align)
# 元の色に戻す
font.color = origin_color
draw_text(x, y, width, height, string, align)
 end
end

 

Ho scritto le istruzioni in italiano, se nn capisci qualcosa dimmelo.

Link to comment
Share on other sites

  • 0
Scusa ma una volta che hai direttamente lo script non è meglio? Te lo puoi provare direttamente da te no?

(\__/)

(='.'=)

(")_(")

Questo è Bunny. Ho deciso di aiutarlo nella sua missione di conquista del mondo.

Compagni di Bunny unitevi a me!

 

http://img170.imageshack.us/img170/1858/pizzelartzzennm9.png

I chara da me postati: CLICCA QUI! PER XP - CLICCA QUI! PER XP(2) - CLICCA QUI! PER VX - CLICCA QUI! PER 2K/2K3!

I tileset da me postati:CLICCA QUI! PER XP

I Personaggi Completi da me postati: CLICCA QUI! PER XP

I Face da me postati: CLICCA QUI! PER XP

I Battlers da me postati: CLICCA QUI! PER XP!

Le Windowskin da me postate: CLICCA QUI! PER XP!

Risorse sonore da me postate: CLICCA QUI! PER SCARICARLE!

Guida al Ruby: CLICCA QUI! PER SCARICARLA!

Vi prego di inserirmi nei crediti...Grazie!

Link to comment
Share on other sites

  • 0

scusa fallo con gli eventi...è facile mo ti spiego:

con un evento in comune metti che appena il pg arriva al 20 o 10% della sua vita (poi vedi tu) aumenta la potenza oppure metti che appena arriva a questa percentuale di vita si aggiunge una skill che poi si leverà quando la vita aumenta a più del 10% o 20%... puoi fa così vedi un po' te...XD

LAST LEGEND tempo di programmazione rimasto in percentuale è:

Storia del gioco: 98%

Storia dei personaggi: 75%

Storia politica mondiale: 80%

Applicazione e sviluppo dell'avventura, tempo rimasto in percentuale è:

Titleset:40%

Charaset:20%

Animation:90%

Idem,Skill,Armi:50%

Scene Animate:10%

http://img518.imageshack.us/img518/5919/logoufficialecopiawr2.png

Link to comment
Share on other sites

  • 0
Di "turbo system" ad eventi ne ho già fatti alcuni, nn è qll il problema... Cmq x la cronaca non importa più la demo, ho fatto da solo. :wink: Sleeping L. 6 un grande! Era da mesi k cercavo 1 script così Edited by TNK
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...