second life linden dollars Thai Second Life Community second life linden dollars second life linden dollars second life virtual money
second life linden dollars
SL Virtual World
OpenSims Thailand
second life top search
Custom Search
linden dollars transfer
linden dollars transfer
linden dollars transfer
SL Virtual World
Pages: [1] 2   เลื่อนลง
 
แบ่งปันให้เพื่อนๆ Topic: Begin Script LSL (ไม่เก่งนะคับมาแชล้วนๆ)  (Read 15569 times)
syrom
มือใหม่หัดวาป
*
Posts: 33


« on: April 14, 2009, 09:33:53 PM »

คลิกขวาที่พื้น



เลือก create แล้ว คลิกซ้ายที่พื้น



คลิกเลือกแท๊ป content



กด new script เพื่อสร้างสคริปใหม่



ดับเบิ้ลคลิกซ้าย เพื่อเปิด หน้าจอ script



การคอมไพล์ ทำได้โดยการกด save ด้านล่างขวา ถ้าเขียนโค้ดถูก การคอมไพล์จะ ขึ้นว่า
Compile successful!
Save complete.

ถ้าเขียนผิด การคอมไพล์จะฟ้องว่า เกิด error ตรงไหนและ ประเภทไหน (อันนี้ขึ้นอยู่กับความชำนาญนะคับ)

เครดิต  ตัวอย่างสคริป
// Bromley College
// Linden Script Exhibition

//เริ่มต้น


default                                                                 //ส่วนหลักของโปรแกรม
{                                                                           //วงเล็บเปิด
    state_entry()                                               //ส่วนที่สามารถทำงานได้ทันทีเมื่อถูกรันสคริป
    {                                                                       
        llSay(0, "Compile Successful!");            //llSay(แชแนล,"ข้อความ"); สำหรับแสดงข้อความมีระยะ 20 เมตร
    }                                                                       //วงเล็บปิด

    touch_start(integer total_number)       //ส่วนที่จะทำงานเมื่อมีการ touch หรือคลิกที่ object ที่กำหนด
    {                                                                       
        llSay(0, "Sign Touched.");                     
    }                                                                       
}                                                                           

//จบโค้ด
ผลลัพ
เมื่อทำการ save script


เมื่อทำการ คลิกที่ object
« Last Edit: April 14, 2009, 10:02:26 PM by syrom » Logged
syrom
มือใหม่หัดวาป
*
Posts: 33


« เขียนตอบ #1 on: April 14, 2009, 10:02:55 PM »

// Bromley College
// Linden Script Exhibition

// Code for poster 16;

// You will notice that this program contains two states default and new. It was necessary to introduce states in this example in order to prevent the poster listening continuously and responding to all events on channel 0. Before introducing states the else condition was even "replying" to the chat messages produced when posters 17 and 18 were touched! ;

default                               //ส่วนหลัก
{
    touch_start(integer total_number)                        //ให้ทำงานเมื่อมีการคลิก
    {
        llSay(0, "What is the number of this              poster? Please reply using chat.");
        state new;                                             //ให้ไปทำงานที่ฟังชั่น new
    }
}

state new                                    //ฟังชั่น new
{
    state_entry()                       //ส่วนการทำงานแรกที่ถูกเรียกใช้
    {
       llListen(0,"",NULL_KEY, "");              //ให้ทำการรับค่าจากคีบอร์ด
    }                                                       //llListen(แชนแนล,ชื่อ,รหัส sim,"ข้อความ");

    listen(integer channel, string name, key id, string message)  //ส่วนที่จะทำงานเมื่อมีการเรียกใช้ llListen
    {
        if(message=="16")        //เงื่อนไข if ถ้า message มีค่าเท่ากับ ข้อความ 16
        {                                    //สิ่งที่อยู่ใน "" จะถือว่าเป็นข้อความ โดยถ้าเงื่อนไขเป็นจริงจะทำในนี้ก่อน
            llSay(0,"Well done your answer is correct");
        }
        else                        //ถ้าเงื่อนไขเป็นเท็จจะทำส่วน หลังจากนี้
        {
        llWhisper(0,"Sorry wrong answer, please click on this poster to try again");
        }
        state default;       //สั่งให้ไปทำงานที่ส่วนหลัก
    }
}

