Pb avec les tabourets, et s'asoir sur un placeable

Répondre
Partager Rechercher
Je pense que la question a déjà été posée plusieurs fois, mais après une recherche sur vault et ici, et la fonction search étant désactivée je n'ai pas trouvé ce que je cherchais.

Il y a tout d'abord un pb avec les tabourets de bioware, quelque soit leur orientation le pj s'assied toujours dans la même direction.

Enfin, je cherche un script que permette de s'assoir sur les placeables, mais qui tient compte de l'orientation. Beaucoup de fois on ne pouvais pas régler et le pj je trouvait assis à l'envers.

Merci d'avance
La solution à tous tes problèmes est très simple...
Tu poses tous tes plaçables chaise, banc, tabouret etc, en statique. Tu crées un objet invisible unique que tu nommes comme tu le veux. Tu le mets en utilisable et plot. Puis, sur le OnUsed, tu mets un script classique pour s'asseoir qui tient en une ligne de code :

Code PHP:

AssignCommand(GetLastUsedBy(), ActionSit(OBJECT_SELF)); 

Tu poses l'objet invisible sur le statique, orienté comme tu en as besoin, puis tu ajustes sa hauteur à zéro. Et hop, le PJ s'assoit dans le sens où tu as orienté ton plaçable invisible. C'est mââââgique.
Si je ne me plante pas, le modèle de l'objet invisible NwN de base pose aussi un problème d'orientation. Problème résolu par un hak qui existe sur le vault d'une part, et par l'objet invisible proposé par le CEP d'autre part.
Le fait de le mettre à une hauteur de zéro résout le problème d'orientation. Evidemment, si tu le laisses en hauteur, au dessus des bancs/chaises/etc, c'est foutu...
Donc, pas besoin de hakpack. (Non, tu ne me le vendras pas ! )
Dans ce cas, mets l'objet invisible en non-utilisable, le tabouret en sélectionnable, et fait agir le script à partir du onused du tabouret :

AssignCommand(oPlayer, ActionSit(GetNearestObjectByTag("Tag de l'obj. invisible")));
Non c'est aussi pour utiliser sur le décor, par exemple les sieges non utilisables qui sont devant les cheminées

Une autre question pendant que j'y suis, j'ai un problème avec le CEP qui m'affiche les noms en francais et du coup, beaucoup d'objets s'appellent "table" est ce qu'il y a un moyen de remettre le tout en anglais? J'ai essayé de changer les langues mais ca ne marche pas...

