Giver objets + list par notecard

Répondre
Partager Rechercher
Bonjour voilà,
je recherche a modifier un de mes scripts qui est un giver d'objets via un liste pour mettre la liste via notecard ( la raison est toute simple, je veux créer un giver pour des amies, et qu'elle puisse modifier la liste sans ouvrir le script et risquer de la casser), ça doit être une fonction simple a faire, mais j'ai bon lire les articles a ce sujet je ne trouve pas le moyen de le faire fonctionner

list laccess = ["theoaphrodite Devin",
"Angy Wirefly",
"Loki Adderstein"];
integer nStart = 0;
integer DIALOG_CHANNEL;
integer nTotalCardGiven;
dialogCard(key id)
{
// how many notecards ?
integer nCardCount = llGetInventoryNumber(INVENTORY_OBJECT);

// prepare a menu with inventory notecard
string cTxt = "";
list lDlg;
if (nStart > 0) { lDlg += "<< Prev.";}
else { lDlg += "-";}
lDlg += "Close";
if (nStart + 9 < nCardCount) {lDlg += "Next >>";}
else { lDlg += "-";}
integer nAdd = 0;
string cItem = "none";
while (cItem != "")
{
cItem = llGetInventoryName(INVENTORY_OBJECT, nStart + nAdd);
if (cItem != "")
{
if (nAdd < 9)
{
// add to the text
nAdd++;
string cP = (string)(nAdd + nStart) + ".";
cTxt += "\n" + cP + " " + cItem;
lDlg += (string)cP;
}
else
{
cItem = "";
}
}
}
llDialog(id, cTxt, lDlg, DIALOG_CHANNEL);

}

txtRefresh()
{
llSetText("Liquides" + "",
<1, 1, 1>, 1);
}

default
{
state_entry()
{
// set text
txtRefresh();

// dialog menu random channel
DIALOG_CHANNEL = llRound(llFrand(999999) + 9999);
llListen(DIALOG_CHANNEL, "", NULL_KEY, "");
}

touch_start(integer total_number)
{
// touch key
key id = llDetectedKey(0);
string nom = llDetectedName(0);
if (llListFindList(laccess,[nom])!=-1)
{
dialogCard(id);
llSay(0, nom + " prend");
}
else
llSay(0,"Desolé, " + nom + ", vous n'êtes pas autorisé à ouvrir la boite");
}

// waiting for an answer
listen(integer channel, string name, key id, string message)
{
if (channel == DIALOG_CHANNEL)
{
// prev/next/close
if (message == "<< Prev.")
{
nStart -= 9;
dialogCard(id);
}
else if (message == "Next >>")
{
nStart += 9;
dialogCard(id);
}
else if (message == "Close")
{
// nothing to d0!
}
else if ((integer)message > 0)
{
// extract the notecard name
string cCardName = llGetInventoryName(INVENTORY_OBJECT, ((integer)message) - 1);
if (cCardName != "")
{
llInstantMessage(id, "Livraison '" + cCardName + "'...");
llGiveInventory(id, cCardName);
nTotalCardGiven++;
txtRefresh();
nStart = 0;
}
else
{
llInstantMessage(id, ".");
}
}
}
}
}
hellow....j' ai pas trop le temps, mais un truc saute aux yeux....ton script cherche des noms de notecards en regardant parmi les objets...prob.
d' autre part, j' ai pas trop compris le truc au départ ....il faut regarder dans une liste d' amis sur notecard pour donner des objets d' une liste sur notecard ??
Et petite remarque au passage, que je dis toujours aux gens maniaques des notecards....il y a autant de risques à ouvrir un script et de changer qlq chose que d' ouvrir une notecard et de changer qlq chose, avec le même résultat à l' arrivée...ça ne marchera pas....avec même un petit avantage pour le script car il ralera s'il trouve des erreurs de synthaxe, alors que la notecard gobera tout.A mon sens , les notecards ne se justifient que pour des grosses listes ou volumes d' instructions...reglages de balls, d' animations etc .. ....à+
Bonjour,

voici un premier jet qui répond, je l'espère, à ta demande theoaphrodite
Code:
// v0.2 by djphil for theoaphrodite

string notecard_name = "whitelist";
key notecard_query;
integer notecard_line;
list laccess = [];
integer nStart;
integer canal;
integer ecoute;

dialogCard(key id)
{
    integer nObjectCount = llGetInventoryNumber(INVENTORY_OBJECT);
    string cTxt = "";
    list lDlg;

    if (nStart > 0) { lDlg += "<< Prev.";}
    else {lDlg += "-";}
    
    lDlg += "Close";
    
    if (nStart + 9 < nObjectCount) {lDlg += "Next >>";}
    else { lDlg += "-";}
    
    integer nAdd = 0;
    string cItem = "none";
    
    while (cItem != "")
    {
        cItem = llGetInventoryName(INVENTORY_OBJECT, nStart + nAdd);

        if (cItem != "")
        {
            if (nAdd < 9)
            {
                nAdd++;
                string cP = (string)(nAdd + nStart) + ".";
                cTxt += "\n" + cP + " " + cItem;
                lDlg += (string)cP;
            }

            else 
            {
                cItem = "";
            }
        }
    }

    llDialog(id, cTxt, lDlg, canal);
}

default
{
    state_entry()
    {
        if (llGetInventoryType(notecard_name) == INVENTORY_NONE)
        {
            llSay(PUBLIC_CHANNEL, "The notecard '" + notecard_name + "'  is missing!");
            return;
        }

        llSetText("Liquides", <1.0, 1.0, 1.0>, 1.0);
        llSay(PUBLIC_CHANNEL, "Création de la liste des utilisateurs autorisés ...");
        notecard_query = llGetNotecardLine(notecard_name, notecard_line);
    }

    dataserver(key query_id, string data)
    {
        if (query_id == notecard_query)
        {
            if (data == EOF)
            {
                state ready;
            }

            else
            {
                ++notecard_line;

                if (data != "")
                {
                    data = llStringTrim(data, STRING_TRIM);
                    laccess += data;
                    llSay(PUBLIC_CHANNEL,  "Utilisateur autorisé " + (string)notecard_line + ") " + data);
                }

                notecard_query = llGetNotecardLine(notecard_name, notecard_line);
            }
        }
    }
}

state ready
{
    state_entry()
    {
        llSay(PUBLIC_CHANNEL, "Liste des utilisateurs autorisés crée avec succès ...");
        canal = -1 -(integer)("0x" + llGetSubString((string)llGetKey(), -7, -1));
    }

    touch_start(integer number)
    {
        key id = llDetectedKey(0);
        string nom = llDetectedName(0);

        if (llListFindList(laccess, [nom]) != -1)
        {
            llListenRemove(ecoute);
            ecoute = llListen(canal, "", NULL_KEY, "");
            dialogCard(id);
            llSetTimerEvent(60.0);
            llSay(PUBLIC_CHANNEL, nom + " prend ...");
        }

        else llSay(PUBLIC_CHANNEL, "Desolé, " + nom + ", vous n'êtes pas autorisé à ouvrir cette boite");
    } 

    listen(integer channel, string name, key id, string message)
    {
        if (channel == canal)
        {
            if (message == "<< Prev.")
            {
                nStart -= 9;
                dialogCard(id);
                llSetTimerEvent(60.0);
                return;
            }

            else if (message == "Next >>")
            {
                nStart += 9;
                dialogCard(id);
                llSetTimerEvent(60.0);
                return;
            }

            llSetTimerEvent(0.0);
            llListenRemove(ecoute);

            if ((integer)message > 0)
            {
                string cCardName = llGetInventoryName(INVENTORY_OBJECT, ((integer)message) - 1);

                if (cCardName != "")
                {
                    llInstantMessage(id, "Livraison de l'objet '" + cCardName + "' ...");
                    llGiveInventory(id, cCardName);
                    nStart = 0;
                }

                else
                {
                    llInstantMessage(id, "...");
                }
            }
        }
    }

    timer()
    {
        llSetTimerEvent(0.0);
        llListenRemove(ecoute);
        llSay(PUBLIC_CHANNEL, "Désolé, le temps est écoulé ....");
    }

    changed(integer change)
    {
        if (change & CHANGED_INVENTORY)
        {
            llResetScript();
        }
    }
}
La notecard doit se nomer "whitelist" (mais tu peux changer dans le script).
Le format de la notecard est:
Code:
first1 last1
first2 last2
first3 last3
Notes:
Tu peux avoir des espaces avant le nom complet ou après mais pas entre.
Tu peux aussi avoir des lignes vides.
MAIS tu dois avoir un seul nom complet par ligne.

Ici, la notecard permet de donner l'object avec le script no modif mais néanmoins configurable.

Bonne année
Merci beaucoup ça fonctionne parfaitement.
Citation :
Publié par djphil
Bonjour,

voici un premier jet qui répond, je l'espère, à ta demande theoaphrodite
Code:
// v0.2 by djphil for theoaphrodite

string notecard_name = "whitelist";
key notecard_query;
integer notecard_line;
list laccess = [];
integer nStart;
integer canal;
integer ecoute;

dialogCard(key id)
{
    integer nObjectCount = llGetInventoryNumber(INVENTORY_OBJECT);
    string cTxt = "";
    list lDlg;

    if (nStart > 0) { lDlg += "<< Prev.";}
    else {lDlg += "-";}
    
    lDlg += "Close";
    
    if (nStart + 9 < nObjectCount) {lDlg += "Next >>";}
    else { lDlg += "-";}
    
    integer nAdd = 0;
    string cItem = "none";
    
    while (cItem != "")
    {
        cItem = llGetInventoryName(INVENTORY_OBJECT, nStart + nAdd);

        if (cItem != "")
        {
            if (nAdd < 9)
            {
                nAdd++;
                string cP = (string)(nAdd + nStart) + ".";
                cTxt += "\n" + cP + " " + cItem;
                lDlg += (string)cP;
            }

            else 
            {
                cItem = "";
            }
        }
    }

    llDialog(id, cTxt, lDlg, canal);
}

default
{
    state_entry()
    {
        if (llGetInventoryType(notecard_name) == INVENTORY_NONE)
        {
            llSay(PUBLIC_CHANNEL, "The notecard '" + notecard_name + "'  is missing!");
            return;
        }

        llSetText("Liquides", <1.0, 1.0, 1.0>, 1.0);
        llSay(PUBLIC_CHANNEL, "Création de la liste des utilisateurs autorisés ...");
        notecard_query = llGetNotecardLine(notecard_name, notecard_line);
    }

    dataserver(key query_id, string data)
    {
        if (query_id == notecard_query)
        {
            if (data == EOF)
            {
                state ready;
            }

            else
            {
                ++notecard_line;

                if (data != "")
                {
                    data = llStringTrim(data, STRING_TRIM);
                    laccess += data;
                    llSay(PUBLIC_CHANNEL,  "Utilisateur autorisé " + (string)notecard_line + ") " + data);
                }

                notecard_query = llGetNotecardLine(notecard_name, notecard_line);
            }
        }
    }
}

state ready
{
    state_entry()
    {
        llSay(PUBLIC_CHANNEL, "Liste des utilisateurs autorisés crée avec succès ...");
        canal = -1 -(integer)("0x" + llGetSubString((string)llGetKey(), -7, -1));
    }

    touch_start(integer number)
    {
        key id = llDetectedKey(0);
        string nom = llDetectedName(0);

        if (llListFindList(laccess, [nom]) != -1)
        {
            llListenRemove(ecoute);
            ecoute = llListen(canal, "", NULL_KEY, "");
            dialogCard(id);
            llSetTimerEvent(60.0);
            llSay(PUBLIC_CHANNEL, nom + " prend ...");
        }

        else llSay(PUBLIC_CHANNEL, "Desolé, " + nom + ", vous n'êtes pas autorisé à ouvrir cette boite");
    } 

    listen(integer channel, string name, key id, string message)
    {
        if (channel == canal)
        {
            if (message == "<< Prev.")
            {
                nStart -= 9;
                dialogCard(id);
                llSetTimerEvent(60.0);
                return;
            }

            else if (message == "Next >>")
            {
                nStart += 9;
                dialogCard(id);
                llSetTimerEvent(60.0);
                return;
            }

            llSetTimerEvent(0.0);
            llListenRemove(ecoute);

            if ((integer)message > 0)
            {
                string cCardName = llGetInventoryName(INVENTORY_OBJECT, ((integer)message) - 1);

                if (cCardName != "")
                {
                    llInstantMessage(id, "Livraison de l'objet '" + cCardName + "' ...");
                    llGiveInventory(id, cCardName);
                    nStart = 0;
                }

                else
                {
                    llInstantMessage(id, "...");
                }
            }
        }
    }

    timer()
    {
        llSetTimerEvent(0.0);
        llListenRemove(ecoute);
        llSay(PUBLIC_CHANNEL, "Désolé, le temps est écoulé ....");
    }

    changed(integer change)
    {
        if (change & CHANGED_INVENTORY)
        {
            llResetScript();
        }
    }
}
La notecard doit se nomer "whitelist" (mais tu peux changer dans le script).
Le format de la notecard est:
Code:
first1 last1
first2 last2
first3 last3
Notes:
Tu peux avoir des espaces avant le nom complet ou après mais pas entre.
Tu peux aussi avoir des lignes vides.
MAIS tu dois avoir un seul nom complet par ligne.

Ici, la notecard permet de donner l'object avec le script no modif mais néanmoins configurable.

Bonne année
Répondre

Connectés sur ce fil

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