// End of code;


เมื่อคลิกที่ object



เมื่อพิมข้อความว่า 16 จะแสดงข้อความว่าถูก และพิมค่าอื่นจะแสดงข้อความบอกว่าผิด

« Last Edit: April 14, 2009, 10:22:01 PM by syrom » Logged
syrom
มือใหม่หัดวาป
*
Posts: 33


« เขียนตอบ #2 on: April 14, 2009, 10:53:51 PM »

// Bromley College
// Linden Script Exhibition

// Code for poster 17;

default
{
    state_entry()
    {
        llSay(0, "Compile Successful!");
    }

    touch_start(integer total_number)
    {
        integer  j;                     //ประกาศตัวแปร j ชนิดจำนวนเต็ม
        integer  count = 3;      //ประกาศตัวแปร count ชนิดจำนวนเต็ม มีค่า เท่ากับ 3
        for (j = 0; j < count; j++)      //for(ค่าเริ่มต้น;เงื่อนไข;เพิ่มหรือลดค่า)
        {                                           //for คือเงื่อนไขสำหรับการทำซ้ำถ้าตรงตามเงื่อนไขที่กำหนด
           llSay(0, "Hello");                // จะเรียกกันว่าการวนลูป ตามจำนวนครั้งที่กำหนด
        }
    }
}


// End of code;


//** จากสคริปนี้จะทำให้ เมื่อเรา คลิกที่ object จะแสดงข้อความ Hello จำนวน 3 ครั้ง

« Last Edit: April 14, 2009, 11:03:26 PM by syrom » Logged
Phozphol1c
คนรักลินเดน
***
Posts: 659



« เขียนตอบ #3 on: April 14, 2009, 11:00:40 PM »



ขอบคุณคร้าบ วันหลังมาต่ออีกนะ (รีบๆ เลยก็ดี ตีเหล็กต้องตีตอนร้อน กลัวพาลเหนื่อยซะก่อน)

*edit : เพิ่งเห็นว่าเขียนชื่อสายลมผิด (Sylom = x, Syrom = o) ขอโทษด้วยงับ
« Last Edit: April 14, 2009, 11:04:44 PM by Phozphol1c » Logged

syrom
มือใหม่หัดวาป
*
Posts: 33


« เขียนตอบ #4 on: April 14, 2009, 11:05:36 PM »

...จองสำหรับลิ้ง -*-
Logged
syrom
มือใหม่หัดวาป
*
Posts: 33


« เขียนตอบ #5 on: April 14, 2009, 11:11:04 PM »

// Bromley College
// Linden Script Exhibition

// Code for poster 18;

default
{
    state_entry()
    {
        llSay(0, "Compile Successful!");
    }

    touch_start(integer total_number)
    {
        integer  count = 1;
        integer  maxcount = 3;
        while (count < maxcount)        //เงื่อนไขการวบลูปแบบ while โดยจะเช็คเงื่อนไขก่อนว่า
        {                                              //เป็นจริงหรือไม่ อันนี้ถ้าค่าใน count น้อยกว่า maxcount
            llSay(0,"I'm repeating myself");      //เข้ามาทำงานใน while และทำซ้ำจนกว่าเงื่อนไขจะเป็นเท็จ
            count = count + 1;      //ให้ count เก็บค่า โดยเครื่องหมาย = 1อันจะมีเป็นการเก็บค่า
        }                                      //ถ้า == จะเป็นการเปรียบเทียบว่าเท่ากัน ในทีนี้ให้
    }                                           // ในที่นี้ให้ count เก็บค่า count ที่ + กับ 1
}

// End of code;

//** ผลลัพ จะแสดงข้อความ I'm repeating myself 2 ครั้งเมื่อ ทำการคลิกที่ object

