Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

faire respawner des item par terre, a temps irrégulier et lieu irregulier dans une zo

Par fauxninja le 18/12/2002 à 21:04:33 (#2826072)

dans une zone.

voila je chercher un script a mettre dans la zone pour y faire pousser des plante quelque fois (au hasard pour pas qu'on sache quand fau aller ceuillir)

mais je ne sai pas coment afire respawner des items...

c'est possilbe?

Par Taern le 18/12/2002 à 21:19:08 (#2826201)

Voilà une question intéressante :) Il y a plein de moyens d'arriver à tes fins, tout dépend de ce que tu veux précisément.

Personnellement je proposerais un système basé sur le heartbeat de la zone et des waypoints placés dans cette même zone. Pour simplifier les choses, disons une plante par waypoint.

Il serais facile de "déplacer" aléatoirement le lieu d'apparition de la plante (un placeable crée tout particulièrement) en prenant pour origine la position du waypoint.

Ensuite, par variables locales, ça devrais pouvoir se faire sans trop de complications, y compris l'intervalle de temps irrégulier.

Mais il y a sûrement d'autres moyens :ange:

Par fauxninja le 21/12/2002 à 14:30:01 (#2847513)

je voi pas trop ce qu'il fau faire.. je veu dire, qu'elle est la fonction qui créé un item avec pour condition un laps de temps?

aussi: comment faire pour que le contenu des coffres change? (par exemple que le coffre donne des items predefinis).

merci.

Par fauxninja le 21/12/2002 à 15:38:55 (#2847808)


void main()
{
object CreateObject(int OBJECT_TYPE_ITEM, string "draaf", location "draafici", int bUseAppearAnimation=FALSE);
}


je voudrai créer des "draaf" (c le tag de la plante) au lieu (point de passage) de tag "draafici" quand je joueur entre dans la zone faite avec un declancheur generique. (je met ce script dans OnEnter du declancheur generik)

mais deja, ca veu pas compiler car ya des errer, je sai pas toi ce qu'il fau mettre pour la location et le string....

Par coolstar le 21/12/2002 à 15:52:34 (#2847862)


void main()
{
int nObjectType = OBJECT_TYPE_ITEM;
string sTemplate = "draaf";
location lLocation = GetLocation(GetObjectByTag("draafici"));

CreateObject(OBJECT_TYPE_ITEM, sTemplate, lLocation);
}

Par fauxninja le 21/12/2002 à 16:24:53 (#2847988)

un sTemplate, generalement, c le tag ou le bluepoint?, ou le nom?

Par Jaha Effect le 21/12/2002 à 16:50:32 (#2848136)

C'est le blueprint :D
Le CreateObject utilise toujours les blueprint

Jaha Effect :D

Par coolstar le 21/12/2002 à 17:32:40 (#2848380)

Effectivement! :D


Perso, je traduis 'Template' par "Référence" (en d'autre terme les 'ResRef' du Blueprint!)... Il faut considérer que le 'TAG' (qui, lui, peut être Personnalisé!) ne peut être appelé qu'à partir du moment où l'Objet existe déjà sur la Map... ;)

...

Par fauxninja le 21/12/2002 à 17:47:58 (#2848492)

j'ai un probleme avec un script de repas: j'aimerai que lors du repos, le PJ consome un item de tag RestProvisions, bluepoint restprovisions.
le fait est que cet item est une potino (on peu pas faire autrement apparement) et que les potions se mettent par paket de 2, 3 juska 10.
la logique de ce script est d'effacer son lot de n provision, et de lui remettre un lot de n-1 provision
mais j'ai un probleme, di en dessous


object oProvisions = GetItemPossessedBy(oPC, "RestProvisions");

// set a stack size
int i = GetNumStackedItems(oProvisions);


// et plus loin, si il a de la bouffe:

i = i - 1;
DestroyObject(oProvisions);
string sItemTemplate;
object oTarget;
int nStackSize;
CreateItemOnObject(sItemTemplate="restprovisions", oTarget=oPC, nStackSize=i);


le blupoint des repas est "restprovisions"

ca devrai consomer une provision de son lot selectionné...
seulement, ca consomme tout, et ca remet rien...
en enlevent le "destroyObjetcj" ca lui rajoute le bon nombre de repas, mais ca en enleve pas.
je sai pas quoi changer pour que ca lui enleve un repas en tout pour un repas....

Par Jaha Effect le 21/12/2002 à 17:52:03 (#2848524)

Ben met nous le script complet là c'est pas évident avec des petits bout de scripte

Jaha Effect :D

Par fauxninja le 21/12/2002 à 17:56:57 (#2848555)



void main()
{



object oPC = GetLastPCRested();
int iHostileRange = 30;





// set an object equal to the provisions on the player. This will be
// OBJECT_INVALID if the player doesn't have any
object oProvisions = GetItemPossessedBy(oPC, "RestProvisions");

// set a stack size
int i = GetNumStackedItems(oProvisions);


if (GetLastRestEventType() == REST_EVENTTYPE_REST_STARTED)
{

// Check if the PC has provisions, AND if it's a valid PC doing the resting
// I didn't want to get involved in henchmen etc.
if (oProvisions == OBJECT_INVALID && oPC != OBJECT_INVALID)
{
// didn't have provisions and is a valid PC
AssignCommand (oPC, ClearAllActions());
FloatingTextStringOnCreature ("Vous n'arrivez pas a dormir le ventre vide.", oPC);

}
else // player can rest
{
// get nearest creature check proximity hostility etc.
object oCreature = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY);

if (iHostileRange == 0 || (iHostileRange != 0 && GetDistanceToObject(oCreature) <= IntToFloat(iHostileRange)))
{


// generate random number and subtract it from stack, then destroy current stack, replace with stack - increment

i = i - 1;
DestroyObject(oProvisions);
string sItemTemplate; object oTarget; int nStackSize;
CreateItemOnObject(sItemTemplate="restprovisions", oTarget=oPC, nStackSize=i);

// moi ici // CreateItemOnObject("restprovisions", oPC, i);
}
else // Enemy too close for resting
{
AssignCommand (oPC, ClearAllActions());
FloatingTextStringOnCreature ("Vous ne trouvez pas le sommeil.", oPC);

}
}
}

}



voila le script complet.. on peu retrouver les peitts bout que je vou ai envoyé plus haut

le script original c ca:


void main()
{



object oPC = GetLastPCRested();
int iHostileRange = 30;




// set a stack size
int i = 10;

// set an object equal to the provisions on the player. This will be
// OBJECT_INVALID if the player doesn't have any
object oProvisions = GetItemPossessedBy(oPC, "RestProvisions");


if (GetLastRestEventType() == REST_EVENTTYPE_REST_STARTED)
{

// Check if the PC has provisions, AND if it's a valid PC doing the resting
// I didn't want to get involved in henchmen etc.
if (oProvisions == OBJECT_INVALID && oPC != OBJECT_INVALID)
{
// didn't have provisions and is a valid PC
AssignCommand (oPC, ClearAllActions());
FloatingTextStringOnCreature ("Vous n'arrivez pas a dormir le ventre vide.", oPC);

}
else // player can rest
{
// get nearest creature check proximity hostility etc.
object oCreature = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY);

if (iHostileRange == 0 || (iHostileRange != 0 && GetDistanceToObject(oCreature) <= IntToFloat(iHostileRange)))
{
// Initiate Resting, make a Gangus bedroll
object oRestbedroll = CreateObject (OBJECT_TYPE_PLACEABLE, "plc_bedrolls", GetLocation (oPC), FALSE);
SetLocalObject (oPC, "o_PL_Bedrollrest", oRestbedroll);

// generate random number and subtract it from stack, then destroy current stack, replace with stack - increment
i = i - Random(4);
DestroyObject(oProvisions);
// moi ici // CreateItemOnObject("restprovisions", oPC, i);
}
else // Enemy too close for resting
{
AssignCommand (oPC, ClearAllActions());
FloatingTextStringOnCreature ("Vous ne trouvez pas le sommeil.", oPC);

}
}
}


// Resting Finished or Cancelled

if ((GetLastRestEventType() == REST_EVENTTYPE_REST_FINISHED || GetLastRestEventType() == REST_EVENTTYPE_REST_CANCELLED) && GetIsObjectValid(GetLocalObject (oPC, "o_PL_Bedrollrest")))
{
DestroyObject (GetLocalObject (oPC, "o_PL_Bedrollrest"), 0.0f);
DeleteLocalObject (oPC, "o_PL_Bedrollrest");

// add one back to the stack size so too many don't get removed by
// iteration
i = i + 1;
}
}


mais l'histoire du random enlevé, ca marche pas de toutes facon.
et puis c pas ce que je veu, je voudrai plus simple:
1 repos = -1 repas...

Par Jaha Effect le 21/12/2002 à 18:04:52 (#2848595)

Tu as bien vérifié que "restprovisions" c'est le ResRef de ton blueprint de tes rations qui est marqué sur cette ligne et pas sont Tag?

CreateItemOnObject(sItemTemplate="restprovisions", oTarget=oPC, nStackSize=i);



Jaha Effect :D

Par fauxninja le 21/12/2002 à 18:10:34 (#2848627)

je copie cole:


Nom:
Repas

Tag:
RestProvisions

ResRef:
restprovisions

nombre d'unité: 1
cout suplementaire: 3

...

Par Jaha Effect le 21/12/2002 à 18:44:34 (#2848825)

J'ai testé avec un objet viande que j'ai copié, j'ai mis le même Tag que toi mais j'ai utilisé le nouveau resref dans ton script et ça marche à la perfection :D
Essaye de faire comme moi et dis moi en des nouvelles :D

Jaha Effect :D

Par coolstar le 21/12/2002 à 18:59:09 (#2848908)

Quel rapport avec le Sujet??? :confus:

Par Jaha Effect le 21/12/2002 à 19:05:21 (#2848958)

bha faut lire les post au milieu le sujet à évolué.
Mais il est vrai que Fauxninja aurait du faire un nouveau sujet de post.

Jaha Effect :D

Par coolstar le 21/12/2002 à 20:02:44 (#2849297)

Ayant suivi le Fil je réalise bien justement qu'on est passé Hors-Sujet... Pas très technique tout ça! :D

Par Jedaï le 21/12/2002 à 22:47:02 (#2850122)

Eeuuhhh.... ça sert à quoi tout ça ?:doute:

Parce que :

string sItemTemplate; object oTarget; int nStackSize;
CreateItemOnObject(sItemTemplate="restprovisions", oTarget=oPC, nStackSize=i);

C'est vraiment n'importe quoi !

Ca sert à rien d'introduire des variables supplémentaires, juste pour l'usage dans une fonction alors que toutes informations sont déjà dans d'autres variables....
Alors normalement tu devrais écrire :
CreateItemOnObject("restprovisions", oPC, i);

ou pour la clarté du code :
string sItemTemplate="restprovisions";
CreateItemOnObject(sItemTemplate, oPC, i);


A part ça, y a une accolade qui se balade à la fin de ton script et vérifie bien si tu as bien mis ce script sur l'event OnRest du module. Autre chose : fais un build de ton module, parfois ça peut aider. :)

Par fauxninja le 22/12/2002 à 0:03:00 (#2850430)

c'est quoi donc un build du module?

Par Jedaï le 22/12/2002 à 12:02:11 (#2852480)

C'est l'une des options d'un des menus d'Aurora (cherche un peu), ça va recompiler tous tes scripts et vérifier toutes tes zones et objets pour vérifier les erreurs. C'est un peu long, mais le faire de temps en temps peut s'avérer salutaire.:D

Par fauxninja le 24/12/2002 à 13:40:37 (#2869436)

pour le respawn de plante (ou d'item en general) j'arrive a le faire, mais c qunad kklun arrive ou quite une zone. j'utilise une zone declancheuse d'Aurora.
mais c pas terrible, car si personne marche sur la zone, ya rien qui pousse, et si kklun fai des va et vien, c la foret vierge.

je voi pas trop comment faire.
et surtout, ou placer le script qui ferai ca....

Par eMRaistlin le 24/12/2002 à 13:46:01 (#2869496)

Pour le respawn d'un placeable, je comprends pas pourquoi vousutilisez pas la meme fonction que pour vos creature ??


Apres tout... quelque part dans votre systeme de respawn, y'a un CreateObject(OBJECT_TYPE_CREATURE,"resref",location")... pourquoi ne pas le rempacer pas un CreateObject(OBJECT_TYPE_PLACEABLE,"resref",location") et sauvegarder sous un autre nom ???



ou bien j'ai rate un truc ??

Par fauxninja le 24/12/2002 à 13:49:37 (#2869539)

non mais le probleme c pas le type du respawn, c de afire en sorte que ca se fasse toute les 30 minutes.
je voi pas comment faire...

JOL Archives 1.0.1
@ JOL / JeuxOnLine