JeuxOnLineForumsPlusConnectés : 689 (sites) | 1282 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Encore moi ! faire de camp et cuire la nourriture RSS
   
Répondre
Partager Outils Rechercher
Avatar de Skanzo Sylan
Skanzo Sylan
Empereur
 
Avatar de Skanzo Sylan
 
J'me demande comment tu as fais

Paske dans mon essai là, ya un truc qui cloche.


Imaginons que j'ajoute une animation (style GetLow) de 10 secondes avant le ActionCreateObject, cela va poser problème pour mon GetLastObjectBidule qui lui est appelé aussitôt dans le script.
Mon object va être invalid car l'action de créer l'objet ne s'est pas encore effectué.

T'as pris koi comme astuce?
Lien direct vers le message - Vieux
Avatar de RAT
RAT
Alpha & Oméga
 
Avatar de RAT
 
ba voila , celle que j'utilise pour creer des NPC par exemple


Code PHP:

//****************************
//   FONCTION POUR CREER UN NPC
//***************************

// creation des npc quand ils partent de la taverne
void creation_npc(float frand)
{
object oarea=GetArea(OBJECT_SELF);
string sref=racerand(7);
location la GetLocation(GetLocalObject(oarea,"taverneaub_partir")); //revenir a la porte de la taverne

object PNJ=CreateObject(OBJECT_TYPE_CREATURE,srefla);
if (
sref!="")
PNJ;

//AssignCommand(PNJ, ClearAllActions());
SetLocalInt(PNJ"PNJ_action"TRUE);
SetLocalInt(PNJ"PNJ_CREATION"TRUE);
SetLocalObject(OBJECT_SELF,"PNJ_OBJECT_TAV",PNJ);
SetLocalFloat(PNJ,"COMPTEUR_RAND_TAV",frand);
SetLocalInt(PNJ"PNJ_action"TRUE);
SetLocalObject(OBJECT_SELF"PNJanime"PNJ);

//SendMessageToAllDMs("createnpc "+FloatToString(frand));


Et même voici d'autres fonctions que tu pourras regarder pour voir :

Code PHP:

//**************************
//    FONCTION POUR FAIRE DORMIR UN NPC
//**************************
void action_unequip(object PNJ)   //fonction pour desequiper rapidement un npc
{

                   
int i;

            for(
<= NUM_INVENTORY_SLOTS i++){
            
object oItem GetItemInSlot(iPNJ);
            if(
oItem != OBJECT_INVALID){
            
AssignCommand(PNJActionUnequipItemoItem));
            
SetLocalObject(PNJ,"MEMODOR_FRINGUE_"+IntToString(i),oItem); // on enregistre l'item dans une variable locale
            
} }


}
void action_equip(object PNJ)  //fonction pour equiper rapidement un npc
{

                   
int i;

            for(
<= NUM_INVENTORY_SLOTS i++){
            
object oItem GetLocalObject(PNJ,"MEMODOR_FRINGUE_"+IntToString(i));  // et on la rappelle ici

            
if(oItem != OBJECT_INVALID){
            
AssignCommand(PNJActionEquipItem(oItem,i));
            
DeleteLocalObject(PNJ,"MEMODOR_FRINGUE_"+IntToString(i));  // puis on la detruit
            
} }


}


void createcle(string sresref,object oNPC)    //fonction pour creer les cle
{
object oitem;
oitem=CreateItemOnObject(sresref,oNPC);
SetLocalString(oNPC,"CLE_TAV",GetTag(oitem)); // on l'enregistre dans une variable locale sur le npc le tag de la cle

}


void detruitcle(object oNPC)    //fonction pour detruire les items
{
object oitem=GetItemPossessedBy(oNPC,GetLocalString(oNPC,"CLE_TAV"));
DestroyObject(oitem);    // on detruit l'item
DeleteLocalString(oNPC,"CLE_TAV"); // comme on efface la variable

}

// fonction pour vider l'inventaire integralement.
void viderInventaire(object cibleobject contenant=OBJECT_INVALID)
{
    
int i;
    
object item;
    
object copiItem;
    
int igold GetGold(cible);
    
TakeGoldFromCreature(igoldcible);  // on detruit l'or aussi

    
while((item GetNextItemInInventory(cible)) != OBJECT_INVALID){
        if(
contenant != OBJECT_INVALID){
            
copiItem CreateItemOnObject(GetTag(item), contenant);
            
SetPlotFlag(copiItemGetPlotFlag(item));
            
SetIdentified(copiItemGetIdentified(item));
        }
        
DestroyObject(item);
    }
    for(
<= NUM_INVENTORY_SLOTS i++){
        
item GetItemInSlot(i,cible);
        if(
contenant != OBJECT_INVALID){
            
copiItem CreateItemOnObject(GetTag(item), contenant);
            
SetPlotFlag(copiItemGetPlotFlag(item));
            
SetIdentified(copiItemGetIdentified(item));
        }
        
DestroyObject(item);
    }
}




void DestroyPNJ(object oNPC)   // fonction qui detruit le npc en mm temps que son inventaire.
{
viderInventaire(oNPC);
DestroyObject(oNPC);


Lien direct vers le message - Vieux
Avatar de Reyan
Reyan [L.D.D]
Roi / Reine
 
Avatar de Reyan
 
ahem, pour le CreateObject, il est en question .. je sais plus où , si : là : ici
et bioware a déjà creer une fonction qui est bien void elle, c le "CrateObjectVoid" qui necessite l'include "#include "nw_i0_2q4luskan"
m'enfion ils ont sans doute fait pareil lol
Lien direct vers le message - Vieux
Avatar de Skanzo Sylan
Skanzo Sylan
Empereur
 
Avatar de Skanzo Sylan
 
Cool Reyan, je vais decortiquer leur fonction pour voir quelle variable object je peux recupérer ensuite, merci
Lien direct vers le message - Vieux
Avatar de Skanzo Sylan
Skanzo Sylan
Empereur
 
Avatar de Skanzo Sylan
 
Les branleurs, j'hallucine

Code PHP:
void CreateObjectVoid(int nObjectTypestring sTemplatelocation lLocint bUseAppearAnimation FALSE)
{
    
object oVoid CreateObject(nObjectTypesTemplatelLocbUseAppearAnimation);

Lien direct vers le message - Vieux
Avatar de RAT
RAT
Alpha & Oméga
 
Avatar de RAT
 
huhu ^^
Lien direct vers le message - Vieux
Avatar de Reyan
Reyan [L.D.D]
Roi / Reine
 
Avatar de Reyan
 
tu croyais quoi
c juste pour mettre ds les delaycommand
mais c vrai que ce que tu propose permetant de faire les deux, c p-e plus interessant
cependant, nommer ca ActionCreateObject n'est pas forcement une bonne idée je pense, puisque ce n'est pas une ActionQqChose, mais une creation ... alors si tumet un ActionDoccoamnd dedans, pk pas, mais là, ca peut être, p-e, prêter a confusion fin c une remarque comme ca ^_^

aq uoi il sert le
Code PHP:
 object oVoid 
puisqu'il est même pas récupéré !
Lien direct vers le message - Vieux
Avatar de Skanzo Sylan
Skanzo Sylan
Empereur
 
Avatar de Skanzo Sylan
 
Yep, c'est vrai que ActionCreateObject ne permet pô de l'inclure dans une chaîne d'action mais sache qu'ActionRest ne le permet pô non plus héhé

On est quand même obligé d'utiliser ActionDoCommand pour ActionRest


Pour le object oVoid, ben heu... ça doit être un scotch de trop dans le pif du scripteur


Mais bon, on est pô plus avancé. J'ai testé mon script et le GetLastObjectCreatedBy est invalid paske l'objet n'est pô encore créer
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
En plus ActionCreateObject() existe déjà aussi #include "nw_skeleton" ou un truc comme ça ...

@ Skanzo > D'habitude pour éviter le problème que tu évoque, on fait effectuer les actions directement à l'intérieur de la fonction de création.
Lien direct vers le message - Vieux
Avatar de Skanzo Sylan
Skanzo Sylan
Empereur
 
Avatar de Skanzo Sylan
 
J'imagine bien Jed, c'est juste que je voulais une paire de fonctions simples à utiliser dans un script, un truc qui facilite la vie des autres koi
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Encore moi ! faire de camp et cuire la nourriture
   

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 23h29.
   

© 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