ปล.หลังจากนี้ผมจาไม่ลงรูปนะคับ -*- ลองทำใน sl เลยจะได้เห็นข้อผิดพลาด
Logged
SK-production
มือใหม่หัดวาป
*
Posts: 111


« เขียนตอบ #6 on: April 14, 2009, 11:12:19 PM »

 Wink แจ่มคะขอบคุณคะ
Logged

pandanus
Moderator
พลเมืองดีเด่น
*****
Posts: 1781



« เขียนตอบ #7 on: April 14, 2009, 11:17:27 PM »

สายลมคิดการใหญ่นะเนี้ย หึๆๆๆ  Hide
Logged

syrom
มือใหม่หัดวาป
*
Posts: 33


« เขียนตอบ #8 on: April 14, 2009, 11:24:34 PM »

// Bromley College
// Linden Script Exhibition

// Code for poster 19
// Colour vectors are set up as follows < red,green,blue > where red green and blue can be anything from 0 (dark) to 1 (full bright). e.g. < 1,0,0 > will be bright red, whereas < 0.5, 0.5, 0 > will be medium yellow.

default
{
    state_entry()
    {
        vector prim_color = < 1,1,1 >;   //สร้างตัวแปร prime_color เป็นประเทภเวคเตอเก็บค่า x=1,y=1,z=1
        llSetColor( prim_color, ALL_SIDES          );  //เซ็ตสีให้กับ object
    }          //llSetColor(เวคเตอสีที่ต้องการ,ด้านที่จะให้แสดงสีถ้าต้องการทุกด้านใส่ ALL_SIDES หรือ -1 ก็ได้)

    touch_start(integer total_number)
    {
        llSay(0, "Green State");
        vector prim_color = < 0,0.75,0 >;
        llSetColor( prim_color, ALL_SIDES );                      //set colour to mid green
        state amber;    //เรียกใช้ ฟังชั่น amber
    }
}

state amber     //สร้างฟังชั่น amber
{
    touch_start(integer total_number)
    {
        llSay(0, "Amber State");
        vector prim_color = < 1,0.75,0 >;
        llSetColor( prim_color, ALL_SIDES          );  
        state red;    
    }  
}

state red
{
    touch_start(integer total_number)
    {
        llSay(0, "Red State");
        vector prim_color = < 1,0,0 >;
        llSetColor( prim_color, ALL_SIDES          );  
        state white;    
    }  
}

state white
{
    touch_start(integer total_number)
    {
        llSay(0, "White State");
        state default;    
    }  
}

// End of code;

//**ผลลัพธ์ สคริปนี้จะทำงานโดยการคลิก โดยถ้าเราคลิกครั้งแรก จะเปลี่ยนเป็นสีเขียว เหลือง  แดง ขาว ตามลำดับการคลิก

สีหลักๆ

0,0,0  สีดำ
0,0,1  สีน้ำเงิน
0,1,0  สีเขียว
0,1,1  สีฟ้า
1,0,0  สีแดง
1,0,1  สีม่วง
1,1,0  สีเหลือง
1,1,1  สีขาว

//**สีใช้ค่า 0.0-1.0 ได้นะคับ โดยจะเรียกค่าสี RGB = 255 สี -*-
Logged
syrom
มือใหม่หัดวาป
*
Posts: 33


« เขียนตอบ #9 on: April 14, 2009, 11:35:44 PM »

// Bromley College
// Linden Script Exhibition

// Code for Step 20 Poster

// The timer event, which randomly changes the background colour of the poster, is called once every second. After 10 seconds (colour changes) the poster is reset to it's initial state.

integer count;

default
{
   state_entry()
   {
       llSetTimerEvent( 0 ); //disable timer //llSetTimerEvent กำหนดตั้งเวลาให้ทำงานเมื่อถึงเวลาที่กำหนด หน่วยเป็นวินาที ในที่นี้ค่า 0 คือไม่ทำงาน
       llSetColor( <1,1,1> , ALL_SIDES          );

   }

   touch_start(integer total_number)
  {

       count = 0;      // zero count
       llSetTimerEvent( 1 ); //enable one second timer event //ตั้งเวลาทำงานทุก 1 วินาที

  }

  timer ()  // run this code every time the timer event is raised ฟังชั่นนี้จะทำงานเมื่อมีการเรียกใช้ llSetTimerEvent(0);
  {
      count ++;     //increment count
      llSetColor(<llFrand(1),llFrand(1),llFrand(1)>,ALL_SIDES); //set new random colour every second
//llFrand(1) คือคำสั่งสุ่มค่า เลขตั้งแต่ 0.0-1.0
      if(count > 10) // reset after 10 secs //เงื่อนไขถ้า count มากกว่า 10
      {
         llResetScript(); คำสั่งให้ทำการรีเซ็ตสคริปใหม่ หมายความว่าจะเริ่มต้นค่าทุกอย่างใหม่หมด
      }
  }
}

// End of code

//**สคริปนี้เมื่อคลิกจะทำการสุ่มสี จำนวน 10 ครั้งและจะหยุดทำงาน
Logged
syrom
มือใหม่หัดวาป
*
Posts: 33


« เขียนตอบ #10 on: April 14, 2009, 11:48:45 PM »

// Bromley College
// Linden Script Exhibition

// Code for Step 21 Poster

integer second;

default
{
    state_entry()
    {
        second == 0;
        llParticleSystem( [] );  //reset system //llParticleSystem คือฟังชั่น particle ผมเรียกชื่อไทยมะถูก -*- แต่มันจะแสดงผล พวกไฟ น้ำ ได้ โดยไม่จำเป็นต้องใช้ texture
        state new;
    }
}

state new
{
    touch_start(integer total_number)
    {
    // output particles
    llParticleSystem( 
   [
    PSYS_PART_FLAGS,         PSYS_PART_WIND_MASK | PSYS_PART_EMISSIVE_MASK,
    PSYS_SRC_PATTERN,  PSYS_SRC_PATTERN_EXPLODE,
    PSYS_PART_START_COLOR,   <1,1,0>
   ] );
     //PSYS_SRC_PATTERN_EXPLODE ให้แสดงผลแบบ กระจาย รอบทิศได้
                     //DROP แสดงผลแบบอยู่นิ่งกับที่ angle และ angle_cone จะแสดงผลแบบเดียวกัน
                    //โดยจะแสดงผลเป็นเส้นทางเดียวกัน ตามองศาที่กำหนด

   llSetTimerEvent( 1 );
    }   

    timer () //delay 10 seconds before reset
    {
        second ++;
        if(second > 10)
        {
           llResetScript();  //reset     
         }   
     }
}

// End of code;

//**เมื่อคลิก จะแสดงผล praticle เป็นรูปแบบกระจาย ลองเปลี่ยน EXPLODE เป็น DROP ,ANGLE,ANGLE_CONE ดุผลลัพนะคับ
Logged
syrom
มือใหม่หัดวาป
*
Posts: 33


« เขียนตอบ #11 on: April 14, 2009, 11:54:33 PM »

// Bromley College
// Linden Script Exhibition

// Code for Step 22 Poster

default
{
    touch_start(integer total_number)
    {
        // get current position
        vector Pos = llGetPos();  //llGetPos คือคำสั่งแทนค่าของ object ตำแหน่ง(pos) ปัจจุบันนะคับเป็นการทำงานแบบ global คือ ถ้า object ที่ใช้คำสั่งนี้เป็น root ของ link จะถูกแสดงตำแหน่งหลักและถ้าเคลื่อนที่ก็จะไปทั้งหมด ถ้าต้องการให้เปลี่ยนตำแหน่งหรือเคลื่อนที่เฉพาะส่วนให้ใช้ llGetLocalPos
        // display position
        llSay ( 0, "Current postion vector is " + (string)Pos + " metres");
    }
}

// End of code;

//**เมื่อคลิกที่ object จะแสดงค่า ตำแหน่งปัจจุบันของ object
Logged
syrom
มือใหม่หัดวาป
*
Posts: 33


« เขียนตอบ #12 on: April 14, 2009, 11:59:49 PM »

// Bromley College
// Linden Script Exhibition

// Code for Step 23 Poster

default
{
    touch_start(integer total_number)
    {
    // get rotation quaternion, convert it to a vector in radians and then convert this in turn to degress
    vector Deg = llRot2Euler(llGetRot()) * RAD_TO_DEG; //llRot2Euler เป็นฟังชั่นใช้แปลงค่า rotation เป็น vector
                         //llGetRot() เป็นฟังชั่น บอกองศาปัจจุบันแบบ global ถ้าแบบ local ใช้ llGetLocalRot()

    // display orientation in degrees
        llSay ( 0, "Current orientation vector is " + (string)Deg + " degrees");
    }
}

// End of code;


//**ผลลัพธ์ ในที่นี้จะแสดง องศาออกมาเป็นแบบ เวคเตอ x,y,z
//Global คือใช้ทั้งหมด
//Local คือใช้เฉพาะส่วน


Logged
syrom
มือใหม่หัดวาป
*
Posts: 33


« เขียนตอบ #13 on: April 15, 2009, 12:07:31 AM »

// Bromley College
// Linden Script Exhibition

// Code for Step 24 Poster

integer second;
vector startPosition;

default
{
  state_entry()
  {
      startPosition = llGetPos();
  }

  touch_start(integer total_number)
  {

      llSay( 0, "Moving!");

      llSetTimerEvent( 1 );  // enable a  timer event once a second.
  }

  timer()  // run this code every time the timer event is raised
  {
      second++;

      // choose three random displacements between 0 and 3 metres
      float X_dis = llFrand( 3.0 );  //float กำหนดตัวแปร เป็นประเภททศนิยม
      float Y_dis = llFrand( 3.0 );   //llFrand(3.0) สุ่มค่าตั้งแต่ 0.0-3.0
      float Z_dis = llFrand( 3.0 );

      // combine these into a vector representing a displacement and add it to the vector representing the current postion
      vector displacement = < X_dis, Y_dis, Z_dis >; //นำค่า x_dis,y_dis,z_dis มารวมกันเป็น เวคเตอ
      vector newPosition = startPosition + displacement; //ตัวแปรประเภทเวคเตอ + กับเวคเตอ และนำเก็บไปไว้กับตัวแปรเวคเตอ ไม่สามารถดำเนินการข้าม ตัวแปรได้นะคับ

      // re-position the object 
      llSetPos( newPosition );   
     
      // After 15 seconds stop the movement and return the object to its original position
      if ( second > 14 ) 
      {
          while ( llVecDist( llGetPos(), startPosition ) > 0.001) //llVecDist(vector1,vector2)
                                    //คือคำสั่งการหาค่าความต่างของเวคเตอ 2 เวคเตอ

          {
              llSetPos( startPosition );
          }

          llSay( 0, "Stationary!" );
          llResetScript(); 
      }
  }
}

// End of code;

//**เมื่อคลิกจะ สุ่มเคลื่อนที่ เป็นเวลา 14 วินาที
« Last Edit: April 15, 2009, 12:14:43 AM by syrom » Logged
Romeo Arashi
Global Moderator
พลเมืองดีเด่น
*****
Posts: 1623



WWW
« เขียนตอบ #14 on: April 15, 2009, 12:50:38 AM »

ขอบคุณคร๊าบบบ Cry
Logged
Pages: [1] 2   เลื่อนขึ้น แบ่งปันให้เพื่อนๆ
 
 
Jump to:  

Powered by MySQL Powered by SMF 1.1.19 | SMF © 2006-2007, Simple Machines Powered by PHP
second life virtual money
Second Life Virtual Business
Custom Search
Linden Dollar Business
Second Life® and Linden Lab® are trademarks or registered trademarks of Linden Research, Inc. All rights reserved. No infringement is intended.
©ThaiSecondLife.net 2007-2011 All Right Reserve. Webmaster[at]ThaiSecond Life.net