Encore moi ! faire de camp et cuire la nourriture

Répondre
Partager Rechercher
Comment on pourrai faire que le perso puisse faire un feu de camp avec du bois et un briquet (par exemple)?
ensuite je voudrai que les loup attaquent si il y a pa de feu de camp quand les pjs dorment.
Re-encore merci a tous !
alors : avec des "create" où tu créé une flamme si y a du bois et un briquet

question : il le créé n'importe où leur feu ?
dans ce cas faut créé un item "bois"
de tt facon l'en faut un "briquet"

pour les loup :
qd tu allume un feu tu créé une variable sur le PJ, genre "FEU" , TRUE
dans le onPlayerRest (un des evts du module)
tu cree des loup si jamais le PJ qui se repose n'a pas la variable FEU

question : euh, faire gaffe aux ville, y a pas d'attaque de loup ds les ville :/ si ? sinon, ba tu met une variable FEU a l'entree des ville et tu la vire a la sortie
les loups attaquent aussi si y a un gars de l'équipe qui surveille ? les loups attaque aussi de jour ?
les loups attaquent sont créé sur les perso ? si tu veux qu'il arivent d'un peu plus loin, et se jette sur les PJ, faut creer des WP de spawn de loup un peu partout et récupérer le plus proche mais pas trop qd même

si t'as un pb, fais signe
Citation :
Provient du message de Reyan

les loups attaquent sont créé sur les perso ? si tu veux qu'il arivent d'un peu plus loin, et se jette sur les PJ, faut creer des WP de spawn de loup un peu partout et récupérer le plus proche mais pas trop qd même
Ou générer une "location" aléatoire a X mètres des Pjs ...
oui il me semble bien que les briquet existant dans le medieval. Enfin, pas sous la forme que l'on connais aujourd'hui bien sur.

En fait, je sais pas sous quelle forme....
Oui tout à fait le briquet d'amadou. En fait l'amadou était une masse graisseuse qui faciliter l'allumage du feu. Et le briquet, avait plusieurs formes dont l'une ou c'était un silex assez gros et un autre silex beaucoup plus petit qui allait se frottait dessus en actionnant un mécanisme pour créer cette étincelle

Voilà en gros, si je me souviens bien
Ha vi, pô faux pour l'amadou, excusez-moi


Par contre, ce qui est bète c'est qu'un placeable créé par script apparait toujours avec de la lumière qu'il soit actif ou inactif. Il faut donc utiliser SetIllumination et RecomputeLight
Je trouve ça un peu pourrave
Je ne capte pas ce que tu veux dire? lol Désolé

Tu me dis que quand tu spawns un placeable, cela créé automatiquement de la lumière, c'est ça??? ---- > car j'utilise le spawn de placeable pour un script et je ne le fais jamais avec de la lumière mais j'ai peut être mal compris lol
Non non, c'est plutôt que j'ai mal expliqué. Je viens de me relire et hum c'est loin d'être compréhensible lol

Avec le décodeur ça donne:

- Je créé dans le toolset un template de campfire.
- Je lui donne un tag, un resref et le met en inactif, le feu n'est pas allumé.
- Je fait un script pour qu'un évènement le fasse apparaitre devant le perso.
- Je lance mon module.
- Je teste le script et le feu de camp apparait, il n'y pas de feu mais il génère quand même de la lumière.

Il faut donc utiliser SetPlaceableIllumination et RecomputeStaticLighting pour que la lumière génèrée disparaisse.

Ça fait ça avec tous les placeables qui font de la lumière comme le candélabre ou le brasero.

Fais le test toi-même. Pose un brasero dans ton module, met-le désactivé et lance ton module. Il y aura de la lumière mais pô de flammes.
C'est quand même crétin qu'on soit obligé de passer par un recompstaticlighting au moment du spawn
Bon a savoir je note

Il faut faire ca juste une fois (dans le OnModuleLoad par ex) ou bien a chaques fois que la zone est chargée (dans le OnEnter si c'est le premier joueurs qui entre) ?

Le premier n'étant pas génant, l'autre un petit peu plus
Dans le cas où c'est un PJ qui fait apparaitre un campfire, même avec le recomp et tout le barda, on voit quand même la lumière flasher un court moment


J'y pense, vous avez déjà remarqué que CreateObject était une fonction object et non void?

J'ai vu pô mal de script qui utilisait GetNearestObjectByTag pour récupérer l'object créé.
Alors qu'il suffit de faire comme ça:
Code PHP:

object oCampfire CreateObjectOBJECT_TYPE_PLACEABLE"Campfire"lLocation); 

(d'ailleurs c'est pour ça qu'on peut pô utiliser CreateObject dans un AssignCommand... trop nul )


Edit: tiens ça me fait penser qu'on pourrait créé une fonction ActionCreateObject en void et une autre GetLastObjectCreatedBy( oPC);, histoire de pouvoir utiliser l'AssignCommand et le ActionDoCommand...
Hop là
Code PHP:

void ActionCreateObject(int nObjectTypestring sTemplatelocation lLocationint bUseAppearAnimation=FALSE) {
    
object oObjectCreated CreateObjectnObjectTypesTemplatelLocationbUseAppearAnimation);
    
SetLocalObjectOBJECT_SELF"OBJECT_CREATED"oObjectCreated);
    }

object GetLastObjectCreatedBy(object oPC) {
    
object oObjectCreated GetLocalObjectoPC"OBJECT_CREATED");
    return 
oObjectCreated;
    }

void main() {
    
object oPC GetLastUsedBy();
    
location lLocationGetLocationoPC);
    
AssignCommandoPCActionDoCommandActionCreateObjectOBJECT_TYPE_PLACEABLE"Campfire"lLocation)));
    
object oObject GetLastObjectCreatedByoPC);
    } 
Manque encore quelque chose...
P'tet une boucle while...
Merci skanzo pour toutes ses infos , je ne m'en etais pas rendu compte ^^
Pour le CreateObject je le savais

mais comme pour ma taverne , j'ai réussi comme tu viens de faire là, à le faire passer dans des AssignCommand ou DelayCommand par des fonctions

Donc voilouu,
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?
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);


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
Les branleurs, j'hallucine

Code PHP:

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

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é !
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
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.
Répondre

Connectés sur ce fil

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