Systéme d'offrande

Répondre
Partager Rechercher
Bonjour à tous !

Voilà je voudrais faire un système d'offrande dans un temple sur mon module, je m'explique :

Les joueurs pourraient déposer une quantité de PO de leurs choix, qui viendrait s'ajouter à la somme total déjà mise. Je voudrais être le seul à pouvoir vider et consulter le montant de l'offrande.

Avez vous une idée ?

Merci d'avance,
Exodia
Tu poses un contenant, genre piédestal avec comme propriétés intrigue, utilisable et inventaire.
Sur son OnClose, tu vérifies le contenu. Si c'est de l'or, tu vides, tu l'ajoutes à une variable locale sur le contenant pour ne pas qu'on puisse le piller.
Tu crées un PNJ prêtre qui a un dialogue. Dans l'action conséquente d'une branche, tu testes si c'est toi qui lui parles, tu lui demandes l'or et tu remets la variable locale à 0. Accessoirement, en compliquant un peu les choses, tu peux enregistrer le nom du donateur et le montant donné.
C'est en tous les cas la façon la plus simple de procéder et c'est comme ça que je ferais ça si j'avais à le faire.

Si ça doit être persistant, tu remplaces la variable locale par une variable campagne. Pour les valeurs entières, la base Bioware va bien.
Je fais un peu comme ça mis à part que j'utilise le OnDisturbed plutôt que le OnClose, du coup il est possible de mettre plusieurs objets - oui il fonctionne aussi avec les objets donnés en offrande, sauf les objets volés - sans avoir à ouvrir et fermer plusieurs fois le contenant .
Bonjour,
le OnDisturbed fonctionne dans les deux sens il me semble, comment fais tu la différence entre ce qui est donné par le pj et ce qui est donné par le plaçable?
ex: si je place un compteur sur le OnDisturbed ma variable sera incrémentée que je prenne ou que je place ou peut être je me trompe.
Citation :
Publié par phenx
Bonjour,
le OnDisturbed fonctionne dans les deux sens il me semble, comment fais tu la différence entre ce qui est donné par le pj et ce qui est donné par le plaçable?
ex: si je place un compteur sur le OnDisturbed ma variable sera incrémentée que je prenne ou que je place ou peut être je me trompe.
Avec GetInventoryDisturbType sur l'évènement qui te renvoie si c'est un ajout au contenant (INVENTORY_DISTURB_TYPE_ADDED), un retrait (INVENTORY_DISTURB_TYPE_REMOVED), ou même un vol (INVENTORY_DISTURB_TYPE_STOLEN).
Oui je suis bien d'accord, mais pour avoir le tag il me faut l'objet or j'ai pas de retour d'après le Lexicon ça retourne OBJECT_INVALID si c'est de l'or .
Mon script est plus complexe je place là le plus simple.
Code PHP:

object oItem      GetInventoryDisturbItem();
string sItemNom GetName(oItem);
string sTag         GetTag(OBJECT_SELF);
string sItemTag  GetTag(oItem);

int nType=GetInventoryDisturbType();
switch (
nType)
     {
     case 
INVENTORY_DISTURB_TYPE_REMOVED:
     
WriteTimestampedLogEntry("*** "+sTag+" Objet donné: "+sItemNom+sItemTag);
     } 
Citation :
Publié par Sherazade
sans avoir à ouvrir et fermer plusieurs fois le contenant .
Je n'ai pas compris ce que tu voulais dire par là. Pourrais-tu explicationnationner plus avant à un esprit lent ?
Citation :
Publié par phenx
Oui je suis bien d'accord, mais pour avoir le tag il me faut l'objet or j'ai pas de retour d'après le Lexicon ça retourne OBJECT_INVALID si c'est de l'or .
Mon script est plus complexe je place là le plus simple.
Voilà un bout de script que j'ai dans le OnDisturbed de braseros à offrandes :
Code PHP:

#include "lib_religion"

void main()
{
    
object oItem GetInventoryDisturbItem();
    
object oPlayer GetLastDisturbed();
    
string sTag GetTag(oItem);

    if (
GetStolenFlag(oItem)) FloatingTextStringOnCreature("Quelle honte de vouloir deposer un objet qui ne vous appartient pas en offrande..."oPlayerFALSE);
    else
    {
        
int iGold;

        if (
sTag == "NW_IT_GOLD001"iGold GetItemStackSize(oItem);
        else 
iGold GetGoldPieceValue(oItem);

        
int iGift GetMyGift(oPlayer) + iGold;

        
SetMyGift(oPlayeriGift);
        
SendMessageToPC(oPlayerGetName(oItem)+" offert en offrande pour un montant de "+IntToString(iGold));
        
SendMessageToPC(oPlayer"Vos offrandes s'elevent a hauteur de "+IntToString(iGift));
        if (
iGift <= 0FloatingTextStringOnCreature("Cette somme est insuffisante pour retrouver les bonnes graces de "+GetDeity(oPlayer)+"."oPlayerFALSE);
    }
    
AssignCommand(oItemClearAllActions());
    
DestroyObject(oItem);

Citation :
Publié par Azmathiel
Je n'ai pas compris ce que tu voulais dire par là. Pourrais-tu explicationnationner plus avant à un esprit lent ?
Si tu testes sur le OnClose, le personnage doit fermer le contenant, si tu testes sur le OnDisturbed, il n'est pas obligé de le fermer. Pour ma part, je regarde les objets à chaque fois qu'ils sont mis, je ne fais donc pas de parcours de l'inventaire du contenant. Manipulation que tu dois faire sur le OnClose. Par contre, je ne sais pas au niveau performance laquelle des deux méthodes est la plus rapide et la moins gloutonne, il faudrait benchmarker .
Sur un test simple:
Code PHP:

if (sItemTag == "NW_IT_GOLD001")
           
iGold GetItemStackSize(oItem);
     
SpeakString("["+sItemTag+"] ["+sItemNom+"]"); 
Ok ça marche pas pour une distribution de trésor
Si le pj place de l'or ça marche.
Si le pj prend l'or ça marche plus.
Ma conclusion
Si le contenant à de l'or à distribuer aucun object n'est retourné.
Répondre

Connectés sur ce fil

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