Partagez
Aller en bas
dricc
dricc
Membre

Nombre de messages : 2757
Localisation : Lille
Distinction : Altruiste - Incarnation de la Patience [Mist']
Date d'inscription : 10/08/2009

GTBS 1.5 Add on : Area bonus Empty GTBS 1.5 Add on : Area bonus

le Lun 17 Mai 2010 - 11:56
Nom du script : Bonus de zone , Add_on du GTBS V1.5
Auteur : dricc .
Version actuelle : 0.1

Pour expliquer ce que fait ce script simplement , regardez cette image :

GTBS 1.5 Add on : Area bonus Gtbs_a10

Vous voyez les zones "RANGE+2" ? Eh bien , dans cette zone , les arcs et sorts auront une portée améliorée de 2 (la portée min reste inchangée).
C'est le nom de la zone qui determine l'effet .

Les options disponibles :
RANGE : augmente la portée des arcs/sorts
%RANGE : augment la portée des arcs/sorts (+100% signifie portée doublée)
ATK : Augmente l'attaque
%ATK: Augmente l'attaque en %
DEF : Augmente la défense
%DEF : Augmente la défense en %
SPI : Augmente l'intelligence
%SPI : Augmente l'intelligence en %
INT : Meme chose que SPI
%INT : Meme chose que %SPI
AGI : Augmente l'agilité
%AGI : Augmente l'agilité en %
ENEMY : Augemente les 4 carctéristiques des ennemis en %
EXP : Augmente l'expérience gagné en %
INVICIBLE : Mode Immortel (En fait , le heros/ennemi ne descend pas en dessous de 1PV)

A chaque fois , vous pouvez ajouter + ou - suivi d'un nombre (9999 max)

Important :
- Les effets sont cumulatifs .
- Les effets sont valables aussi sur les ennemis (sauf indications contraires) .
- Les effets ne sont pas visibles à l'écran , mais si vous utilisez l'ecran "statut" , vous pouvez en voir certain (les 4 caractéritiques) .
- Ne fonctionne pas avec le GTS V1.4
- Il n'est pas garanti que ça marche avec un autre add-on du GTBS .

Spoiler:

# ** GTBS area bonus !!!
# par dricc
# Attention , ce script risque de ne pas supporter un autre add-on du GTBS


#==============================================================================
# ** Game_Battler (GTBS)
#------------------------------------------------------------------------------
# This class deals with battlers. It's used as a superclass for the Game_Actor
# and Game_Enemy classes.
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# * Determine if in Area
# area : Area data (RPG::Area)
#--------------------------------------------------------------------------
def in_area?(area,x,y)
return false if area == nil
return false if $game_map.map_id != area.map_id
return false if x < area.rect.x
return false if y < area.rect.y
return false if x >= area.rect.x + area.rect.width
return false if y >= area.rect.y + area.rect.height
return true
end

def weapon_bonus
curr_area = nil
bonus_temp = 0
for area in $data_areas.values
if in_area?(area,x,y)
if area.name[0,5] == "RANGE" then
bonus_temp += area.name[6,4].to_i if area.name[5,1] == "+"
bonus_temp -= area.name[6,4].to_i if area.name[5,1] == "-"
end
end
end
return bonus_temp
end

def pct_weapon_bonus
curr_area = nil
bonus_temp = 0
for area in $data_areas.values
if in_area?(area,x,y)
if area.name[0,6] == "%RANGE" then
bonus_temp += area.name[7,4].to_i if area.name[6,1] == "+"
bonus_temp -= area.name[7,4].to_i if area.name[6,1] == "-"
end
end
end
return bonus_temp
end

def atk_bonus
curr_area = nil
bonus_temp = 0
for area in $data_areas.values
if in_area?(area,x,y)
if area.name[0,3] == "ATK" then
bonus_temp += area.name[4,4].to_i if area.name[3,1] == "+"
bonus_temp -= area.name[4,4].to_i if area.name[3,1] == "-"
end
end
end
return bonus_temp
end

def pct_atk_bonus
curr_area = nil
bonus_temp = 0
for area in $data_areas.values
if in_area?(area,x,y)
if area.name[0,4] == "%ATK" then
bonus_temp += area.name[5,4].to_i if area.name[4,1] == "+"
bonus_temp -= area.name[5,4].to_i if area.name[4,1] == "-"
end
end
end
return bonus_temp
end

def def_bonus
curr_area = nil
bonus_temp = 0
for area in $data_areas.values
if in_area?(area,x,y)
if area.name[0,3] == "DEF" then
bonus_temp += area.name[4,4].to_i if area.name[3,1] == "+"
bonus_temp -= area.name[4,4].to_i if area.name[3,1] == "-"
end
end
end
return bonus_temp
end

def pct_def_bonus
curr_area = nil
bonus_temp = 0
for area in $data_areas.values
if in_area?(area,x,y)
if area.name[0,4] == "%DEF" then
bonus_temp += area.name[5,4].to_i if area.name[4,1] == "+"
bonus_temp -= area.name[5,4].to_i if area.name[4,1] == "-"
end
end
end
return bonus_temp
end

def spi_bonus
curr_area = nil
bonus_temp = 0
for area in $data_areas.values
if in_area?(area,x,y)
if area.name[0,3] == "SPI" or area.name[0,3] == "INT" then
bonus_temp += area.name[4,4].to_i if area.name[3,1] == "+"
bonus_temp -= area.name[4,4].to_i if area.name[3,1] == "-"
end
end
end
return bonus_temp
end

def pct_spi_bonus
curr_area = nil
bonus_temp = 0
for area in $data_areas.values
if in_area?(area,x,y)
if area.name[0,4] == "%SPI" or area.name[0,4] == "%INT" then
bonus_temp += area.name[5,4].to_i if area.name[4,1] == "+"
bonus_temp -= area.name[5,4].to_i if area.name[4,1] == "-"
end
end
end
return bonus_temp
end

def agi_bonus
curr_area = nil
bonus_temp = 0
for area in $data_areas.values
if in_area?(area,x,y)
if area.name[0,3] == "AGI" then
bonus_temp += area.name[4,4].to_i if area.name[3,1] == "+"
bonus_temp -= area.name[4,4].to_i if area.name[3,1] == "-"
end
end
end
return bonus_temp
end

def pct_agi_bonus
curr_area = nil
bonus_temp = 0
for area in $data_areas.values
if in_area?(area,x,y)
if area.name[0,4] == "%AGI" then
bonus_temp += area.name[5,4].to_i if area.name[4,1] == "+"
bonus_temp -= area.name[5,4].to_i if area.name[4,1] == "-"
end
end
end
return bonus_temp
end

def pct_enemy_bonus
curr_area = nil
bonus_temp = 0
for area in $data_areas.values
if in_area?(area,x,y)
if area.name[0,5] == "ENEMY" then
bonus_temp += area.name[6,4].to_i if area.name[5,1] == "+"
bonus_temp -= area.name[6,4].to_i if area.name[5,1] == "-"
end
end
end
return bonus_temp
end

def pct_exp_bonus
curr_area = nil
bonus_temp = 0
for area in $data_areas.values
if in_area?(area,x,y)
if area.name[0,3] == "EXP" then
bonus_temp += area.name[4,4].to_i if area.name[3,1] == "+"
bonus_temp -= area.name[4,4].to_i if area.name[3,1] == "-"
end
end
end
return bonus_temp
end

def invic_bonus
curr_area = nil
bonus_temp = 0
for area in $data_areas.values
if in_area?(area,x,y)
return true if area.name == "INVICIBLE"
end
end
return false
end
#--------------------------------------------------------------------------
# * Change HP
# hp : new HP
#--------------------------------------------------------------------------
def hp=(hp)
@hp = [[hp, maxhp].min, 0].max
if @hp <= 0 and invic_bonus
@hp=1
end
if @hp == 0 and not state?(1) and not @immortal
add_state(1) # Add incapacitated (state #1)
@added_states.push(1)
elsif @hp > 0 and state?(1)
remove_state(1) # Remove incapacitated (state #1)
@removed_states.push(1)
end
end
end

#--------------------------------------------------------------------------
# Game Enemy - Updates for GTBS
#--------------------------------------------------------------------------
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# returns weapon range based on enemy_id
#--------------------------------------------------------------------------
def weapon_range
range_temp = GTBS.w_range(@weapon_id)
range_temp[0]+=weapon_bonus if range_temp[2]
return range_temp
end
#--------------------------------------------------------------------------
# returns move range based on enemy_id
#--------------------------------------------------------------------------
def base_move_range
return GTBS::enemy_move(@enemy_id)
end

alias dricc_level level
def level
return dricc_level + (dricc_level*pct_exp_bonus/100)
end
#--------------------------------------------------------------------------
# * Get Basic Attack
#--------------------------------------------------------------------------
alias dricc_base_atk base_atk
def base_atk
return (dricc_base_atk+atk_bonus) + ((dricc_base_atk+atk_bonus)*(pct_atk_bonus+pct_enemy_bonus)/100)
end
alias dricc_base_atk base_def
def base_def
return (dricc_base_def+def_bonus) + ((dricc_base_def+def_bonus)*(pct_def_bonus+pct_enemy_bonus)/100)
end
alias dricc_base_spi base_spi
def base_def
return (dricc_base_spi+spi_bonus) + ((dricc_base_spi+spi_bonus)*(pct_spi_bonus+pct_enemy_bonus)/100)
end
alias dricc_base_agi base_agi
def base_def
return (dricc_base_agi+agi_bonus) + ((dricc_base_agi+agi_bonus)*(pct_agi_bonus+pct_enemy_bonus)/100)
end
end

#--------------------------------------------------------------------------
# Game Actor - Updates for GTBS
#--------------------------------------------------------------------------
class Game_Actor < Game_Battler

#--------------------------------------------------------------------------
# Determine weapon range based on id
#--------------------------------------------------------------------------
def weapon_range
if GTBS::USING_ENHANCED_WEAPONS
weapon = $data_weapons[@weapon_id]
if weapon.is_a?(Enhanced_Weapon)
return GTBS.w_range(weapon.ref_id)
else
return GTBS.w_range(@weapon_id)
end
end
range_temp = GTBS.w_range(@weapon_id)
range_temp[0]+=weapon_bonus if range_temp[2]
range_temp[0]+=pct_weapon_bonus/100*range_temp[0] if range_temp[2]
return range_temp
end
#--------------------------------------------------------------------------
# On modifie les caracs de base
#--------------------------------------------------------------------------
alias dricc_base_atk base_atk
def base_atk
return (dricc_base_atk+atk_bonus) + ((dricc_base_atk+atk_bonus)*pct_atk_bonus/100)
end
alias dricc_base_def base_def
def base_def
return (dricc_base_def+def_bonus) + ((dricc_base_def+def_bonus)*pct_def_bonus/100)
end
alias dricc_base_spi base_spi
def base_def
return (dricc_base_spi+spi_bonus) + ((dricc_base_spi+spi_bonus)*pct_spi_bonus/100)
end
alias dricc_base_agi base_agi
def base_def
return (dricc_base_agi+agi_bonus) + ((dricc_base_agi+agi_bonus)*pct_agi_bonus/100)
end
#--------------------------------------------------------------------------
# * Base Move Range - Returns the move range for the actor based on the class
#--------------------------------------------------------------------------
def base_move_range
move = GTBS.move_range(@class_id)
# Get Equipment Move Modifiers
if GTBS::USING_MULTISLOT
for i in 0...self.armor_slots.size
arm = self.armor_ids[i]
move += GTBS.equip_move_info(arm) if arm != nil and arm > 0
end
for i in 0...self.weapon_slots.size
wep = self.weapon_ids[i]
move += GTBS.weapon_move_info(wep) if wep != nil and wep > 0
end
else
for i in 1..4
arm = eval("self.armor#{i}_id")
move += GTBS.equip_move_info(arm) if arm != nil and arm > 0
end
# modif dricc : on sort ça du for
move += GTBS.weapon_move_info(@weapon_id) if @weapon_id != nil and @weapon_id > 0
end
# Get State Modifiers
for state_id in @states
move += GTBS.state_move_info(state_id)
end
if move < 0
move = 0
end
return move
end
end

A suivre :
- Mettre au propre le code (manque des alias en particulier pour améliorer la compatibilité) .
- Etudier la possibilité d'un effet visuel (dur mais pas impossible) .
- Ajouter d'autres options . J'ai déja qq idées : DEFBOW et DEFARC pour augmenter la défense contre les attaques à distances . CLONE : un clone ennemi peux apparaitre (façon disgaea) . TELEPORT : peux transporter vers une autre case TELEPORT . NOSKILL : on ne peux pas utiliser de magie ou aptitude . %DEGAT : on prend un % de dégat à chaque tour .
- Correction de bugs eventuels .

Crédits : dricc , mais il vous suffit de mettre le script dans votre projet sans couper le début ... Gubid aussi bien sur mais lui vous devez déja l'avoir .

C'est qu'une version beta pour le moment . Pas de démo pour le moment , cela viendra avec un jeu complet incluant le GTBS traduit .

EDIT : je viens de me rendre compte que j'avais "oublié " de coder le bonus de portée pour les sorts . Je fais ça en priorité .
dricc
dricc
Membre

Nombre de messages : 2757
Localisation : Lille
Distinction : Altruiste - Incarnation de la Patience [Mist']
Date d'inscription : 10/08/2009

GTBS 1.5 Add on : Area bonus Empty Re: GTBS 1.5 Add on : Area bonus

le Mer 26 Mai 2010 - 10:42
Bon , bon , j'ai un soucis .

Je vous explique : ce cher Gubid a fait certes un gros boulot avec son GTBS mais il a aussi travaillé comme un cochon !
Resultat : pas moyen d'obtenir le bonus de portée des sorts ou ajouter une fenetre d'affichage sans modifier en profondeur le GTBS (j'ai fait , ça marche) .

Ce n'est donc plus un script mais un GTBS "spécial" complet que je fournirais .

Pour montrer que ça avance :
GTBS 1.5 Add on : Area bonus Image_10

Les couleurs vertes et rouges correspondent à des bonus mais ce n'est que du mapping , la couleur ne se met pas automatiquement .
Par contre le bonus est réél et s'affiche vraiment en dessous des coordonnées au bon endroit .

Autre chose : je me suis aperçu que le bonus "INVINCIBLE" ne peux etre utilisé sur une carte que si on est capable d'une façon ou d'un autre de bouger un adversaire . Faut que j'étudie comment faire ça . L'idéal serait le "porter" façon disgaea .
Anonymous
Invité
Invité

GTBS 1.5 Add on : Area bonus Empty Re: GTBS 1.5 Add on : Area bonus

le Mer 26 Mai 2010 - 14:07
Ah, il est dommage que tu ai rencontrés ces problèmes.
En attendant, ce script est passé au travers, et je ne l'avait pas moi-même vu, mais c'est du très bon boulot.
Bien que mon projet actuel n'utilise pas e GTBS, celui est pour moi un très bon script, et avec tous ces add-on, il y a vraiment de quoi faire un système de combat très poussé et original
dricc
dricc
Membre

Nombre de messages : 2757
Localisation : Lille
Distinction : Altruiste - Incarnation de la Patience [Mist']
Date d'inscription : 10/08/2009

GTBS 1.5 Add on : Area bonus Empty Re: GTBS 1.5 Add on : Area bonus

le Jeu 27 Mai 2010 - 12:55
Ben oui , si GubiD avait mieux codé , mon script aurait pu etre totalement indépendant . tant pis , je ne renonce pas pour autant , ce sera jusque plus compliqué .

Ces bonus que je propose apportent un vrai plus au GTBS . ça a l'air de rien mais ça ajoute une dimension tactique supplémentaire qui rend les combats plus interessants . Et pour une fois , c'est pas compliqué à mettre en place .

a propos , sachez que l'adversaire ignore royalement les cases bien qu'ils profitent aussi du bonus . C'est déja le cas dans disgaea qui est mon modele .

Je suis en train de coder le "NOSKILL" qui emepche d'utiliser les capacités de classe . C'est une vraie galere aussi ... et toujours à cause du code de GubiD . Mais ça vient bon , ça marche pour les acteurs plus qu'a le faire pour les ennemis .

Et je suis toujours à la recherche de l'idée géniale qui me permettrais d'afficher le rouge et le vert transparents sans mapping . Si je trouve , je serais en mesure de faire une distribution aléatoire des bonus sur une carte .
ZangtherOld
ZangtherOld
Membre

Nombre de messages : 1711
Date d'inscription : 07/08/2009

GTBS 1.5 Add on : Area bonus Empty Re: GTBS 1.5 Add on : Area bonus

le Jeu 27 Mai 2010 - 13:29
Du très bon travail, comme tes autres scripts après tout ^^

Dommage, je n'utilise pas le GTBS mais je sais que ça aidera beaucoup les autres.


Bonne chance pour ta customisation ( et essaye de faire gaffe à ne pas faire une version pas compatible avec les autres add-on GBTS ) ^^

PS : Je vais peut être dire une connerie mais tu peux pas afficher un bitmap tout rouge et transparent directement au lieu de passe sur du mapping ?
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum