forum rpg maker kingdom
Administrateurs : dante, Ryu
 
 forum rpg maker kingdom  marche central  script 

 adaptation des monstres qu niveau du joueur

Nouveau sujet   Répondre
 
Bas de pagePages : 1 - 2 Page suivante
dante
administrateur
dante
254 messages postés
   Posté le 12-09-2005 à 17:46:00   Voir le profil de dante (Offline)   Répondre à ce message   Envoyer un message privé à dante   

je vous présente un scrîpt unique et inédit : une IA de combat. En fait, ce n'est pas une vrai IA, mais un scrîpt qui permet au monstre de s'adapter aux statuts de l'équipe, au nombre de héros dans l'équipe, etc.
De cette façon, si vous devez revenir à la fin du jeu dans une zone que vous avez visité au début, les monstres se seront adapté et vous ne combatterez pas des pauvres monstres minables à 3 HP !

ATTENTION : ce scrîpt implique de revoir TOUS les monstres que vous avez déjà créé pour votre jeu, car les valeurs de HP, SP, etc. ne sont pas des valeurs réelle, mais des vecteurs d'adaptation.

Voilà les choses qui changeront :
dans la création d'un monstre vous aviez :
PV max
PM max*
Force
Defence*
Agilité *
Intelligence*
Attaque
Def physique
Def magique
Esquive *

Les données qui ont un * devant restent inchangées, vous choisissez ce que vous voulez, elles resteront stables tout au long au jeu.

Maintenant voilà ce que deviennent les autres valeurs :

PV max : c'est le pourcentage de la somme des PV max de l'équipe.

Je m'explique : vous avez 2 héros de PV maximums 450 et 500.
La somme est 950. Si vous mettez 10 dans les champ "PV max" du monstre" ça donnera :
950*10/100 (10% de la somme) = 95

Rien de vous empèche de mettre des grands nombres comme 200% pour un boss, mais je vous préviens : 80% cest déjà du gros monstre dure à battre !

Force : cette fois c'est le pourcentage de la moyenne des forces de l'équipe.
Exemple : 2 héros de forces 30 et 50. Moyenne : 40
Vous placez par exemple 50 dans le champ "Force" du monstre, vous obtenez 40*50/100 = 20

L'attaque, la défence physique et la défence magique fonctionnent sur le même principe que la force, avec une moyenne des données de l'équipe, et non pas une somme comme pour les PVmax.

Maintenant voici le scrîpt, il fonctionne théoriquement avec tous les scripts de combat vu qu'il ne touche qu'à Game_Enemy.

Donc remplacez le scrîpt Game_Enemy par celui ci :


# ■ Game_Enemy
#------------------------------------------------------------------------------
# scrîpt créé par SunMat, les monstres s'adaptent aux données du héro
# #==============================================================================

class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# fonction d'initialisation
#--------------------------------------------------------------------------
def initialize(troop_id, member_index)
super()
@troop_id = troop_id
@member_index = member_index
troop = $data_troops[@troop_id]
@enemy_id = troop.members[@member_index].enemy_id
enemy = $data_enemies[@enemy_id]
@battler_name = enemy.battler_name
@battler_hue = enemy.battler_hue
@hp = maxhp
@sp = maxsp
@hidden = troop.members[@member_index].hidden
@immortal = troop.members[@member_index].immortal
end
#--------------------------------------------------------------------------
# ID
#--------------------------------------------------------------------------
def id
return @enemy_id
end
#--------------------------------------------------------------------------
# Index
#--------------------------------------------------------------------------
def index
return @member_index
end
#--------------------------------------------------------------------------
# Nom du monstre
#--------------------------------------------------------------------------
def name
return $data_enemies[@enemy_id].name
end
#--------------------------------------------------------------------------
# Max Hp = somme des maxHp des héros dans l'équipe
# multiplié par le pourcentage défini
#--------------------------------------------------------------------------
def base_maxhp
hp = $game_actors[1].maxhp
if $game_actors[2].hp != 0
hp += $game_actors[2].maxhp
end
if $game_actors[3].hp != 0
hp += $game_actors[3].maxhp
end
if $game_actors[4].hp != 0
hp += $game_actors[4].maxhp
end
hp *= $data_enemies[@enemy_id].maxhp
hp /= 100
return hp
end
#--------------------------------------------------------------------------
# Max Sp définis dans l'absolue
#--------------------------------------------------------------------------
def base_maxsp
return $data_enemies[@enemy_id].maxsp
end
#--------------------------------------------------------------------------
# Force en fonction du pourcentage de la somme de la force de l'équipe
#--------------------------------------------------------------------------
def base_str
a = 1
frc = $game_actors[1].str
if $game_actors[2].hp != 0
frc += $game_actors[2].str
a +=1
end
if $game_actors[3].hp != 0
frc += $game_actors[3].str
a += 1
end
if $game_actors[4].hp != 0
frc += $game_actors[4].str
a += 1
end
frc *= $data_enemies[@enemy_id].str
frc /= (100*a)
return frc
end
#--------------------------------------------------------------------------
# dextérité définie dans l'absolue
#--------------------------------------------------------------------------
def base_dex
return $data_enemies[@enemy_id].dex
end
#--------------------------------------------------------------------------
# agilité définie dans l'absolue
#--------------------------------------------------------------------------
def base_agi
return $data_enemies[@enemy_id].agi
end
#--------------------------------------------------------------------------
# intelligence définie dans l'absolue
#--------------------------------------------------------------------------
def base_int
return $data_enemies[@enemy_id].int
end
#--------------------------------------------------------------------------
# attaque définie en fonction de l'attaque de l'équipe et du pourcentage
#--------------------------------------------------------------------------
def base_atk
at = $game_actors[1].atk
a = 1
if $game_actors[2].hp != 0
at += $game_actors[2].atk
a += 1
end
if $game_actors[3].hp != 0
at += $game_actors[3].atk
a += 1
end
if $game_actors[4].hp != 0
a += 1
at += $game_actors[4].atk
end
at *= $data_enemies[@enemy_id].atk
at /= (100*a )
return at
end
#--------------------------------------------------------------------------
# défence définie en fonction du pourcentage moyen de la défence de l'équipe
#--------------------------------------------------------------------------
def base_pdef
df = $game_actors[1].pdef
a = 1
if $game_actors[2].hp != 0
df += $game_actors[2].pdef
a += 1
end
if $game_actors[3].hp != 0
df += $game_actors[3].pdef
a += 1
end
if $game_actors[4].hp != 0
df += $game_actors[4].pdef
a += 1
end
df *= $data_enemies[@enemy_id].pdef
df /= (100*a)
return df
end
#--------------------------------------------------------------------------
# défence magique en fonction de la défence de l'équipe
#--------------------------------------------------------------------------
def base_mdef
mdf = $game_actors[1].mdef
a = 1
if $game_actors[2].hp != 0
mdf += $game_actors[2].mdef
a += 1
end
if $game_actors[3].hp != 0
mdf += $game_actors[3].mdef
a += 1
end
if $game_actors[4].hp != 0
mdf += $game_actors[4].mdef
a += 1
end
mdf *= $data_enemies[@enemy_id].mdef
mdf /= (100*a)
return mdf
end
#--------------------------------------------------------------------------
# evasion non changée
#--------------------------------------------------------------------------
def base_eva
return $data_enemies[@enemy_id].eva
end
#--------------------------------------------------------------------------
#animation non changée
#--------------------------------------------------------------------------
def animation1_id
return $data_enemies[@enemy_id].animation1_id
end
#--------------------------------------------------------------------------
# animation non changée
#--------------------------------------------------------------------------
def animation2_id
return $data_enemies[@enemy_id].animation2_id
end
#--------------------------------------------------------------------------
# element_rate non changé
#--------------------------------------------------------------------------
def element_rate(element_id)
# 属性有効度に対応する数値を取得
table = [0,200,150,100,50,0,-100]
result = table[$data_enemies[@enemy_id].element_ranks[element_id]]
# ステートでこの属性が防御されている場合は半減
for i in @states
if $data_states[i].guard_element_set.include?(element_id)
result /= 2
end
end
# メソッド終了
return result
end
#--------------------------------------------------------------------------
# state_rank non changé
#--------------------------------------------------------------------------
def state_ranks
return $data_enemies[@enemy_id].state_ranks
end
#--------------------------------------------------------------------------
#state_guard non changé
#--------------------------------------------------------------------------
def state_guard?(state_id)
return false
end
#--------------------------------------------------------------------------
# element_set non changé
#--------------------------------------------------------------------------
def element_set
return []
end
#--------------------------------------------------------------------------
#
#--------------------------------------------------------------------------
def plus_state_set
return []
end
#--------------------------------------------------------------------------
#
#--------------------------------------------------------------------------
def minus_state_set
return []
end
#--------------------------------------------------------------------------
# action non changé
#--------------------------------------------------------------------------
def actions
return $data_enemies[@enemy_id].actions
end
#--------------------------------------------------------------------------
# expérience donnée par une formule modifiable au gré du Maker
# ici la formule est le produit de l'exp du monstre par le niveau du joueur 1
#--------------------------------------------------------------------------
def exp
expe = $game_actors[1].level * $data_enemies[@enemy_id].exp
return expe
end
#--------------------------------------------------------------------------
# ● ゴールドの取得
#--------------------------------------------------------------------------
def gold
return $data_enemies[@enemy_id].gold
end
#--------------------------------------------------------------------------
# ● アイテム ID の取得
#--------------------------------------------------------------------------
def item_id
return $data_enemies[@enemy_id].item_id
end
#--------------------------------------------------------------------------
# ● 武器 ID の取得
#--------------------------------------------------------------------------
def weapon_id
return $data_enemies[@enemy_id].weapon_id
end
#--------------------------------------------------------------------------
# ● 防具 ID の取得
#--------------------------------------------------------------------------
def armor_id
return $data_enemies[@enemy_id].armor_id
end
#--------------------------------------------------------------------------
# ● トレジャー出現率の取得
#--------------------------------------------------------------------------
def treasure_prob
return $data_enemies[@enemy_id].treasure_prob
end
#--------------------------------------------------------------------------
# ● バトル画面 X 座標の取得
#--------------------------------------------------------------------------
def screen_x
return $data_troops[@troop_id].members[@member_index].x
end
#--------------------------------------------------------------------------
# ● バトル画面 Y 座標の取得
#--------------------------------------------------------------------------
def screen_y
return $data_troops[@troop_id].members[@member_index].y
end
#--------------------------------------------------------------------------
# ● バトル画面 Z 座標の取得
#--------------------------------------------------------------------------
def screen_z
return screen_y
end
#--------------------------------------------------------------------------
#
#--------------------------------------------------------------------------
def escape
# ヒドゥンフラグをセット
@hidden = true
# カレントアクションをクリア
self.current_action.clear
end
#--------------------------------------------------------------------------
#
#--------------------------------------------------------------------------
def transform(enemy_id)
# エネミー ID を変更
@enemy_id = enemy_id
# バトラー グラフィックを変更
@battler_name = $data_enemies[@enemy_id].battler_name
@battler_hue = $data_enemies[@enemy_id].battler_hue
# アクション再作成
make_action
end
#--------------------------------------------------------------------------
#
#--------------------------------------------------------------------------
#scrîpt amélioré par RPG Advocate

