1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Bitte schaltet eure Ad Blocker aus. SLinfo kann nur betrieben werden, wenn es durch Werbung Einnahmen erzielt. Vielen Dank!!
    Information ausblenden
  3. Wir freuen uns, wenn du dich in unserem Forum anmeldest. Bitte beachte, dass die Freigabe per Hand durchgeführt wird (Schutz vor Spammer). Damit kann die Freigabe bis zu 24 Stunden dauern.
    Information ausblenden

Opensource Spiel Projekt - Meiern

Dieses Thema im Forum "Scripting" wurde erstellt von Archon Short, 10. August 2014.

  1. Archon Short

    Archon Short Administrator Mitarbeiter

    Beiträge:
    5.147
    Zustimmungen:
    730
    Punkte für Erfolge:
    124
    Hier möchte ich ein Spielprojekt anbieten, bei dem jeder sich einbringen kann um am Ende ein schönes Spiel zu haben.

    Es geht um das Würfelspiel Meiern.
    Das Spiel hat in SL einen Landimpact von 3.
    Jeder, der hier dran mitarbeiten möchte kann es als MODIFY/COPY/no transfer oder MODIFY/no copy/TRANSFER bekommen, da die Bedingungen für die Meshes so sind.

    Hier einmal die Regeln:

    Das angefangene Script:
    Code:
    // Texte für das Spiel
    string S_Hover;
    string S_Hover_Start        =   "MEIERN\nBerühre das Fass und \nmelde Dich als Spieler an\noder berühre den Becher\nfür eine Spielbeschreibung";
    string S_Hover_Wait_1       =   "MEIERN\nBerühre das Fass und \nmelde Dich als Spieler an.\nBereits angemeldete Spieler:\n";  
    string S_Hover_Wait_2       =   "Sekunden bis zum Beginn: ";
    string S_Hover_Wait_3       =   "Sollte sich kein weiterer Spieler anmelden:\n";
    string S_Hover_Wait_4       =   " Sekunden bis zum Reset.";
    string S_dialog_text_1      =   "Hallo, viel Spaß beim Beginn des Spiels.";
    string S_dialog_text_2      =   "Die aktuell genannte Zahl lautet: ";
    string S_dialog_text_3      =   "Was möchtest Du jetzt tun?";
    string S_text_box_1         =   "Die zu überbietende Zahl lautet: ";
    string S_text_box_2         =   "\nDie von Dir gewürfelte Zahl lautet: ";
    string S_text_box_3         =   "\nDie möglichen Zahlen lauten\n31,32,41,42,43,51,52,53,54,61,62,63,64,65,11,22,33,44,55,66\nTrage eine der Zahlen, die höher als die zu überbietende Zahl ist, in das Feld ein.\nSollte Deine gewürfelte Zahl höher sein, dann trage Deine Zahl ein.";
    
    // Liste der aktiven Spieler
    list    L_Player_K;
    list    L_Player_N;
    key     K_active_player;
    key     K_last_player;
    
    // Sekunden um das spiel zu starten oder zu warten
    integer I_Seconds_To_Wait;
    integer I_Seconds_To_Wait_Start = 30;
    
    // Kommunikationskanal
    integer I_channel;
    
    // Läuft das Spiel bereits?
    integer I_running           =   FALSE;
    
    // Aktuelle Zahl und genannte Zahl
    integer I_chosen_number     =   21;
    integer I_rolled_number     =   21;
    
    // Texturkey für die Würfelseiten
    string      S_Number_Key    =   "59b8bce6-f652-1fba-1493-2200101c3dcc";
    // Möglichkeiten der Würfelergebnisse
    list        L_possibilities =   [31,32,41,42,43,51,52,53,54,61,62,63,64,65,11,22,33,44,55,66,21]; // 21 Möglichkeiten
    // Texturvectoren für die Ziffern
    //   [ PRIM_TEXTURE, integer face , string texture, vector repeats, vector offsets, float rotation_in_radians ] 
    vector      V_all_r         =   < 0.2 , 0.5 , 0.0 >;
    vector      V_1_off         =   < 0.8 , 0.25 , 0.0 >;
    vector      V_2_off         =   < 1.0 , 0.25 , 0.0 >;
    vector      V_3_off         =   < 0.2 , 0.25 , 0.0 >;
    vector      V_4_off         =   < 0.4 , 0.25 , 0.0 >;
    vector      V_5_off         =   < 0.6 , 0.75 , 0.0 >;
    vector      V_6_off         =   < 0.8 , 0.75 , 0.0 >;
    //  oben = 0 ; unten = 5
    //  links = 3 ; rechts = 1
    //  vorn = 2 ; hinten = 4
    list        L_numb_1        =   [ V_1_off , V_2_off , V_3_off , V_5_off , V_4_off , V_6_off ];
    list        L_numb_2        =   [ V_2_off , V_1_off , V_3_off , V_6_off , V_4_off , V_5_off ];
    list        L_numb_3        =   [ V_3_off , V_1_off , V_2_off , V_6_off , V_5_off , V_4_off ];
    list        L_numb_4        =   [ V_4_off , V_2_off , V_1_off , V_5_off , V_6_off , V_3_off ];
    list        L_numb_5        =   [ V_5_off , V_1_off , V_3_off , V_6_off , V_4_off , V_2_off ];
    list        L_numb_6        =   [ V_6_off , V_5_off , V_3_off , V_2_off , V_4_off , V_1_off ];
    
    
    // Linknummern der einzelnen Teile
    integer     I_Fass;     // 10
    integer     I_Becher_1; // 11
    integer     I_Becher_2; // 12
    integer     I_Wuerfel_1;// 13
    integer     I_Wuerfel_2;// 14
    
    show_number(integer I_zahl)
    {
        integer I_show_1 = I_zahl/10;
        integer I_show_2 = I_zahl-(I_show_1*10);
        list    L_show_1;
        list    L_show_2;
        
        if      (I_show_1 == 1) L_show_1 = L_numb_1;
        else if (I_show_1 == 2) L_show_1 = L_numb_2;
        else if (I_show_1 == 3) L_show_1 = L_numb_3;
        else if (I_show_1 == 4) L_show_1 = L_numb_4;
        else if (I_show_1 == 5) L_show_1 = L_numb_5;
        else if (I_show_1 == 6) L_show_1 = L_numb_6;
        
        if      (I_show_2 == 1) L_show_2 = L_numb_1;
        else if (I_show_2 == 2) L_show_2 = L_numb_2;
        else if (I_show_2 == 3) L_show_2 = L_numb_3;
        else if (I_show_2 == 4) L_show_2 = L_numb_4;
        else if (I_show_2 == 5) L_show_2 = L_numb_5;
        else if (I_show_2 == 6) L_show_2 = L_numb_6;
        
        integer I_i;
        for(I_i=0;I_i<6;I_i++)
        {
            llSetLinkPrimitiveParamsFast(   I_Wuerfel_1,[PRIM_TEXTURE, I_i , S_Number_Key, V_all_r, (vector)llList2String(L_show_1,I_i), 0]);
            llSetLinkPrimitiveParamsFast(   I_Wuerfel_2,[PRIM_TEXTURE, I_i , S_Number_Key, V_all_r, (vector)llList2String(L_show_2,I_i), 0]);
        }
        llSetLinkPrimitiveParamsFast(   I_Becher_1, [PRIM_TEXT,"",<0,1,0> ,1]);
        llSetLinkPrimitiveParamsFast(   I_Becher_1,[PRIM_COLOR, ALL_SIDES, <1,1,1>,0 ]);
        llSetLinkPrimitiveParamsFast(   I_Wuerfel_1,[PRIM_COLOR, ALL_SIDES, <1,1,1>,1 ]);
        llSetLinkPrimitiveParamsFast(   I_Wuerfel_2,[PRIM_COLOR, ALL_SIDES, <1,1,1>,1 ]);
        llSetLinkPrimitiveParamsFast(   I_Becher_2,[PRIM_COLOR, ALL_SIDES, <1,1,1>,1 ]);
    }
    
    
    dialog_menu_game(key k_gamer, integer i_function) // FALSE=Spiel startet ; TRUE=Spiel läuft bereits
    {
        if(I_running)   llDialog(k_gamer,S_dialog_text_1,["spielen"],I_channel);
        else            llDialog(k_gamer,S_dialog_text_2+(string)I_chosen_number+"\n"+S_dialog_text_3,["anzweifeln","spielen"],I_channel);
    }
    
    
    text_box_game()
    {
        llTextBox(K_active_player,S_text_box_1 + (string)I_chosen_number + S_text_box_2 + (string)I_rolled_number + S_text_box_3 ,I_channel);
    }
    
    
    default
    {
        state_entry()
        {
            integer i;
            for(i=0;i<6;i++)
            {
                integer ii = llList2Integer(llGetLinkPrimitiveParams(i,[PRIM_DESC]),0);
                if(ii == 11) I_Becher_1 = i;
                else if(ii == 12) I_Becher_2 = i; 
                else if(ii == 13) I_Wuerfel_1 = i;
                else if(ii == 14) I_Wuerfel_2 = i;
                else if(ii == 10) I_Fass = i;
            }
            state delete_all;
        }
    }
    // Spiel wird auf 0 gesetzt
    state delete_all
    {
        state_entry()
        {
            llSetLinkPrimitiveParamsFast(   I_Becher_1, [PRIM_TEXT,S_Hover_Start,<0,1,0> ,1]);
            llSetLinkPrimitiveParamsFast(   I_Becher_1,[PRIM_COLOR, ALL_SIDES, <1,1,1>,1 ]);
            llSetLinkPrimitiveParamsFast(   I_Wuerfel_1,[PRIM_COLOR, ALL_SIDES, <1,1,1>,0]);
            llSetLinkPrimitiveParamsFast(   I_Wuerfel_2,[PRIM_COLOR, ALL_SIDES, <1,1,1>,0]);
            llSetLinkPrimitiveParamsFast(   I_Becher_2,[PRIM_COLOR, ALL_SIDES, <1,1,1>,0 ]);
            L_Player_K = [];
            L_Player_N = [];
            S_Hover="";
            I_Seconds_To_Wait = I_Seconds_To_Wait_Start;
            I_running = FALSE;
            I_chosen_number = 21;
            I_rolled_number = 21;
            K_active_player = NULL_KEY;
            state wait01;
        }
    }
    // Spieler melden sich an
    state wait01
    {
        touch_start(integer touched)
        {
            if(llDetectedLinkNumber(0)==I_Fass)
            {
                llOwnerSay("Fass");
                if(llListFindList(L_Player_K,[llDetectedKey(0)]) == -1)
                {
                    llOwnerSay("ADD");
                    L_Player_K = L_Player_K + [llDetectedKey(0)];
                    L_Player_N = L_Player_N + [llDetectedName(0)];
                    integer I_ii;
                    integer I_iii = llGetListLength(L_Player_N);
                    for(I_ii=0;I_ii<I_iii;I_ii++)
                    {
                        S_Hover = S_Hover_Wait_1 + llList2String(L_Player_N,I_ii) + "\n";
                    }
                    
                    if(llGetListLength(L_Player_N)>1)
                    {
                        I_Seconds_To_Wait = I_Seconds_To_Wait_Start;
                        
                    }
                    llOwnerSay("Starting Timer");
                    llSetTimerEvent(1);
                }
            }
            else if(llDetectedLinkNumber(0)==I_Becher_1)
            {
                llGiveInventory(llDetectedKey(0),llGetInventoryName(INVENTORY_NOTECARD,0));
            }
        }
        timer()
        {
            if(llGetListLength(L_Player_N)>0)
            {
                if(llGetListLength(L_Player_N)>1)llSetLinkPrimitiveParamsFast(   I_Becher_1, [PRIM_TEXT,S_Hover+S_Hover_Wait_2+(string)I_Seconds_To_Wait,<0,1,0> ,1]);
                else llSetLinkPrimitiveParamsFast(   I_Becher_1, [PRIM_TEXT,S_Hover+S_Hover_Wait_3+(string)I_Seconds_To_Wait+S_Hover_Wait_4,<1,0,0> ,1]);
            
                I_Seconds_To_Wait--;
                if(I_Seconds_To_Wait < 0)
                {
                    if(llGetListLength(L_Player_N)>1)state game;
                    else
                    {
                        llSetTimerEvent(0);
                        state delete_all;
                    }
                }
            }
        }
    }
    
    state game
    {
        state_entry()
        {
            llOwnerSay("GAME STARTS");
            
        }
    }

    Ich werde hier immer wieder Updates posten und würde mich freuen, wenn ein paar Mitstreiter zu diesem Projekt dazustoßen.

    LG Stefan
     
    Zuletzt bearbeitet: 11. August 2014
  2. Kila Shan

    Kila Shan Moderatorin Mitarbeiter

    Beiträge:
    14.940
    Zustimmungen:
    1.016
    Punkte für Erfolge:
    129
    Ahhh ich kenn das etwas anders, bei uns heisst das Mäxchen.
    Und die 21 ist Mäxchen, was der höchste Wert ist, und man nicht übertreffen kann.
    Da man Mäxchen 21 nicht übertreffen kann, muss man es entweder glauben oder nicht. Glaubt man es, man darf es aber nicht aufdecken, bekommt man 1 Punkt. Glaubt man es nicht, und deckt auf, ist es richtig bekommt man sogar 2 Punkte. Ist es falsch dann bekommt der Lügner 2 Punkte.
    Eine Profivariante wird bei uns in der Familie gespielt. Man darf weniger sagen, als wirklich drunter ist, aber natürlich immer mehr als der Vorgänger. Der nächste kann es ungewürfelt weitergeben, wenn er denkt, sein Vorgänger hat untertrieben. No risk, no fun!
     
  3. Durandir Darwin

    Durandir Darwin Forumsgott/göttin

    Beiträge:
    6.823
    Zustimmungen:
    4.282
    Punkte für Erfolge:
    139
    Ich kenne es ebenso wie Kila (bei uns als "Schummelmax") - 21 ist der höchste Wert.

    Teilweise wird es hier noch mit 42 als Sonderwert ("Hamburger") gespielt.
     
  4. Archon Short

    Archon Short Administrator Mitarbeiter

    Beiträge:
    5.147
    Zustimmungen:
    730
    Punkte für Erfolge:
    124
    Stimmt, muss ich nochmal ändern im Anfangspost.
    21 ist MEIER