JeuxOnLineForumsPlusConnectés : 762 (sites) | 1318 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Savoir si le PJ possède une arme RSS
   
Répondre
Partager Outils Rechercher
BERNARD_JULIUS [[LH]]
Roi
 
Question

Savoir si le PJ possède une arme

Hello !

Je cherche le moyen de savoir si le joueur possède une arme, équipée ou non.

Voilà mon script qui, naturellement ne fonctionne pas.

Code PHP:

int StartingConditional
()
{
object armed=GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,GetFirstPC());
object armeg=GetItemInSlot(INVENTORY_SLOT_LEFTHAND,GetFirstPC());
if (
armed == OBJECT_INVALID && armeg == OBJECT_INVALID)
    {
    
ActionEquipMostDamagingMelee(OBJECT_INVALID,FALSE);
    
object armesup=GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,GetFirstPC());
    
ActionUnequipItem(armesup);
    if (
armesup == OBJECT_INVALID)
        {
        return 
FALSE;
        }
    else return 
TRUE;
    }
else return 
TRUE;

Voilà, c'est une condition d'exécution dans un dialogue: si le pj possède une arme, la phrase s'affiche.

C'est où que ça merde ?? Siou plaîîîît...
Lien direct vers le message - Vieux
Avatar de Zunzun
Zunzun
Alpha & Oméga
 
Avatar de Zunzun
 