def make_action
self.current_action.clear
unless self.movable?
return
end
available_actions = []
rating_max = 0
for action in self.actions
n = $game_temp.battle_turn
a = action.condition_turn_a
b = action.condition_turn_b
if (b == 0 and n != a) or
(b > 0 and (n < 1 or n < a or n % b != a % b))
next
end
if self.hp * 100.0 / self.maxhp > action.condition_hp
next
end
if $game_party.max_level < action.condition_level
next
end
switch_id = action.condition_switch_id
if switch_id > 0 and $game_switches[switch_id] == false
next
end
if exclude_pointless_actions(action)
next
end
available_actions.push(action)
if action.rating > rating_max
rating_max = action.rating
end
end
ratings_total = 0
for action in available_actions
ratings_total += action.rating
end
if ratings_total > 0
choose_action = []
for action in available_actions
for j in 1..action.rating
choose_action.push(action)
end
end
enemy_action = choose_action[rand(choose_action.size - 1)]
self.current_action.kind = enemy_action.kind
self.current_action.basic = enemy_action.basic
self.current_action.skill_id = enemy_action.skill_id
self.current_action.decide_random_target_for_enemy
end
end
# --------------------------------
def exclude_pointless_actions(action)
if action.kind == 0
return false
end
if action.kind == 1
s = action.skill_id
if self.sp < $data_skills[s].sp_cost
return true
end
if $data_skills[s].common_event_id > 0
return false
end
if $data_skills[s].scope == 0 || $data_skills[s].scope == 1 ||
$data_skills[s].scope == 2
return false
end
if $data_skills[s].scope == 3 || $data_skills[s].scope == 4
if $game_troop != nil
fullhpflag = true
statusflag = true
for i in $game_troop.enemies
if i.hp < i.maxhp && i.exist?
fullhpflag = false
end
for j in $data_skills[s].plus_state_set
if not i.state?(j) && i.exist?
statusflag = false
end
end
for j in $data_skills[s].minus_state_set
if i.state?(j) && i.exist?
statusflag = false
end
end
end
end
if $data_skills[s].power == 0 && statusflag
return true
end
if $data_skills[s].power < 0 && statusflag && fullhpflag
return true
end
end
if $data_skills[s].scope == 5 || $data_skills[s].scope == 6
nonedeadflag = true
if $game_troop != nil
for i in $game_troop.enemies
if i.dead? and not i.hidden
nonedeadflag = false
end
end
end
if nonedeadflag
return true
end
end
if $data_skills[s].scope == 7
if $game_troop != nil
fullhpflag = true
statusflag = true
if self.hp < self.maxhp
fullhpflag = false
end
for j in $data_skills[s].plus_state_set
if not self.state?(j)
statusflag = false
end
end
for j in $data_skills[s].minus_state_set
if self.state?(j)
statusflag = false
end
end
end
if $data_skills[s].power == 0 && statusflag
return true
end
if $data_skills[s].power < 0 && statusflag && fullhpflag
return true
end
end
end
return false
end
end


Précision : pour l'expérience donnée par le monstre, elle est égale au produit de l'expérience que vous avez inscrit dans le champs "expérience" du monstre, et du niveau du héro n°1 (uniquement).
Mais cette relation est modifiables, si elle ne vous plait pas demandez
moi je vous la modifierai.
Exemple : un héro de level 34 combat un monstre censé donne 10 en exp, ça donne un total de 10*34 = 340 pts d'expérience.

Ne mettez donc pas de trop grand nombre, de toute façon, puisqu'il s'adapte :
au niveau 1 : le héro tue le monstre et gagne 10 pts
au niveau 34 : le héro tu le monstre et gagne 340 pts
ça parait normal, puisque plus le niveau monte, plus il faut de points pour passer au suivant.

Message édité le 14-09-2005 à 11:08:07 par dante
myk22
espion
myk22
136 messages postés
   Posté le 12-09-2005 à 18:06:32   Voir le profil de myk22 (Offline)   Répondre à ce message   http://createurderpg.forumactif.com   Envoyer un message privé à myk22   

comme d'hab je pige rien :s
dante
administrateur
dante
254 messages postés
   Posté le 12-09-2005 à 18:11:41   Voir le profil de dante (Offline)   Répondre à ce message   Envoyer un message privé à dante   

c'est pas grave question d'habitude
myk22
espion
myk22
136 messages postés
   Posté le 12-09-2005 à 18:13:33   Voir le profil de myk22 (Offline)   Répondre à ce message   http://createurderpg.forumactif.com   Envoyer un message privé à myk22   

:'( celkui la ma l'air mega dur
dante
administrateur
dante
254 messages postés
   Posté le 12-09-2005 à 18:26:07   Voir le profil de dante (Offline)   Répondre à ce message   Envoyer un message privé à dante   

pas dutout
myk22
espion
myk22
136 messages postés
   Posté le 12-09-2005 à 18:28:22   Voir le profil de myk22 (Offline)   Répondre à ce message   http://createurderpg.forumactif.com   Envoyer un message privé à myk22   

tout de facon sont tous hard
dante
administrateur
dante
254 messages postés
   Posté le 12-09-2005 à 18:39:57   Voir le profil de dante (Offline)   Répondre à ce message   Envoyer un message privé à dante   

non il suffit de s y mettre c'est tout
myk22
espion
myk22
136 messages postés
   Posté le 12-09-2005 à 18:50:37   Voir le profil de myk22 (Offline)   Répondre à ce message   http://createurderpg.forumactif.com   Envoyer un message privé à myk22   

veut apprendre
zelda mythologie
espion
zelda mythologie
142 messages postés
   Posté le 12-09-2005 à 18:51:25   Voir le profil de zelda mythologie (Offline)   Répondre à ce message   Envoyer un message privé à zelda mythologie   

c'est bien ce script, ca fait FF8
myk22
espion
myk22
136 messages postés
   Posté le 12-09-2005 à 18:52:49   Voir le profil de myk22 (Offline)   Répondre à ce message   http://createurderpg.forumactif.com   Envoyer un message privé à myk22   

moi j'ai un script pour faire suivre les personnage de l'equipe quand y marche si ca vous interrese je le metr dan,s un topic
zelda mythologie
espion
zelda mythologie
142 messages postés
   Posté le 12-09-2005 à 18:56:15   Voir le profil de zelda mythologie (Offline)   Répondre à ce message   Envoyer un message privé à zelda mythologie   

moi aussi je l'ai il est bien aussi
Ryu
administrateur
Ryu
264 messages postés
   Posté le 13-09-2005 à 12:36:19   Voir le profil de Ryu (Offline)   Répondre à ce message   Envoyer un message privé à Ryu   

oui, mais quand ça attaint 12 personage, le 13ème (et +) bug...
zelda mythologie
espion
zelda mythologie
142 messages postés
   Posté le 13-09-2005 à 15:06:41   Voir le profil de zelda mythologie (Offline)   Répondre à ce message   Envoyer un message privé à zelda mythologie   

ben c'est que le max c'est 12. tu sais, ce logiciel ne peut pas forcément lire une infinité de données
dante
administrateur
dante
254 messages postés
   Posté le 13-09-2005 à 16:24:33   Voir le profil de dante (Offline)   Répondre à ce message   Envoyer un message privé à dante   

oui et en plus 12 c'est deja pas mal comme nombre de perso
Ryu
administrateur
Ryu
264 messages postés
   Posté le 13-09-2005 à 17:32:13   Voir le profil de Ryu (Offline)   Répondre à ce message   Envoyer un message privé à Ryu   

j'en ais 16 pour mon jeux
myk22
espion
myk22
136 messages postés
   Posté le 13-09-2005 à 18:15:13   Voir le profil de myk22 (Offline)   Répondre à ce message   http://createurderpg.forumactif.com   Envoyer un message privé à myk22   

lol ca va pouvoir devenir un jeu de combat
dante
administrateur
dante
254 messages postés
   Posté le 13-09-2005 à 19:45:34   Voir le profil de dante (Offline)   Répondre à ce message   Envoyer un message privé à dante   

oui ca c'est sur
zelda mythologie
espion
zelda mythologie
142 messages postés
   Posté le 14-09-2005 à 08:28:03   Voir le profil de zelda mythologie (Offline)   Répondre à ce message   Envoyer un message privé à zelda mythologie   

tu peux rajouter une option "changer perso" .
dante
administrateur
dante
254 messages postés
   Posté le 14-09-2005 à 11:08:27   Voir le profil de dante (Offline)   Répondre à ce message   Envoyer un message privé à dante   

oui c'est faisable
Ryu
administrateur
Ryu
264 messages postés
   Posté le 14-09-2005 à 12:51:04   Voir le profil de Ryu (Offline)   Répondre à ce message   Envoyer un message privé à Ryu   

ce que tu veux dire par "changer personnage", c'est un événement qui enléve un de l'équipe pour en mettre un autre à la place (un perso qui se repose par exemple), c'est ça ?
dante
administrateur
dante
254 messages postés
   Posté le 14-09-2005 à 16:07:56   Voir le profil de dante (Offline)   Répondre à ce message   Envoyer un message privé à dante   

dans un rpg de guerre si tu joue avec un perso tu peux le changer dans le menu si il est presque mort ou kk chose comme ca
zelda mythologie
espion
zelda mythologie
142 messages postés
   Posté le 14-09-2005 à 17:28:52   Voir le profil de zelda mythologie (Offline)   Répondre à ce message   Envoyer un message privé à zelda mythologie   

oui mon idée c'est plutôt l'évenement
dante
administrateur
dante
254 messages postés
   Posté le 15-09-2005 à 00:27:31   Voir le profil de dante (Offline)   Répondre à ce message   Envoyer un message privé à dante   

oui l'evenement
zelda mythologie
espion
zelda mythologie
142 messages postés
   Posté le 15-09-2005 à 10:39:40   Voir le profil de zelda mythologie (Offline)   Répondre à ce message   Envoyer un message privé à zelda mythologie   

en evenement comun avec l'appuye dune touche par exemple
dante
administrateur
dante
254 messages postés
   Posté le 15-09-2005 à 11:16:24   Voir le profil de dante (Offline)   Répondre à ce message   Envoyer un message privé à dante   

oui c'est possible mais le mieux c'est dans le menu il est pas mal non plus dans le menu
Haut de pagePages : 1 - 2 Page suivante
 
 forum rpg maker kingdom  marche central  script  adaptation des monstres qu niveau du joueurNouveau sujet   Répondre
 
Identification rapide :         
 
Divers
Imprimer ce sujet
Aller à :   
 
créer forum