(et par la même trouver l'objet invi du CEP )

Edit: euh le script ne marche pas, enfin le perso s'approche mais l'action s'annule sans qu'il fasse quelque chose ca tient peut être de la hauteur du placeable je ne vois pas comment la régler à zéro...
Deux situations :
- ou bien le plaçable n'accepte pas l'assise s'il se situe au dessus du sol (et non sur le sol)
- ou alors le plaçable n'accepte pas d'assise du tout.

Si tu pratiques l'actualisation de zone (ou F5), évite de le faire quand tu y insères des objets qui chevauchent d'autres objets ou des éléments de décor, car cette action réajuste les objets afin de supprimer tout cas de chevauchement. Un plaçable est alors repositionné sur ce qu'il chevauche, et non à travers. Mieux vaut changer de zone pour sauvegarder les paramètres et recharger la zone précédente.

Aussi, pour ajuster la localisation x,y,z d'un objet, c'est : clic droit sur l'objet ---> Ajuster emplacement.

Pour le cas particulier des tabourets, je suppose que Bioware a voulu créer des sièges pouvant accepter multiples directions d'assise, à l'instar d'un banc, qui ne peut en accepter que deux, ou d'une chaise. En cas je vais jeter un oeil sur la commande SetFacing(), et voir si elle peut être aisément exploitée.


[Edit]

Pour ce test, j'ai mis quatre tabourets utilisables scriptés que j'ai positionnés dans la même direction, puis quatre objets invisibles génériques statiques strictement placés à la même localisation que chacun des tabourets, que j'ai positionnés dans différentes directions. Au final, lorsque je clique sur un tabouret, le personnage s'assoit en fait sur l'objet invisible correspondant à ce tabouret, dans la direction vers laquelle cet objet invisible est positionné.

Voici le script placé sur le OnUsed des tabourets :
Code PHP:

void main()
{
    
AssignCommand(GetLastUsedBy(),ActionSit(GetNearestObjectByTag("InvisibleObject")));

Pour les éléments de décors sur lesquels tu veux faire s'asseoir tes joueurs, et si tu veux vraiment que ça soit plus joli, tu pourrais mettre un objet invisible utilisable à la hauteur de l'assise et scripté (simulant le tabouret, la chaise, ou le banc), et un objet invisible statique à une hauteur de 0,00 sur lequel le joueur sera assis.

Pour les problèmes de noms du CEP ça doit venir du fichier cep.tlk qui n'est pas au meilleur de sa forme.
Si tu n'as pas le cep-fr.tlk, alors tu devrais le Télécharger. Si tu l'as, tu devrais voir si tu as un fichier cep.tlk de base. Sinon, modifie ou fais modifier ce fichier pour corriger les noms douteux. Par contre je ne sais pas si modifier un fichier.tlk nécéssite un téléchargement du fichier modifié pour tous ceux qui voudront se connecter à ton mod.
Pour info, la version 1.66 corrigera (enfin) ce tabouret dont l'orientation d'assise était faussée.

@KzimiR666 : Je suppose que tu auras des problèmes, oui, mais pas de gros problèmes en soi, pas de conflits, pas de plantage, c'est juste que certaines références du CEP ne seront pas trouvées dans le fichier "cep-fr.tlk". Rien de dramatique, juste des texte qui manqueront à l'appel.
Y'a déja un des script sur le CEP pour les chaises :
Code PHP:

//::///////////////////////////////////////////////
//:: FileName: zep_use_chair
//:://////////////////////////////////////////////
/*
 Sit on a placeable chair or on an invisible object
 placed on a tileset chair.
*/
//:://////////////////////////////////////////////
//:: Created By: Naomi Novik
//:: Created On: /2002
//:://////////////////////////////////////////////


void main()
{
    
object oChair OBJECT_SELF;
    if (!
GetIsObjectValid(GetSittingCreature(OBJECT_SELF))) {
        
AssignCommand(GetLastUsedBy(), ActionSit(oChair));
    }

Pour les bancs 2 places (tronc couchés, canapés, etc)

Code PHP:

//OnUsed du Banc : banc2places

void main()
{
    
// Déclarations
    
object oPlayer GetLastUsedBy();
    
object oBench  OBJECT_SELF;
    
object oPillow1 GetLocalObjectOBJECT_SELF"Pillow 1" );
    
object oPillow2 GetLocalObjectOBJECT_SELF"Pillow 2" );

    
// Si la place n'est pas occupé, la créer
    
if( !GetIsObjectValidoPillow1 ) )
    {
        
// Créer les variables
        
object oArea GetAreaoBench );
        
vector locBench GetPositionoBench );
        
float fOrient  GetFacingoBench );

        
// Calcule la location des 2 places
        
location locPillow1 LocationoArealocBench AngleToVectorfOrient 90.0f ) / 2.0ffOrient );
        
location locPillow2 LocationoArealocBench AngleToVectorfOrient 90.0f ) / 2.0ffOrient );

        
// Créer le 2eme joueur assis
        
oPillow1 CreateObjectOBJECT_TYPE_PLACEABLE"plc_invisobj"locPillow1 );
        
oPillow2 CreateObjectOBJECT_TYPE_PLACEABLE"plc_invisobj"locPillow2 );

        
// Memorise les places
        
SetLocalObjectOBJECT_SELF"Pillow 1"oPillow1 );
        
SetLocalObjectOBJECT_SELF"Pillow 2"oPillow2 );
    }

    if( 
GetDistanceBetweenoPlayeroPillow1 ) < GetDistanceBetweenoPlayeroPillow2 ) )
    {
        if( !
GetIsObjectValidGetSittingCreatureoPillow1 ) ) )
        {
            
AssignCommandoPlayerActionSitoPillow1 ) );
        }
        else
        {
            
AssignCommandoPlayerActionSitoPillow2 ) );
        }
    }
    else
    {
        if( !
GetIsObjectValidGetSittingCreatureoPillow2 ) ) )
        {
            
AssignCommandoPlayerActionSitoPillow2 ) );
        }
        else
        {
            
AssignCommandoPlayerActionSitoPillow1 ) );
        }
    }

Les 2 sont a mettre dans le OnUsed de tes chaises, tabourets et bancs. Pour les objets fixe, l'objet invisible du CEP marche bien aussi, avec le script zep_use_chair
Tu n'es pas obligé de le mettre a une hauteur de zero, moi j'ajuste souvent la position, et ca fonctionne bien, sauf sur les lits, etc. Par contre souvent faut mettre l'objet invisible a moitié sur l'objet de decor, et a moitié dehors.
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés