| Domaine concerné: script
Logiciel utilisé: vxace
bonjour
je souhaiterais pouvoir faire en sorte que les personnages gagnes de l'xp lorsqu'ils accomplisses une action en combat(attaquer/skill/item/défendre) mais pas a la fin du combat.
je vous donne un exemple :
actor[1] utilise attaque sur ennemy[1] = si il touche alors actor[1] +3 xp (si critique +bonus 1xp/ si ennemy tuée bonus 2xp )
actor[2] utilise compétence feu sur ennemy[1] = si il touche alors actor[2] +3 xp (si critique +bonus 1xp/ si ennemy tuée bonus 2xp )
actor[3] utilise compétence soin sur actor[2] = actor[3] +2 xp (si critique +bonus 1xp )
actor[4] utilise potion sur actor[3] = actor[4] +1 xp
le système d’expérience est le même que dans les tactical rpg .
j'avais trouver ce script si ca peut aider mais il donne l'xp a la fin du combat et non après l'action de l'acteur
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
=begin
#==============================================================================
** Battle Exp
Author: Hime
Date: Jun 4, 2012
------------------------------------------------------------------------------
** Change log
Jul 15
- added ActionResult as a variable for the formula
Jun 4
- Initial release
------------------------------------------------------------------------------
This script changes the exp system such that actors don't gain exp
from winning a battle, but instead they gain "battle exp" by
successfully damaging the enemy.
When you hit an enemy, you gain a certain amount of exp equal to
a fraction of the total exp that the enemy would give.
When you kill an enemy, the actor that killed the enemy received
the total exp from the enemy, in addition to all of the previous
hits.
The battle exp formula takes several key variables:
e = Enemy object
a = Actor object
r = Action Result object
#==============================================================================
=end
$imported = {} if $imported.nil?
$imported["Tsuki_BattleExp"] = true
#==============================================================================
# ** Configuration
#==============================================================================
module Tsuki
module Battle_Exp
# formula used to calculate "hit" exp
Hit_Exp_Formula = "e.exp * (r.hp_damage / e.mhp.to_f)"
Max_Exp = 99999 # limit how much exp someone can gain from battle
end
end
#==============================================================================
# ** Rest of the script
#==============================================================================
module BattleManager
def self.display_exp
$game_party.members.each {|actor|
text = sprintf("%s gained %s exp!", actor.name, actor.battle_exp)
$game_message.add('\.' + text)
}
end
end
class Game_Battler < Game_BattlerBase
#record the last skill/item used that hit this battler
alias :th_battle_exp_item_apply :item_apply
def item_apply(user, item)
@last_hit_item = item #can be item or skill
@last_hit_user = user
th_battle_exp_item_apply(user, item)
end
end
class Game_Actor < Game_Battler
attr_reader :battle_exp
alias :th_battle_exp_init_actor :initialize
def initialize(actor_id)
th_battle_exp_init_actor(actor_id)
@battle_exp = 0
end
#changes how exp is received
alias :th_battle_exp_gain_exp :gain_exp
def gain_exp(exp)
exp = get_exp
th_battle_exp_gain_exp(exp)
end
def get_exp
return @battle_exp
end
def gain_battle_exp(exp)
@battle_exp = [@battle_exp + exp, Tsuki::Battle_Exp::Max_Exp].min
end
# e = Game_Enemy
# a = Game_Actor
# r = Game_ActionResult
def eval_hit_exp(e, a, r)
return eval(Tsuki::Battle_Exp::Hit_Exp_Formula)
end
def gain_hit_exp(enemy, result)
gained = eval_hit_exp(enemy, self, result)
p "%s gained %d exp" %[@name, gained]
gain_battle_exp(gained.to_i)
end
# clear battle exp after battle ends
alias :th_battle_exp_battle_end :on_battle_end
def on_battle_end
th_battle_exp_battle_end
@battle_exp = 0
end
end
class Game_Enemy
attr_accessor :last_hit_item
attr_accessor :last_hit_user
alias :th_battle_exp_init_enemy :initialize
def initialize(index, enemy_id)
th_battle_exp_init_enemy(index, enemy_id)
@last_hit_item = nil
@last_hit_user = nil
end
alias :th_battle_exp_enemy_die :die
def die
th_battle_exp_enemy_die
@last_hit_user.gain_battle_exp(enemy.exp) if @last_hit_user.is_a?(Game_Actor)
end
def item_apply(user, item)
super
@last_hit_user.gain_hit_exp(self, @result) if @last_hit_user.is_a?(Game_Actor)
end
end
|
personnellement j'ai trouver comment supprimer le gains des point d'xp a la fin du combat
dans module BattleManager
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
def self.process_victory
play_battle_end_me
replay_bgm_and_bgs
$game_message.add(sprintf(Vocab::Victory, $game_party.name))
#display_exp
gain_gold
gain_drop_items
#gain_exp
SceneManager.return
battle_end(0)
return true
end
|
merci
édité:
Après plusieurs jours, je suis parvenu a faire gagné au groupe de l'xp après les actions, mais pas moyen de faire gagner de l'xp uniquement au personnage qui a fait l'action.
Voici ce que j'ai fait
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
class Game_Enemy
def item_apply(user, item)
@result.clear
@result.used = item_test(user, item)
@result.missed = (@result.used && rand >= item_hit(user, item))
@result.evaded = (!@result.missed && rand < item_eva(user, item))
if @result.hit?
unless item.damage.none?
@result.critical = (rand < item_cri(user, item))
make_damage_value(user, item)
execute_damage(user)
# début de la fonction xp par personnage
if $game_party.in_battle
$game_party.all_members.each do |actor|
actor.gain_exp(enemy.exp)
text = sprintf(Vocab::ObtainExp, enemy.exp)
$game_message.add('\.' + text)
end
end
#fin de la fonction xp par personnage
end
item.effects.each {|effect| item_effect_apply(user, item, effect) }
item_user_effect(user, item)
end
end
end
|
Si vous pouviez me mètre sur une piste svp .
Merci
|