Substring

Thảo luận trong 'World Editor' bắt đầu bởi langthangbairac, 11/7/12.

  1. langthangbairac

    langthangbairac Đề hạt

    Tham gia ngày:
    19/5/12
    Bài viết:
    594
    Nơi ở:
    Thanh Chương
    Chắc mọi người đã từng nghe đến substring ( kiến thức E.L có hạn nên mình tạm dịch nôm na là chuỗi ký tự ) Vấn đề về substring quả không khó, ai làm quen thì rất dễ làm, nhưng đối với các newbie thì hơi khó hiểu đấy.
    Thường thì một Code cho một substring sẽ có 2 phần ( đố thàng nào làm được 3 phần [ Siêu nhân :4cool_oh::3cool_adore: ] ) .
    + Phần 1 ( thường là phần đầu ) : là chữ do người làm map đặt sẵn ( có thể gọi là cheat không nhỉ :2cool_go: )
    + Phần 2 ( thường là phần sau ) : Phần làm việc của người chơi
    Nếu ta muốn làm một substring đơn giản thì có thể lấy event như sau :
    Mã:
    Player - Player 1 (Red) types a chat message containing -gold  as A substring
    
    Một lưu ý nhỏ nhưng lại là một vấn đề lớn :))
    Mã:
    Player - Player 1 (Red) types a chat message containing -gold  as [U][B]An exact match[/B][/U]
    
    Code event này sai, nó sẽ khiến trigger chỉ đơn thuần là một trigger chat type bình thường. Phải sửa thành

    Mã:
    Player - Player 1 (Red) types a chat message containing -gold  as [U][B]A substring[/B][/U]
    

    Tiếp theo, muốn trigger hoạt động đúng theo yêu cầu ta sẽ gán cho nó một condition để kiểm tra dòng chữ người chơi nhập

    Mã:
    (Substring((Entered chat string), 1, 6)) Equal to -gold 
    
    ( Condition phần string )

    (Substring((Entered chat string), 1, 6))

    Bạn thấy 2 só này chứ ? Nếu bạn chú ý sẽ thấy phần ví dụ của WE ở phía dưới là " Example : substring("Grunts stink",2,4) = run " đọc xong ví dụ này chắc bạn đoán được ý nghĩa của 2 số này rồi phải không ? số 1 là số thứ tự của chữ bắt đầu còn số 6 là số thự tự của chữ kết thúc trong phần 1 ( nói trên rồi ). Không tin thì đếm xem "-gold " có 6 chữ cái và mình lấy từ 1->6 luôn

    Lưu ý : Với các chat kiểu này, bạn nên đặt dấu khoảng trống ở sau phần 1 cho người chơi dễ nhìn.

    Phần condition đã xong, giờ đến phàn Action - phần tách số người chơi đã nhập :

    Mã:
    Player - Add (Integer((Substring((Entered chat string), 7, (Length of (Entered chat string)))))) to (Triggering player) Current gold
    
    Phần quan trọng nhất là đây


    (Integer((Substring((Entered chat string), 7, (Length of (Entered chat string))))))


    Bạn thấy số 7 ở giữa chứ ? đó là số thứ tự của chữ bắt đầu mà người chơi sẽ nhập ( thường thị là số thứ tự tiếp theo.


    Xong ngon lành rồi ! :1cool_look_down:

    Đây là code hoàn chỉnh:

    Mã:
    Demo gold
        Events
            Player - Player 1 (Red) types a chat message containing -gold  as A substring
        Conditions
            (Substring((Entered chat string), 1, 6)) Equal to -gold 
        Actions
            Player - Add (Integer((Substring((Entered chat string), 7, (Length of (Entered chat string)))))) to (Triggering player) Current gold
    


    P/S : Đây là bài chỉ dẫn cho các bạn chưa biết, ai biết rồi :> hoặc không muốn biết =(( thì đừng lên tiếng chém b-).
     

    Các file đính kèm:

  2. Meepolisk

    Meepolisk Phó đề hạt

    Tham gia ngày:
    8/2/08
    Bài viết:
    336
    Bài viết đóng góp tốt thật :D
    nếu bạn có thời gian thì trình bày lại cho gọn và đẹp chút, 1 tut toàn chữ và chữ mà ko thấy các ý lớn ở đâu thì newbie hơi lười đọc
     
  3. Tom_Kazansky

    Tom_Kazansky Thành viên BQT Moderator

    Tham gia ngày:
    28/12/06
    Bài viết:
    3,454
    Nơi ở:
    Hà Nội

    "chỉ đơn thuần là một chat type bình thường" là thế nào?

    An exact match: người chơi phải gõ chính xác chuỗi ký tự này thì trigger mới chạy
    A substring: người chơi không cần phải gõ chính xác, chỉ cần chuỗi được gõ vào chứa các ký tự (đã chỉ ra) là trigger chạy được. Ví dụ: với -gold, ta có thể gõ: a3@#-gold3-s hoặc 33-gold aldp2 đều được.

    -------
    [spoil]
    công dụng của hàm Substring:

    cần 3 tham số: Substring( chuỗi bất kỳ , ký tự đầu tiên, ký tự cuối )

    hàm Substring sẽ lấy một phần của chuỗi bất kỳ từ ký tự đầu tiên đến ký tự cuối

    ví dụ: Grunt Stink
    [table="width: 250"]
    [tr]
    [td]G[/td]
    [td]r[/td]
    [td]u[/td]
    [td]n[/td]
    [td]t[/td]
    [td][/td]
    [td]s[/td]
    [td]t[/td]
    [td]i[/td]
    [td]n[/td]
    [td]k[/td]
    [/tr]
    [tr]
    [td]1[/td]
    [td]2[/td]
    [td]3[/td]
    [td]4[/td]
    [td]5[/td]
    [td]6[/td]
    [td]7[/td]
    [td]8[/td]
    [td]9[/td]
    [td]10[/td]
    [td]11[/td]
    [/tr]
    [/table]

    Substring( Grunt stink, 2, 4 ):

    [table="width: 250"]
    [tr]
    [td]G[/td]
    [td]r[/td]
    [td]u[/td]
    [td]n[/td]
    [td]t[/td]
    [td][/td]
    [td]s[/td]
    [td]t[/td]
    [td]i[/td]
    [td]n[/td]
    [td]k[/td]
    [/tr]
    [tr]
    [td]1[/td]
    [td]2[/td]
    [td]3[/td]
    [td]4[/td]
    [td]5[/td]
    [td]6[/td]
    [td]7[/td]
    [td]8[/td]
    [td]9[/td]
    [td]10[/td]
    [td]11[/td]
    [/tr]
    [/table]

    ta được "run"
    [/spoil]
    ----
    phần dưới nên nói rõ hơn:

    Entered chat string: chuỗi đã nhập
    String Length (Length of ... ): hàm này dùng để lấy độ dài của một chuỗi

    player cần gõ đúng: -gold ###
    nên điều kiện trigger là: 6 ký tự đầu của chuỗi phải là "-gold " nên lấy Substring của chuỗi đã nhập từ 1 đến 6

    phần còn lại của chuỗi nên là số lượng gold cần add, nên lấy Substring từ 7 đến độ dài của chuỗi đã nhập (nghĩa là ký tự cuối)
     
  4. Evil_Hunter

    Evil_Hunter Chánh đề hạt

    Tham gia ngày:
    18/9/11
    Bài viết:
    786
    Nơi ở:
    Evil Forest
    Chà, rep cho cái, đang cần cái này :">
     

Chia sẻ trang này