boite à tips

Répondre
Partager Rechercher
bonjour à tous !

je voudrai créer un boite à tip avec un indicateur visuel (style thermomètre) au fur et a mesure que le montant des pourboires augmente....

si qql'un peut m'aider avec le script.....

Merci à tous !
d'accord... contre 75% des tips

Plus sérieusement, on peut faire n'importe quoi, de la prim basique avec une texture animée, au tube caoutchouté qui se dresse et se raidit au fur et à mesure, jusqu'à lancer un feu d'artifice quand il a atteint le seuil voulu...

ou un smiley dont le sourire varie en fonction des pourboires...

Bref, à toi de voir ce que tu veux, et après on avisera
Citation :
Publié par master71
d'accord... contre 75% des tips

Plus sérieusement, on peut faire n'importe quoi, de la prim basique avec une texture animée, au tube caoutchouté qui se dresse et se raidit au fur et à mesure, jusqu'à lancer un feu d'artifice quand il a atteint le seuil voulu...

ou un smiley dont le sourire varie en fonction des pourboires...

Bref, à toi de voir ce que tu veux, et après on avisera
Merci Master,
un truc simple une bille qui monte le long d'une graduation, donc 2 prims assez volumineux pour être vu par tous.... ( je suis short en prims ! ()
Merci pour ton aide !
Bon, alors dans le prim 0 (tu le sélectionnes en dernier en liant les 2 prims) qui sert de truc gradué, tu colles le script suivant:
Code:
integer max = 1000; // valeur pour monter la bulle au max
integer lastP = 0;
integer value = 0;
string lastN = "";
string nom = "";
string affiche = "";
key owner = NULL_KEY;

default {
    state_entry() {
        owner = llGetOwner();
        llRequestAgentData(owner, DATA_NAME); }

    dataserver(key queryid, string data) {
        nom = data;
        state run; }

    on_rez(integer num) {
        llResetScript(); }

    changed(integer num) {
        llResetScript(); } }

state run {
    state_entry() {
        llSetPayPrice(100, [10, 200, 500, 1000]);
        llSetTimerEvent(10); }

    timer() {
        llRequestAgentData(owner, DATA_ONLINE); }

    money(key giver, integer amount) {
        lastN = llKey2Name(giver);
        lastP = amount;
        value += amount;
        llInstantMessage(giver, "Thanks for the " + (string)amount + "L$, " + lastN); }

    dataserver(key queryid, string data) {
        integer ol = (integer)data;
        if (ol) {
            llSetColor(<0.0, 1.0, 0.0>, ALL_SIDES);
            affiche = nom + " (online)"; }
        else {
            llSetColor(<1.0, 0.0, 0.0>, ALL_SIDES);
            affiche = nom + " (offline)"; }
        float percent = (float)value / (float)max;
        llMessageLinked(LINK_SET, 0, (string)percent, NULL_KEY);
        string tmp = "Tip Jar for " + affiche + "\n";
        if (lastN != "") { tmp += "Last giver: " + lastN;
            if (lastP > 10) tmp += ", for: " + (string)lastP + "\n";
                else tmp += ", for  peanuts\n"; }
        if (value > 0) tmp += "Earned: " + (string)value + "\n";
            else tmp += "Still empty, sadly.\n";
        llSetText(tmp, <0.0, 0.0, 1.0>, 1.0); }

    on_rez(integer num) {
        llResetScript(); }

    changed(integer num) {
        llResetScript(); } }
En prime ce script gère ton status absent / présent avec changement de couleur du prim.

Et dans la bille tu mets le script suivant:
Code:
float hgh = 4.0; // hauteur de la colonne, < 10m
vector pos = ZERO_VECTOR;

default {
    state_entry() {
        pos = llGetLocalPos(); }

    link_message(integer send, integer can, string mess, key id) {
        float dep = (float)mess * hgh;
        llSetPos(pos + <0, 0, dep>); }

    on_rez(integer num) {
        llResetScript(); }

    changed(integer num) {
        llResetScript(); } }
tu n'as que 2 valeur à changer suivant ce que tu veux: max dans le premier script pour déterminer la valeur pour atteindre le max de ta graduation, et hgh dans le second qui est la hauteur que va parcourir ta bille.
Bonsoir,

Je viens de tester ce script.
Et j'ai une p'tite question.
Apres environ 1O secondes, la bille redescend et le nom de la personne qui a donné un tip disparaît et c'est a nouveau écrit EMPTY. Est-ce un bug ??

Merci.
Bonjour,

Ca retombe bien a 0 après 10 secondes car le calcul du pourcentage s'effectue dans le dataserver (qui sert a savoir si l'owner en online ou pas)

Bref, je déplace la 10aine de ligne qui gère le calcul et l'affichage dans l'event money.
Cela devrait résoudre le pb.

Code PHP:

integer max 1000// valeur pour monter la bulle au max
integer lastP 0;
integer value 0;
string lastN "";
string nom "";
string affiche "";
key owner NULL_KEY;

default
{
    
state_entry() {
        
owner llGetOwner();
        
llRequestAgentData(ownerDATA_NAME);
    }
    
dataserver(key queryidstring data) {
        
nom data;
        
state run;
    }

    
on_rez(integer num) {
        
llResetScript();
    }

    
changed(integer num) {
        
llResetScript();
    }
}

state run {
    
state_entry() {
        
llSetPayPrice(100, [102005001000]);
        
llSetTimerEvent(10);
    }

    
timer() {
        
llRequestAgentData(ownerDATA_ONLINE);
    }

    
money(key giverinteger amount) {
        
lastN llKey2Name(giver);
        
lastP amount;
        
value += amount;
        
llInstantMessage(giver"Thanks for the " + (string)amount "L$, " lastN);

        
////////////// Deplacement depuis data server jusqu'ici
        
float percent = (float)value / (float)max;
        
llMessageLinked(LINK_SET0, (string)percentNULL_KEY);
        
string tmp "Tip Jar for " affiche "\n";
        if (
lastN != "") { tmp += "Last giver: " lastN;
            if (
lastP 10tmp += ", for: " + (string)lastP "\n";
            else 
tmp += ", for  peanuts\n"; }
        if (
value 0tmp += "Earned: " + (string)value "\n";
        else 
tmp += "Still empty, sadly.\n";
        
llSetText(tmp, <0.00.01.0>, 1.0);
        
////////////////////////////////////////////////////////

    
}

    
dataserver(key queryidstring data) {
        
integer ol = (integer)data;
        if (
ol) {
            
llSetColor(<0.01.00.0>, ALL_SIDES);
            
affiche nom " (online)"; }
        else {
            
llSetColor(<1.00.00.0>, ALL_SIDES);
            
affiche nom " (offline)";
        }
    }

    
on_rez(integer num) {
        
llResetScript();
    }

    
changed(integer num) {
        
llResetScript();
    }

Répondre

Connectés sur ce fil

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