Code PHP:
int StartingConditionnal()
{
object oRight=GetItemInSlot(INVENTORY_SLOT_RIGHTHANDGetPCSpeaker());
object oLeft=GetItemInSlot(INVENTORY_SLOT_LEFTHANDGetPCSPeaker());

if (
GetIsObjectValid(oRight) || GetIsObjectValid (oLeft)) return FALSE;

object oItem=GetFirstItemInInventory(GetPCSpeaker());

while (
GetIsObjectValid(oItem)
{
    
int nType=GetBaseItemType(oItem)
    switch (
nType)
    {
        case 
0: return FALSE;
        case 
1: return FALSE;
        case 
2: return FALSE;
        
//on continue comme ca en verifiant si pour chaque type c'est une arme ou pas    
    
}
    
oItem=GetNextObjectInInventory(GetPCSpeaker());
}

C'est du bidouillage, si ca se trouve y a un truc beaucoup plus rapide que j'ai pas vu
Lien direct vers le message - Vieux
BERNARD_JULIUS [[LH]]
Roi
 
D'accord, j'ai compris.

Enfin je suppose qu'il faut remplacer case 0 par BASE_ITEM_BASTARDSWORD par ex et ainsi de suite...

Mais est-ce que les baseItemTypes correspondront si je fais le test sur des objets personnalisés qui se trouvent être des armes ??

En tous cas merci je vais essayer ça ce soir et j'aurai ma réponse je pense.

Ps : Pour toi c'est du bidouillage vite fait en 2 minutes mais pour moi c'est le fruit (verreux) d'une longue journée de vaine réflexion...
Lien direct vers le message - Vieux
Avatar de Zunzun
Zunzun
Alpha & Oméga
 
Avatar de Zunzun
 
Par bidouillage j'entends un truc pas spécialement optimisé ou propre

Sinon non c'est pas la peine de remplacer, si tu fous BASE_ITEM_BLALABLA il va aller regarder a quoi ca correspond, donc autant lui mettre le chiffre direct

D'ailleurs c'est dommage que toutes les armes se suivent pas dans la liste, sinon on aurait pu s'en sortir avec juste un if nType < xx
Lien direct vers le message - Vieux
Avatar de gaeriel/nekresh
gaeriel/nekresh
Empereur
 
Avatar de gaeriel/nekresh
 
Un objet personalisable qui n'a pas comme base item un des base_item_* des armes ne pourra pas être équipé comme une arme, non ?
Et est ce que tu considères comme arme les batons, les sceptres et autres outils du magiciens, de l'ensorceleur, ... ?
Lien direct vers le message - Vieux
BERNARD_JULIUS [[LH]]
Roi
 
Si j'ai bien compris :
nType 0 = BASE_ITEM_AMULET
nType 1 = BASE_ITEM_ARMOR
nType 2 = BASE_ITEM_ARROW
etc...dans l'ordre alphabétique des BASE_ITEM, c'est bien ça ?

En tous cas hier soir j'ai fait des essais, et en fait il est inutile de faire le test sur la main gauche car:
- si le joueur possède une arme c'est dans la main droite
- si le joueur possède une arme à 2 mains, c'est dans la main droite aussi
- si le joueur possède 2 armes, il en a forcément une dans la main droite
- il est impossible que le joueur ait une arme dans la main gauche et aucune dans la main droite

De plus, si on fait le test avec la main gauche, le script considère que le joueur est armé même si celui-ci n'a qu'une torche.

Par contre je ne me souviens plus si le joueur peut à la création de son perso dire qu'il est gaucher...auquel cas ça complique les choses...

Finalement j'ai abouti à ce script, qui n'est sûrement pas optimisé car je suis un débutant :

Code PHP:
void main()
{
object oRight=GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,GetPCSpeaker());
if (
GetIsObjectValid(oRight))
    {
    
SetLocalInt(GetFirstPC(),"possede_arme",1);
    }
object oItem=GetFirstItemInInventory(GetPCSpeaker());
while (
GetIsObjectValid(oItem))
{
    
int nType=GetBaseItemType(oItem);
    switch (
nType)
    {
        case 
BASE_ITEM_BASTARDSWORDSetLocalInt(GetFirstPC(),"possede_arme",1);
        case 
BASE_ITEM_BATTLEAXESetLocalInt(GetFirstPC(),"possede_arme",1);
        case 
BASE_ITEM_DAGGERSetLocalInt(GetFirstPC(),"possede_arme",1);
        case 
BASE_ITEM_SHORTSWORDSetLocalInt(GetFirstPC(),"possede_arme",1);
        case 
BASE_ITEM_DARTSetLocalInt(GetFirstPC(),"possede_arme",1);
        case 
BASE_ITEM_DIREMACESetLocalInt(GetFirstPC(),"possede_arme",1);
        case 
BASE_ITEM_DOUBLEAXESetLocalInt(GetFirstPC(),"possede_arme",1);
        case 
BASE_ITEM_GREATAXESetLocalInt(GetFirstPC(),"possede_arme",1);
        case 
BASE_ITEM_GREATSWORDSetLocalInt(GetFirstPC(),"possede_arme",1);
        case 
BASE_ITEM_HALBERDSetLocalInt(GetFirstPC(),"possede_arme",1);
        case 
BASE_ITEM_HANDAXESetLocalInt(GetFirstPC(),"possede_arme",1);
        case 
BASE_ITEM_HEAVYCROSSBOWSetLocalInt(GetFirstPC(),"possede_arme",1);
        case 
BASE_ITEM_HEAVYFLAILSetLocalInt(GetFirstPC(),"possede_arme",1);
        case 
BASE_ITEM_KATANASetLocalInt(GetFirstPC(),"possede_arme",1);
        case 
BASE_ITEM_LIGHTCROSSBOWSetLocalInt(GetFirstPC(),"possede_arme",1);
        case 
BASE_ITEM_LIGHTFLAILSetLocalInt(GetFirstPC(),"possede_arme",1);
        case 
BASE_ITEM_LIGHTHAMMERSetLocalInt(GetFirstPC(),"possede_arme",1);
        case 
BASE_ITEM_LIGHTMACESetLocalInt(GetFirstPC(),"possede_arme",1);
        case 
BASE_ITEM_LONGBOWSetLocalInt(GetFirstPC(),"possede_arme",1);
        case 
BASE_ITEM_LONGSWORDSetLocalInt(GetFirstPC(),"possede_arme",1);
        case 
BASE_ITEM_MAGICRODSetLocalInt(GetFirstPC(),"possede_arme",1);
        case 
BASE_ITEM_MORNINGSTARSetLocalInt(GetFirstPC(),"possede_arme",1);
        case 
BASE_ITEM_SCIMITARSetLocalInt(GetFirstPC(),"possede_arme",1);
        case 
BASE_ITEM_SHORTBOWSetLocalInt(GetFirstPC(),"possede_arme",1);
        case 
BASE_ITEM_SHORTSPEARSetLocalInt(GetFirstPC(),"possede_arme",1);
        case 
BASE_ITEM_SHURIKENSetLocalInt(GetFirstPC(),"possede_arme",1);
        case 
BASE_ITEM_THROWINGAXESetLocalInt(GetFirstPC(),"possede_arme",1);
        case 
BASE_ITEM_TWOBLADEDSWORDSetLocalInt(GetFirstPC(),"possede_arme",1);
        case 
BASE_ITEM_WARHAMMERSetLocalInt(GetFirstPC(),"possede_arme",1);


    }
    
oItem=GetNextItemInInventory(GetPCSpeaker());
}

J'ai laissé tomber le StartingConditionnal(), je ne m'en sortais pas...donc en fait on lance se script en action conséquente sur la phrase d'avant et après on vérifie juste si GetLocalInt(GetFirstPC(),"possede_arme") == 1
Si oui alors le gardien dit "Dépose tes armes avant d'entrer" sinon il dit "C'est bon, tu peux entrer"...
Lien direct vers le message - Vieux
Avatar de Zunzun
Zunzun
Alpha & Oméga
 
Avatar de Zunzun
 
Pour connaitre les valeurs de toutes les constantes, suffit d'aller voir dans nwscript.nss, sinon j'avais vu un post qq part ici.
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Savoir si le PJ possède une arme
   

Outils Rechercher
Rechercher:

Recherche avancée

Les vidéos de Neverwinter Nights RSS
  • Aucune vidéo pour le moment...
Thème visuel : Fuseau horaire GMT +1. Il est actuellement 21h06.
   

© JeuxOnLine, le site des MMO, MMORPG et MOBA. Tous droits réservés. - Conditions générales d'utilisation - Conditions d'utilisation des forums - Traitement des données personnelles - ! Signaler un contenu illicite