Partagez
Aller en bas
Horowitz
Horowitz
Membre

Nombre de messages : 52
Age : 72
Distinction : aucune
Date d'inscription : 07/12/2014

Système d'interactions sociales Empty Système d'interactions sociales

le Sam 27 Déc 2014 - 8:04
Salut,

Je vous envoie une requête de script bien spéciale, pour mon jeu de simulation de vie RPG.
J’ai besoin d’un système d’interaction sociale comme les Sims, pour que le jeu permette une vraie sensation de réalisme. Sachez que je suis purement conscient de la complexité d’un tel script, donc n’hésitez pas à vous faire aider si vous avez un problème ^^

1. Relations avec les autres PNJ
Il faudrait évidemment un système de relations (Connaissance, Copain, Ami, Conjoint…) pour chaque PNJ du jeu. Chaque PNJ doit être purement unique, du moins il faut qu’il puisse se différencier des autres par son propre caractère. C’est-à-dire donc qu’il réagisse différemment des autres en fonction de ce qu’on lui demande. Le truc est qu’il faudrait que les PNJ aient une réaction assez différente en fonction de leur caractère ; heureusement j’ai des notions en programmation donc je vais être plus clair pour vous ^^

Il suffirait de coder une longue liste de catégories de caractères exclusivement destinés aux PNJ ; il suffirait ensuite de configurer (par exemple via le bloc « Script ») l’event représentant le PNJ qu’on veut pour intégrer celui-ci dans une catégorie de caractère. Je n’oblige pas les scripteurs à faire eux-même la liste, je m’en occuperais moi-même ! (voir fin de liste)

Les plus amateurs pourraient me dire de le faire par évènement, ce qui paraît largement possible à l’œil nu. Sauf que… ce n’est pas possible. Le seul moyen pour faire un système de ce genre par évènements est de créer un groupe d’interrupteurs pour chaque PNJ, à moins que vous aimiez créer à la suite 10000 interrupteurs), et que je choisis de transformer un des PNJ en un de mes pires ennemis… en fait ce n’est pas seulement lui que je risque de me mettre sur le dos, mais 98% des PNJ du jeu ^^’

2. Relations sociales et verbales
Deuxièmement, il faut qu’une fois l’event déclenché, les diverses catégories d’actions sociales s’affichent pour permettre au joueur de choisir de faire ce qu’il veut. Vous devez certainement connaître ces catégories, au moins un minimum : Parler, Romantique, Violence et tout le bazar avec. Si vous n’y connaissez rien, il suffit simplement de trouver quelques screens sur Google qui vous mettront sur le droit chemin. Smile

Il faut que ça puisse aussi avoir une influence sur les relations avec le PNJ comme un peu un système de points (ex. tu le frappes : -20 en sympathie pour toi), parce que sinon ça va paraître un peu étrange. (ex. humoristique : tu le frappes, lui fais la pire face déformée du monde et l’envoie à l’hôpital pendant 3 mois, il te dit « bonjour monsieur, belle journée n’est-ce pas ? » ou « Joueur, veux-tu m’épouser ? »…)

3. Système de survie… pour les PNJ !
C’est la partie la plus longue du topic, car c’est un truc très important qui va permettre au réalisme vraiment d’être mis en avant. Mon projet a justement pour but de permettre une liberté quasi-totale ; si le joueur veut tuer un PNJ parce qu’il a une dent contre lui, je veux qu’il puisse le faire mourir de faim, soif, d’empoisonnement ou même de sommeil. (ex. il fait de la batterie à minuit (le joueur), il faut que le PNJ aille toquer à sa porte pour lui demander d’arrêter, sinon sa barre de sommeil va diminuer.)

En fait, je veux que le PNJ soit indépendant. Pas trop, mais assez pour rendre le jeu réaliste.
Le PNJ doit savoir sortir de la maison (excuse pour pouvoir le rencontrer dans les rues, sinon c’est plus trop simulation de vie mais simulation de solitude Système d'interactions sociales 844836) pour aller se chercher de quoi boire ou manger à la boutique du coin ou pour aller travailler.

Je pense que vous pouvez imaginer ce que je veux.

4. Un script personnalisable à 100%
S’il vous plaît, dernier supplice, dernière exigence, un script personnalisable. C’est justement d’ailleurs pour ne pas avoir besoin à refaire un topic sur ce script que je demande ça ; je veux comme dit plus haut pouvoir faire la liste des catégories de caractères (si je demandais aux scripteurs de le faire en plus, on serait pas sortis de l’auberge)

Voilà, je ne pense pas avoir plus de choses à dire, merci à ceux qui auront la gentillesse de faire ce script apparemment très complexe !

EDIT : Je crois que je fais un bide interplanétaire.
reveurduciel
reveurduciel
Membre

Nombre de messages : 197
Date d'inscription : 18/12/2014

Système d'interactions sociales Empty Re: Système d'interactions sociales

le Mar 6 Jan 2015 - 5:13
Bonjour, comme personne n'a encore répondu, je vais tenter une réponse (je ne suis pas scripteur).

En fait pour mon jeu, je fais sensiblement ce que tu veux faire, mais avec des variables (et non des interrupteur). La question que je me pose, c'est : pour faire ce que tu veux, il faudrait :

1- que les npcs soient des instances d'une classe NPC
2- qu'ils soit possible d'accéder aux propriétés de ce npc, puisqu'à la base quand on le créé on ne connait que son numéro d'évent dans la map, on n'a pas son "adresse".

Avec ces deux conditions, il serait possible de créer trois variables numérique (amitié, faim, soif) et deux variables booléenne (amour, mort) pour chaque npc. Les interactions pourraient se faire plus facilement à l'aide d'event qui modifieraient ces variables.

Maintenant, en fouillant un peu, on découvre que les NPC sont des instances de la classe Event (donc qu'ils sont la mêem chose qu'un coffre, ce qui est logique finalement). Sachant cela, il est possible de leur créer les 5 variables nécessaires, la seule chose qui manque, c'est l’interaction entre le joueur et les npc. Et c'est tout ce qui manque: comment obtient t'on l'ID de l'event pour le modifier ?




Vincent, si tu passe par ici, j'ai repris ton script :

Spoiler:

Code:
module NPC_Love
    
      #Pour ajouter des competence ajouter des nom comme ça a la suite :
      # :NAME => VALEUR_BASE,
      #Supprimer la virgule pour le dernier de la liste
      #Ne pas oublier les : avant le nom
    
      #Liste des competence a ajouter
      COMPETENCE_SUP = { #<= ne pas supprimer
    
      :amitie => 0,
      :faim => 100,
      :soif => 100
    
      }#<= ne pas supprimer
    
    
      # Appel de script pour modifier ou lire les valeur :
    
      # Pour lire :
      # $game_actors[ID].value?(NAME)
      #
      # ID est l'ID du perso (commence a 1) , NAME est le nom de la
      # competence tel quelle est dans le tableaux ci-dessus
      # ex :
      # $game_actors[1].value?(:bluff)
      # Retourne la valeur du bluff du perso
    
      #Pour modifier la variable :
      # $game_actors[ID].set_value(NAME,VALUE)
      #
      # ID est l'ID du perso (commence a 1) , NAME est le nom de la
      # competence tel quelle est dans le tableaux ci-dessus et VALUE
      # est la valeur a assigner
      # ex :
      # $game_actors[1].set_value(:bluff,30)
      # Assigne 30 a la valeur du bluff du perso
    
    end
    class Game_Event
    
      alias initialize_new_comp initialize
      def initialize(map_id, event)
        initialize_new_comp(map_id, event)
        @comp_supl = NPC_Love::COMPETENCE_SUP
      end
    
      def value?(name)
        @comp_supl[name]
      end
      
      def amitie()
        @comp_supl[amitie]
      end
      
      def set_value(key,value)
        @comp_supl[key] = value
      end
    
    end


Puis je tente d'appeler :

Spoiler:

Code:
event = $game_map.events[event_id]
aaa = event.value?(:amitie)
bbb = aaa.to_s
msgbox(A)


Pourquoi ça marche pas ? Crying or Very sad
vincent26
vincent26
Membre

Nombre de messages : 766
Age : 24
Localisation : baume de transit le village paumé
Distinction : aucune
Date d'inscription : 17/08/2010

Système d'interactions sociales Empty Re: Système d'interactions sociales

le Mar 6 Jan 2015 - 12:48
Salut je suis désoler de te dire ça mais faire un script tel que tu le demande est juste impossible et même si ça l'était il y aurait tellement de chose a faire que le jeu ne pourrait plus tourner ^^

On peut quand même ce limiter a quelque petit truc et ne pas partir trop loin (la programmation d'une ia pour chaque perso différent XD)

a la limite le mouvement et la gestion du déplacement des event tu peut le faire en event c'est faisable (et je te dis ça sans utiliser des variable et tout un bordel a coter)

Sinon pour le systeme de point pour les PNJ ya pas de soucis ^^

Reveurduciel => dans ta modification du script la def amitie il faut mettre ça :
@comp_supl[:amitie]  et non ça :
@comp_supl[amitie]

et cette def et inutile ^^ car cela est compris dans value?(name)

après pour ton appel de script :
msgbox(A) "A" n'existe pas il faut mettre ça msgbox(bbb)

Bon après je peut te faire un script Spécial pour les PNJ pour t'aider comme ça on differencie les event fixe (coffre TP et autre) des pnj

EDIT :

Tient voila une base tu peut déjà faire quelque truc (petite démo Smile ) :

J'ai oublier de préciser dans le script qu'il faut que le nom de tes event soit comme ça :


ou TYPE est le type de ton pnj (exemple normal dans la démo)

https://onedrive.live.com/redir?resid=923E0755996810EA!4570&authkey=!AAlVVYdfmqSIsSc&ithint=file%2cexe

voila le script seul :
Code:

module NPC_PARAM
   
  #Les PNJ sur la carte doivent voir un nom comme celui-ci :
  # <PNJ = TYPE>
  #
  # TYPE est le caractere du PNJ
 
  # ex : <PNJ = normal>
 
  #Pour ajouter des Caracetere ajouter des nom comme ça a la suite :
  # :CARACTERE_NAME => {
  #  :CARACTERISTIQUE1 => VALEUR_BASE,
  #  :CARACTERISTIQUE2 => VALEUR_BASE,
  #  :CARACTERISTIQUE3 => VALEUR_BASE
  # },
  #Supprimer la virgule pour le dernier de la liste des caracteristique
  #et des caractere
  #Ne pas oublier les : avant le nom
 
  #Liste des caractere possible de personnage
  CARACTERE = { #<= ne pas supprimer
   
    :normal => { #<= caractere 1
      :vie => 100,#<= parametre 1
      :amitie => 50,#<= parametre 2
      :faim => 100,#<= parametre 3
      :soif => 100#<= dernier parametre (pas de virgule)
    },#<= fin caractere 1
   
    :agressif => {#<= dernier caractere
      :vie => 80,
      :amitie => 10,
      :faim => 50,
      :soif => 50
    }#<= fin dernier caractere (pas de virgule)
   
  }#<= ne pas supprimer
   
   
  # Appel de script pour modifier ou lire les valeur dans le pnj même:
   
  # Pour lire :
  # value?(NAME)
  #
  # NAME est le nom de la competence tel quelle est dans le tableaux ci-dessus
  # ex :
  # value?(:vie)
  # Retourne la valeur de la vie du pnj
   
  #Pour modifier la variable :
  # set_value(NAME,VALUE)
  #
  # NAME est le nom de la competence tel quelle est dans le tableaux ci-dessus
  # et VALUE est la valeur a assigner
  # ex :
  # set_value(:vie,30)
  # Assigne 30 a la valeur de la vie du pnj
 
  # Appel de script pour modifier ou lire les valeur d'un pnj externe:
   
  # Pour lire :
  # $game_pnj[MAP_ID][ID].value?(NAME)
 
  # MAP_ID est l'id de la map sur laquel ce trouve le pnj
  # ID est l'id de l'event du pnj
  # !!! Ces 2 valeur doivent être sous forme de texte
  # ex: map 1 ,pnj 3: $game_pnj["1"]["3"].value?(NAME)
 
  #Pour modifier la variable :
  # $game_pnj[MAP_ID][ID].set_value(NAME,VALUE)
 
  # MAP_ID est l'id de la map sur laquel ce trouve le pnj
  # ID est l'id de l'event du pnj
  # !!! Ces 2 valeur doivent être sous forme de texte
  # ex: map 1 ,pnj 3: $game_pnj["1"]["3"].set_value(NAME,VALUE)
end
##############
# Classe Pnj #
##############
class Game_Pnj < Game_Event
  attr_reader :type
  def initialize(map_id, event,type)
    super(map_id, event)
    @type = type
    @comp_supl = NPC_PARAM::CARACTERE[type]
  end
  def value?(name)
    @comp_supl[name]
  end
  def set_value(key,value)
    @comp_supl[key] = value
  end
end
################################
# Nouvelle fonction de lecture #
################################
class Game_Interpreter
  def value?(name)
    $game_map.events[@event_id].value?(name)
  end
  def set_value(key,value)
    $game_map.events[@event_id].set_value(key,value)
  end
end
####################################
# Differenciation des type d'event #
####################################
class Game_Map
  def setup_events
    @events = {}
    @map.events.each do |i, event|
      if event.name =~ /<PNJ = (\S+)>/
        type = $1.to_sym
        $game_pnj[@map_id.to_s] = {} if !$game_pnj.has_key?(@map_id.to_s)
        $game_pnj[@map_id.to_s][i.to_s] = Game_Pnj.new(@map_id, event,type) if !$game_pnj[@map_id.to_s].has_key?(i.to_s)
        @events[i] = $game_pnj[@map_id.to_s][i.to_s]
      else
        @events[i] = Game_Event.new(@map_id, event)
      end
    end
    @common_events = parallel_common_events.collect do |common_event|
      Game_CommonEvent.new(common_event.id)
    end
    refresh_tile_events
  end
end
######################
# Sauvegarde des pnj #
######################
module DataManager
  class << self
    alias :create_game_objects_pnj :create_game_objects
    def create_game_objects
      create_game_objects_pnj
      $game_pnj      = {}
    end
    alias :make_save_contents_pnj :make_save_contents
    def self.make_save_contents
      make_save_contents_pnj
      contents[:pnj]          = $game_pnj
      contents
    end
    alias :extract_save_contents_pnj :extract_save_contents
    def self.extract_save_contents(contents)
      extract_save_contents_pnj(contents)
      $game_pnj = contents[:pnj]
    end
  end
end
reveurduciel
reveurduciel
Membre

Nombre de messages : 197
Date d'inscription : 18/12/2014

Système d'interactions sociales Empty Re: Système d'interactions sociales

le Mar 6 Jan 2015 - 18:36
Oups, excuse moi, j'ai envoyé une mauvaise version. En fait, j'étais un peu désespéré et j'essayais différent truc pour récupérer la valeur Amitié du NPC, parce qu'on dirait que lancer ce script à partir d'un npc ne marchait pas.

event = $game_map.events[event_id]
aaa = event.value?(:amitie)
msgbox(aaa.to_s)

Du coup, j'essayais de passer amitié directement comme un paramètre, plutôt de passer par ton script. Oui c'était redondant.

Mais aujourd'hui... euh... ça marche !

Ce qui est foncièrement merveilleux. Car moi aussi, je vais pouvoir me débarrasser d'environ une centaine de variable ... peut-être.

Car disons un exemple hypothétique, disons Bob le fermier.

Si j'ai tué Bob le fermier dans la Map 01, et que je croise Bobette la fermière dans la Map 08, il serait intéressant qu'elle me fasse quelques reproches. Avec les interrupteurs/variables globales, c'était facile. Par contre, avec ce script, ça va me demander d'aller chercher la variable :estMort d'un event qui n'est pas sur la carte. Un peu plus compliqué Very Happy (J'ai un script de Yanfly que je pourrais modifier pour ça par contre)

J'aurais 2-3 questions sur ton script Vincent, mais comme ce n'est pas mon sujet, je vais sans doute en ouvrir un autre.
vincent26
vincent26
Membre

Nombre de messages : 766
Age : 24
Localisation : baume de transit le village paumé
Distinction : aucune
Date d'inscription : 17/08/2010

Système d'interactions sociales Empty Re: Système d'interactions sociales

le Mar 6 Jan 2015 - 23:51
Yep aucun soucis Smile je peut même l'améliorer si tu veut ^^
reveurduciel
reveurduciel
Membre

Nombre de messages : 197
Date d'inscription : 18/12/2014

Système d'interactions sociales Empty Re: Système d'interactions sociales

le Mer 7 Jan 2015 - 4:54
Bon comme Horowitz n'est pas encore revenu (et ça pourra l'intéresser :P ), le voici :

https://drive.google.com/file/d/0BxvdWkV6eJGVck1TaWdMRjRkOGs/view?usp=sharing

J'ai simplement ajouté une méthode add_value pour incrémenter au lieu de remplacer.
J'ai également fait un test pour modifier la valeur de l'event à l'aide d'un autre event, sans problème.

Maintenant, j'ai mal compris pourquoi tu dois passer par l'interpreteur dans ton script, mais je regarderai ça demain Smile
vincent26
vincent26
Membre

Nombre de messages : 766
Age : 24
Localisation : baume de transit le village paumé
Distinction : aucune
Date d'inscription : 17/08/2010

Système d'interactions sociales Empty Re: Système d'interactions sociales

le Mer 7 Jan 2015 - 13:02
en fait a partir du moment ou tu fait quoi que ce soit sur un event c'est l'interpreteur qui l'execute donc entre autre l'appel de script est gerer par celui-ci donc si il y a une erreur dans l'appel de script il te renvoie a la ligne d'execution du script dans l'interpreteur Wink

sinon pour les pnj du coup tu devrais regarder le script que j'ai mis plus haut il est un peu mieux
Yamashi Fenikkusu
Yamashi Fenikkusu
Administrateur

Nombre de messages : 2974
Age : 24
Localisation : Alentours de Nancy
Distinction : Éternel Floodeur [Gel']
666 (SPY)
+2500pts pour sa folie des 1000 messages [Gel']
Génie intergalactique... ou pas [Gel']
Voix suave number one [Amal']
Collectionneur de distinctions (mais moins que Gel) [Yama]
Ouiche lorraine [Zeal']
L'homme aux casquettes [Mist']
Date d'inscription : 20/09/2014
https://www.rpgmakervx-fr.com/

Système d'interactions sociales Empty Re: Système d'interactions sociales

le Mer 7 Jan 2015 - 18:08
Voici THE SCRIPT pour faire un jeu de simulation de vie (qui peut se faire fastoch en even, mais en étant simpliste, je dit ça en tant que bon even maker): https://raw.githubusercontent.com/Grimimi/EventExtender4/master/EE.rb
Cela étant dit, Horowitz, étant donné que tu as joué les connards avec moi, je vais le faire aussi à l'occasion. Bref, je te laisse te débrouiller tout seul comme un grand et tu n'auras pas mon soutien.


Dernière édition par Yamashi le Mer 7 Jan 2015 - 18:39, édité 1 fois
reveurduciel
reveurduciel
Membre

Nombre de messages : 197
Date d'inscription : 18/12/2014

Système d'interactions sociales Empty Re: Système d'interactions sociales

le Mer 7 Jan 2015 - 18:20
Ben pour un "connard", tu aides quand même Very Happy

Vincent: oui, avec le tiens, on ne peut pas socialiser avec un coffre :P
ibiky-ushiha
ibiky-ushiha
Membre

Nombre de messages : 314
Age : 30
Distinction : *3ème au mapping show session 75
Date d'inscription : 17/03/2014

Système d'interactions sociales Empty Re: Système d'interactions sociales

le Mer 7 Jan 2015 - 18:50
Yama, Yama, Yama, déjà l'Event Extender n'ai pas fait et pas capable de bien géré une simulation de vie, car ces juste un booster de l'utilisation de l'Event Making ^^. Et au vue de son 1er post ils traite tous les Event Maker des plus Amateurs, donc il n'utilisera pas ce style de making, après il et vrais que cela peut ce géré en Event Making, mais imagine les 10000 variables, et interrupteurs que tu dois utiliser pour un tel projet Oo ces simplement et littéralement ultra complexe de le faire, non moi je dis qu'il faudrait mieux faire rien que de t'enter de faire quelque chose de pas jouable qui tourne à 2FPS avec tous ces systèmes enclenché, ce serais du suicide même de présenter un telle projet en évent making aussi complexe et bugée, non moi je dis que tu as bien fais en même temps de lui indiquer ce booster d'Event Making, mais il n'aime pas cela et il trouve que c’est pour les plus Amateur (tien je radote moi) donc, je te souhaite que tu courage Horowitz car tu en aura besoin, même si en même temps je ne souhaite pas ta réussite car était aussi un Event Maker tu viens nous insulté tous gratuitement, mais je passe outre ce fait, j'aime bien les script aussi mais bon je n'en utilise que 2 actuellement voir 3 avec le Mode7.

Cordialement Ibiky.
reveurduciel
reveurduciel
Membre

Nombre de messages : 197
Date d'inscription : 18/12/2014

Système d'interactions sociales Empty Re: Système d'interactions sociales

le Mer 7 Jan 2015 - 19:06
Moi je pense que c'est possible en assignant quelques variables à chaque event à l'aide du script que j'ai créé (ou plutôt de la version plus poussée de Vincent).

D'ailleurs je pense que je vais faire un petit démo ce soir pour le prouver avec un village de 10 habitants. Smile
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum