Cadeau de groupe

Répondre
Partager Rechercher
Bonsoir à tous ^^

J'aurais besoin d'un script spécifique au tag de groupe.

Je m'explique: pour l'ouverture de mon mag , j'offre un gift mais je voudrais que ce ne soit que ceux qui porte le tag de mon groupe qui le récupère en cliquant dessus .

Ou pourrais je trouver ça ?
La personne clic et si elle est du meme groupe que l'objet dans lequel est ce script ca lui donne l'objet de l'inventaire de l'objet dont le nom est placé dans la variable GIFT.

Code:
string  GIFT = "gift";


default
{
    touch_start(integer num_detected)
    { 
        key agent = llDetectedKey(0);
        if (llSameGroup(agent) == TRUE)
        {
            llGiveInventory( agent, GIFT);
        }
        else
        {
            llSay(0, "Autorisé aux membres seulement.");

        }
    }
}
N'hesites pas si tu as des questions.
__________________
--- Ahuri Serenity ---
Pense ton script !
Un peu plus élaboré, j'ai fait ce script il y a 15 jours pour Lundrah.
- si l'avatar n'est pas dans le groupe, il propose de joindre avec le lien dans le chat.
- Il donne tous les articles qu'il contient dans un folder dont on peut régler le nom en tête de script.
- Il ne donne qu'une fois : cela permet de donner des articles de valeur en nocopy; j'ai limité la liste des avatars mémorisés à 300 (c'est à dire que le 1er est effacé quand on arrive à 300) mais on doit pouvoir aller dans les 1000 si nécessaire.
Code:
string floattext = "Click me to obtain a gift\ngroup only";//le texte qui flotte au dessus de l'objet
string folder = "Lundrah's gifts";//le nom du folder dans lesquel seront mis les objets dans l'inventaire
list items;
list avatars;
string groupID;

init(){
    groupID =llList2String(llGetObjectDetails(llGetKey(), [OBJECT_GROUP]), 0);
    items = [];
    integer nb = llGetInventoryNumber(INVENTORY_ALL);
    string nomscript = llGetScriptName();
    integer i;
        for (i = 0 ; i < nb ; i++){
        string item = llGetInventoryName(INVENTORY_ALL, i);
        if (item != nomscript) items += [item] ;
        }
}

default{
    state_entry(){
        llSetText(floattext, <1,1,1>,1);
        init();
    }
    
    on_rez(integer numb){
        init();
    }
    
    changed(integer change) { 
        if (change & CHANGED_INVENTORY) init();
    }
    touch_start(integer t){
        integer i;
        for(i = 0; i < t; i++){
            key avkey = llDetectedKey(i);
            string avname = llDetectedName(i);
            if (llSameGroup(avkey)){
                integer s = llListFindList( avatars, [avname] );
                    if (s == -1){
                        llGiveInventoryList(avkey, folder, items);
                        avatars += [avname];
                        if (llGetListLength(avatars) > 300) avatars = llDeleteSubList(avatars, 0 , 0 );
                    }else {
                        llSay(0,"Sorry "+avname+" you had aldready obtained your gift");
                    }
            }else
                llSay(0,"Sorry "+avname+" you must have this group : secondlife:///app/group/" + groupID + "/about click the link to join");
        }
    }
}
Wep ^^

par contre, je me demande : dans l'inventaire tous les objets ont forcement un nom différent, donc on ne pourrait pas construire la liste d'un trait sans le test if (item != nomscript) et ensuite faire un llListFindList(items,[llGetScriptName()]) pour recuperer l'indice de l'element a supprimer à la place par soucis d'optimisation ? C'est peut etre aussi gourmand j'en sais trop rien.
__________________
--- Ahuri Serenity ---
Pense ton script !
...
Pour une nouvelle création, j'aimerai utiliser le script fait par Elenia pour donner un cadeau mais après un certain temps, par exemple 5 mn (mais que je pourrais changer) de présence sur une pose ball. En plus j'aimerai que ce cadeau soit différent toutes les 5 mn. Merci
Un petit script matinal pour dérouiller les doigts.

J'ai repris des éléments du script d'Elenia et j'ai ajouté ce que tu demandes. Par contre il n'y a plus de gestion des avatars pour donner une seule fois étant donné que le cadeau change. Pour gérer le cadeau unique avec la multiplicité des cadeaux ça serait un peu plus compliqué .

Par contre l'avatar ne reçoit qu'un cadeau même s'il reste encore le délai imparti. Ca serait facile à changer.

Pas de test de groupe non plus, il le faut ?

Je n'ai pas testé et codage rapide donc peut-être des bugs qui traînent...

Code PHP:

// *************
//  Paramètres
// *************

// Texte flottant
string sText "Sit on me to get a gift";
// Dossier pour mettre les cadeaux dans l'inventaire
string sFolder "Moanas's gifts";
// Délai de présence assise en minutes
integer i_time_assis 5;
// Délai de changement de cadeau en minutes
integer i_time_cadeau 5;

// **********************
//  Variables globales
// **********************

// Liste des noms des cadeaux
list lCadeaux;
// Index qui pointe le cadeau
integer iIndex;
// Début assise
float f_assise_start;
// Repère temporel pour changement de cadeau
float f_cadeau_start;
// Clé de l'avatar
key k_ava;

// Initialisation
init(){
    
// Remplissage de la liste des cadeaux
    
lCadeaux = [];
    
integer nb llGetInventoryNumber(INVENTORY_ALL);
    
string nomscript llGetScriptName();
    
integer i;
    for (; 
nb i++){
        
string item llGetInventoryName(INVENTORY_ALLi);
        if (
item != nomscriptlCadeaux += [item];
    }
    
// Initialisation index
    
iIndex 0;
    
// Repère temporel pour cadeau
    
f_cadeau_start llGetTime();
    
// Initialisation tempo avatar
    
f_assise_start .0;
    
// Départ timer
    
llSetTimerEvent(60.0);
}

default
{
    
state_entry(){
        
// Texte flottant
        
llSetText(sText, <1.01.01.0>, 1.0);
        
// Point d'assise (indispensable à décommenter au besoin)
        // llSitTarget(<0.0, 0.0, 0.1>, ZERO_ROTATION);
        
init();
    }

    
on_rez(integer numb){
        
init();
    }

    
changed(integer change)
    {
        if (
change CHANGED_LINK)
        {
            
// Clé de l'avatar
            
k_ava llAvatarOnSitTarget();
            
// Avatar présent
            
if (k_ava)
            {
                
llSay(0"Hello " llKey2Name(k_ava)
                    + 
", you'll get a gift in " + (string)i_time_assis " minutes");
                
f_assise_start llGetTime();
            }
            
// Avatar absent
            
else f_assise_start 0;
        }
        
// Changement dans l'inventaire
        
else if (change CHANGED_INVENTORYinit();
    }

    
timer()
    {
        
// Avatar présent ?
        
if(f_assise_start != .0)
        {
            
// Test de durée d'assise
            
if(llGetTime() - f_assise_start >= (float)i_time_assis)
            {
                
// Reset assise
                
f_assise_start .0;
                
// Cadeau
                
llGiveInventoryList(k_avasFolder, [llList2String(lCadeauxiIndex)]);
            }
        }
        
// Test pour le changement du cadeau
        
if(llGetTime() - f_cadeau_start >= (float)i_time_cadeau)
        {
            
f_cadeau_start llGetTime();
            if(++
iIndex llGetListLength(lCadeaux)) iIndex 0;
        }
    }

Oui en fait l'idée c'était de donner une suite de cadeaux différents. Ce qui serait bien c'est qu'on puisse indiquer quel cadeau et dans quel ordre parce que là en plus ça donne 1 cadeau mais de façon aléatoire donc aussi bien les scripts que l'anim alors qu'il faudrait que ça donne que des objets.
Pas exactement .. il faut remplacer aussi dans llGetInventoryName mais de manière plus générale remplacer INVENTORY_ALL par INVENTORY_OBJECT partout.

Ensuite j'ai entendu qu'il fallait pouvoir choisir l'ordre .. :

  • soit laisses tel quel le script et tu renommes les objets de sorte qu'ils apparaissent dans le bon ordre
  • soit tu optes pour une configuration statique dans le script ou dynamique via une notecard.
Ben donne lui un truc tout fait c'est plus simple comme ça.
Vous battez pas les amis, j'ai juste demandé de l'aide pour un script.
Chacun fait selon ses envies.

merci à ceux qui m'en donne des petits bouts même si je vais mettre des heures à voir comment ça fonctionne. Merci beaucoup à ceux qui me font gagner du temps en me donnant des scripts tout fait. Je bidouille mais je n'ai pas l'intention d'apprendre à scripter. Il y a des gens plus compétents que moi qui passent leur temps à ça parce que ça correspond plus à leur compétence. Ce temps, moi, je le mets à faire des builds, des créations que je donne comme ici à tous sans contrepartie. Je le mets à organiser des expos pour les autres artistes. Voilà, c'est ce que j'appelle l'intelligence collective. On n'a pas tous les mêmes compétences mais on peut les partager.
Oui on reste calme

J'ai commencé, je continue.

Avec tes nouveaux éléments et après correction des bugs :

Code PHP:

// *************
//  Paramètres
// *************

// Texte flottant
string sText "Sit on me to get a gift";
// Délai de présence assise en minutes
integer i_time_assis 5;
// Délai de changement de cadeau en minutes
integer i_time_cadeau 5;
// Liste des cadeaux
list lCadeaux = [
    
"cadeau1",
    
"cadeau2",
    
"cadeau3"
        
];

// **********************
//  Variables globales
// **********************

// Index qui pointe le cadeau
integer iIndex;
// Clé de l'avatar
key k_ava;

default
{
    
state_entry(){
        
// Texte flottant
        
llSetText(sText, <1.01.01.0>, 1.0);
        
// Point d'assise (indispensable à décommenter au besoin)
        //llSitTarget(<0.0, 0.0, 0.5>, ZERO_ROTATION);
    
}

    
changed(integer change)
    {
        if (
change CHANGED_LINK)
        {
            
// Clé de l'avatar
            
k_ava llAvatarOnSitTarget();
            
// Avatar présent
            
if (k_ava)
            {
                
llInstantMessage(k_ava"Hello " llKey2Name(k_ava)
                    + 
", you'll get a gift in " + (string)i_time_assis " minutes");
                
// Initialisation index
                
iIndex 0;
                
// Départ timer
                
llSetTimerEvent((float)i_time_assis 60.0);
                
// Suppression du texte flottant
                
llSetText("", <.0.0.0>, .0);
            }
            
// Avatar absent
            
else
            {
                
// Arrêt du timer
                
llSetTimerEvent(.0);
                
// Texte flottant
                
llSetText(sText, <1.01.01.0>, 1.0);
            }
        }
    }

    
timer()
    {
        
// Cadeau
        
llGiveInventory(k_avallList2String(lCadeauxiIndex++));
        
// Test plus de cadeau
        
if(iIndex == llGetListLength(lCadeaux))
        {
            
llSetTimerEvent(.0);
            
llInstantMessage(k_ava"You got all gifts !!!");
        }
        
// Test encore des cadeaux
        
else
        {
            
llSetTimerEvent((float)i_time_cadeau 60.0);
            
llInstantMessage(k_ava"You'll get a new gift in " + (string)i_time_cadeau " minutes");
        }
    }

Citation :
Publié par Ahuri Serenity
Eheh tu n'as donc jamais vu des scripteurs discuter voir débattre ? Ca peut virer au bain de sang !!!
Tiens c'est une idée ça, je vais organiser des combats de scripteurs.
Répondre

Connectés sur ce fil

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