OnActivateItem et CreateItem, les parchemins infinis

Répondre
Partager Rechercher
Oui, un deuxieme, chuis en forme, enfin je crises surtout là
bref
J'ai eu besoin de créer un pachemins sans sorts, comme déclencheur de pouvoir unique en fait.
Donc, je fais mon parch, je lui met pouvoir unique, et Ho! stupeur, pas moyen de mettre pouvoir unique illimité
Là je me dis, "arg, bon tant pis je le recrérais dans l'inventaire"
Et ben kedal
pas moyen d'executer ni un copyobject ni un createitemonobject dans le onactivateitem
Il a un probleme avec ces fonctions ?
J'ai vérifié les Resrerf, en mettant des GetResRef, en choppant les resref dans l'editeur, en prenant des resref commun (épée longue) R I E N
le test
Code PHP:

if(!GetIsObectValid(CreateItemOnObject("ResRef"oPC)))PrintString("ObjectInvalid"); 

Me renvoi T J R S "ObjectInvalid" dans le log, c'est super frustrant . . . j'ai manqué qq chose ?
Quelqu'un aurait un technique pour des parchemins illimité ?
Oui bon ok j'ai pas aurora sur le bon pici alors c'est de tête
mais si tu pouvais me donner ton code que je compare
moi j'avais fais un machin du style
(avec passage par diskette 3.5 pc svp)
pour tester :
Code PHP:

void main()
{
 
object oItem GetItemActivated();
   
object oPC GetItemActivator();
object oArea;
vector vVec;
float fPos;
       
object oParch CopyObject(oItemlocation(oAreavVecfPos), oPC);
       
CreateItemOnObject("wswls002",  oPC);
       if(!
GetIsObjectValid(oParch))
       
PrintString("Parche cree invalide");
       }

et RIEN, si ca n'est "Parche cree invalide" dans le log :sangloter:

edit : MERCI *est déjà parti essayer*
bon, ben evidement ca marche . . . donc plus de problème, je me demande si je dois en rire ou en pleurer *ahem*

bref, merci

mais n'empêche que j'arrive toujours pas à créer un objet dans le onactivateitem . . . là maintenant tout de suite ca me sert à rien, mais bon, j'aimerai bien comprendre quand même !
Alors, personnellement je te conseillerais de faire ceci :

1 cliques sur "Paint items"
2 cliques sur "Custom"
3 cliques droit et choisis "New"
4 Choisis "Miscellaneous Medium"
5 Attribues lui un nom
6 Places le dans "Miscellaneous/Scrolls"
7 Coches "Launch item properties" puis sur "Finish"
8 Cliques sur l'onglet "Appeareance", choisis le portrait que tu veux
9 Cliques sur l'onglet "Properties", choisis "Cast Spell/Unique Power ", ajoutes le
10 Edites les propriétés, met "unlimited used/day"
11 Cliques sur "OK"

Voilà ton objet est créé.


A présent le code, à mettre dans le OnActivateitem :




Code PHP:

void main()
{
 
object oItemActivatedoItemActivatedTargetoItemActivator;
 
string sItemActivated;

 
oItemActivated GetItemActivated();
 
oItemActivatedTarget GetItemActivatedTarget();
 
oItemActivator GetItemActivator();
 
sItemActivated GetTag(oItemActivated);

 if ( 
sItemActivated == "TagDeTonParchemin")
  {
   
/*
     Ici tu mets ce que tu veux que l'activation de ton parchemin fasse
   */
  
}


merci, c'est ce que j'avais fais (sauf que j'avais mis "divers fin (petit ?)" )
ca marche, mais mon "problème", c'est que bien que j'ai trouvé une solution de "rechange" (bien plus logique et éfficace soit dt en passant merci ) je ne comprend toujours pas pourquoi ca marchait pas :/
fin bon, de toute facon ca va pas non plus m'empêcher de dormir hein !
J'ai retrouver mon code planqué sous 2000 tonnes de posts (ça fait les bras quand on doit se soulever tout ça !!) :
http://www.hellfire.firstream.net/ph...pic.php?t=2044

Mais je te préviens, je crois que ce code ne marche que de façon un peu hasardeuse.... (pas de problème avec ce qui t'intéresse néanmoins : la buche est bien recréée si tu n'as pas de silex ou si tu n'as pas le droit de faire de feu, je sais plus trop, par contre la dernière fois que j'ai essayé, la création du feu déconnait, je crois (parce que ça remonte déjà à....pfiou, longtemps) )
Je remets mon code débarrassé de quelques scories :
Code PHP:

//Dans le OnActivateItem

void SpawnFire(location lFireobject oPJ)
{
  
object oFire CreateObject(OBJECT_TYPE_PLACEABLE"plc_campfr"lFire);
  
AssignCommand(oFirePlayAnimation(ANIMATION_PLACEABLE_ACTIVATE));
  
DelayCommand0.2fRecomputeStaticLighting(GetArea(oFire)));
  
SendMessageToPC(oPJ"Vous allumez rapidement un petit feu avec votre silex, une chaleur agréable vous envahit.");
       

  
//Durée de vie du feu (en s), le 12.0 permet de régler au dixième d'heure près.
  
float fDur HoursToSeconds(1) * 12.0;

  
AssignCommand(GetModule(), DestroyObject(oFirefDur));
}

void main()
{
  
//Récupère l'item qui a utilisé un pouvoir unique
  
object oItem GetItemActivated();

  
//Vérifie s'il s'agit du "bois"
  
if (GetTag(oItem) == "it_bois")
  {
    
//Récupère le PC qui a activé l'item
    
object oPC GetItemActivator();
    
//Et le l'area où est ce PC
    
object oArea GetArea(oPC);

    
//Vérifie si le PC se trouve en ville ou dans un batiment
    
switch (GetLocalInt(oArea"nRest_Status"))
    {
    case 
:
    case 
:
    case 
:
     
      
//Le PC ne peut pas faire de feu de camp ici
      
SendMessageToPC(oPC"Vous ne pouvez pas faire de feu de camp ici !");
      
//Recrée le bois qui a été détruit lors de son utilisation
      
CreateItemOnObject("it_bois"oPC);     
      break;

    case 
//Le PC est dans une zone où on peut faire un feu
     
      
object oSilex GetItemPossessedBy(oPC"it_silex");

      
//Vérifie si le PC n'a pas de silex
      
if (!GetIsObjectValid(oSilex))
      {
        
//Le PC n'a pas de silex, il ne peut pas faire de feu
        
SendMessageToPC(oPC"Vous ne pouvez pas faire de feu de camp sans silex !");
        
//Recrée le bois qui a été détruit lors de son utilisation
        
CreateItemOnObject("it_bois"oPC);
      }
      else 
//Le PC peut enfin faire son feu
      
{
        
location lFeu GetItemActivatedTargetLocation();
        
//Pour faire du feu à distance, vous devez être très fort !
        
AssignCommand(oPCClearAllActions());
        
AssignCommand(oPCActionMoveToLocation(lFeu));
        
AssignCommand(oPCActionPlayAnimation(ANIMATION_LOOPING_GET_LOW1.03.0));
        
AssignCommand(oPCSpawnFire(lFeuoPC));
        
SetCommandable(FALSEoPC);
        
DelayCommand(6.0SetCommandable(TRUEoPC));
      }

    }
  }

Répondre

Connectés sur ce fil

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