Giải thích 1 chút về script của legna - Phần1

Thảo luận trong 'TS Online' bắt đầu bởi heocon0507, 26/3/06.

  1. heocon0507

    heocon0507 Youtube Master Race

    Tham gia ngày:
    19/12/05
    Bài viết:
    30
    Ví dụ 1 file script của chủ party đánh ở Cự Lộc:

    double DisconnectFlag = 0.3; /*Disconnect khi lượng máu nhỏ hơn 0,3(tức là 30% */
    double hpFractionEat = 0.8; //Ăn HP khi HP<= 80%
    double spFractionEat = 0.8;
    double hpFraction = 0.95; //Ăn HP cho tới khi HP >= 95 %
    double spFraction = 0.95;

    byte DisconFai = 20; // Fai của đệ tử <=20 thì disconnect

    byte battle_count = 0; // đếm số trận đấu


    byte myturn = 0; // biến để tính số turn của tướng
    byte peturn = 0; // biến để tính số turn của đệ tử

    byte pt1 = 0; //biến để xác định xem member1 đã party hay chưa(0 hoặc 1)
    byte pt2 = 0;
    byte pt3 = 0;
    byte pt4 = 0;

    double mapid1 = 12013; // cái này không nói chắc ai cũng biết
    double mapid2 = 12521;
    byte warpid1 = 1; //cái này cũng thế
    byte warpid2 = 5;


    các dòng "double mapid1 = 12013;" hay là "byte pt4 = 0; " có chữ double hay byte,đây chỉ là cách khai báo biến,các bạn không cần phải thay đổi cái này.



    /***** Chinh sua ID Member o day *****/

    uint idmem1 = 12345;
    uint idmem2 = 1234;
    uint idmem3 = 123;
    uint idmem4_sena = 12; //id của quân sư

    /*************************************/

    /*********************** My Attack *************************/
    public override void MyAttack()
    {
    myturn++;
    if (myturn == 1)
    {
    CharacterInfo MyChar = ts.Character;
    //NPCCombatObject Monster = findMonster();
    ts.SendAttack(MyChar.Row, MyChar.Col, 0, 3, 12003);
    }
    if (myturn ==2)
    {

    ts.SendAttack(MyChar.Row, MyChar.Col, 0, 3, 17001);
    }
    }

    hàm MyAttack ở trên để điều khiên hoạt động của Character.Mỗi khi nào đến lượt char thì hàm MyAttack được gọi.
    "public override void MyAttack() " cũng chỉ là khai báo hàm.
    myturn là biến để đếm số turn của char.
    "myturn++" có nghĩa sau dòng lệnh này,biến myturn sẽ tăng thêm 1 giá trị.
    Ở phía dưới có hàm BattleStop,nó sẽ gán giá trị biến myturn là 0.có nghĩa là khi trận đấu bắt đầu,myturn là 0.Lượt đầu tiên,sau dòng "myturn++"thì myturn có giá trị là 1.
    Ở dòng lệnh tiếp theo " if (myturn == 1) "
    có nghĩa là: nếu myturn nhận giá trị là 1 thì nó sẽ thực hiện lệnh sau dòng này.ở trên,lệnh sau dòng này là:
    "
    {
    CharacterInfo MyChar = ts.Character;
    //NPCCombatObject Monster = findMonster();
    ts.SendAttack(MyChar.Row, MyChar.Col, 0, 3, 12003);
    }
    "
    những ký tự sau dấu "//" ở trong file script,thì legna không thực hiện các lệnh sau nó(chỉ trên cùng 1 dòng thôi)
    Dòng lệnh "ts.SendAttack(MyChar.Row, MyChar.Col, 0, 3, 12003); " có nghĩa là nó sẽ thực hiện hàng động của char 0,3 là tọa độ của điểm mình chỉ tới(cũng là tọa độ quái vật mình muốn đánh).
    Việc xác định tọa độ của quái vật như sau:
    Gốc tọa độ là (0,0)đó là vị trí của con đứng phía ngoài cùng bên phải,ở hàng xa mình nhất.(tức là con đứng cao nhất).Theo thứ tự sang bên trái có tọa độ tương ứng là (0,1),(0,2),(0,3),(0,4).Đó là hàng phía dưới,còn hàng phía trên là hàng đứng gần mình hơn,thi các vị trí có tọa độ tương ứng(1,0),(1,1),(1,2),(1,2),(1,4).Như vậy,ta đã xác định xong tọa độ của quái vật.Nếu như ta muốn đánh theo kiểu tư động công kích,thì ở trên ta sửa lại thành:

    {
    CharacterInfo MyChar = ts.Character;
    NPCCombatObject Monster = findMonster();
    ts.SendAttack(MyChar.Row, MyChar.Col,Monster.Row,Monster.Col,12003);
    }
    Nếu đánh theo kiểu tự động công kích F1 thì các bạn phải tìm ở nơi khác,hiện giờ mình vẫn chưa biết làm cách nào.
    MyChar.Row và MyChar.Col thì không thay đổi.
    12003 là skill id ,ở đây 12003 là skill id của skill hỏa tiễn.
    Skill id của các skill thì các bạn có thể tham khảo ở những bài viết khác.
    Tương tự như trên,ở dòng lệnh tiếp theo

    if (myturn ==2)
    có nghĩa khi đến lượt thứ 2,ta sẽ thực hiện hàng động

    ts.SendAttack(MyChar.Row, MyChar.Col, 0, 3, 17001);
    17001 là skillid của skill Def.Tọa độ của điểm mình chỉ tới là bất kì,bởi vì mình defense mà
    Và có thể sau đó thêm các dòng lệnh if (myturn ==3) v.v...
    Tương tự như trên ,hàm MyParyterAttack cũng điều khiển hoạt động của đệ tử.Ở đây chỉ khác ở trên ở biến peturn.(Ta cũng có thể ghép chung vào 1 biến cũng đươc).Cái khác thứ hai là lệnh gán
    "CharacterInfo MyWarrior = ts.CurrentPartner;"


    /******************* My Partner Attack *********************/
    public override void MyPartnerAttack()
    {
    peturn++;
    if (peturn == 1)
    {
    CharacterInfo MyWarrior = ts.CurrentPartner;
    //NPCCombatObject Monster = findMonster();
    ts.SendAttack(MyWarrior.Row, MyWarrior.Col, 0,3, 12003);
    }
    if (peturn >= 2)
    {

    }

    }



    Đây là 1 chút hiểu biết của mình về script.Nếu có gì không đúng thì xin mọi người chỉ bảo lại.
    Những bài tiếp theo,mình sẽ nói thêm về các hàm khác.
     
  2. nmt_l

    nmt_l Donkey Kong

    Tham gia ngày:
    3/9/05
    Bài viết:
    322
    Ặc, nói thật một câu là không nên lập topic như thế này. Mình biết bạn có ý đóng góp tuy nhiên đa số là không biết nhiều về lập trình, bạn post thế mọi người lại nghĩ là cần phải hiểu đến cặn kẽ như thế mới sử dụng được legn@ hay TrueBot. Với đại đa số không biết thì cho họ Scrip, hướng dẫn cách chỉnh sửa cách đánh của Char và Pet, chỉnh sửa PT là đủ rồi. Càng biết nhiều càng hoang mang, dẫn đến không biết dùng. Còn những người đã biết thì có lẽ không cần giải thích, chỉ cần họ có lòng chia sẻ các scrip cho mọi người dùng là đủ. Có người đã hỏi mình tại sao là byte, double,..tại sao không khai báo kiểu khác, chẳng lẽ lại giải thích ở đây không dùng số ảo, chỉ dùng số nguyên ....nói chung là nhiều câu nghĩ mãi không ra câu trả lời mặc dù mình biết là tại sao :D. Tóm lại là nên đưa cho họ con Cá luôn chứ không cần đưa cho hok cái Cần câu, mất công một tí, đóng góp chung cho tất cả vậy
     
  3. congals

    congals Youtube Master Race

    Tham gia ngày:
    10/1/06
    Bài viết:
    53
    Anh nmt cho 1 vài hàm đê vứt thần hành,rượu vàng.măng khô, thuốc liệu thương đi anh không full hòm mất mà cái này nhiều người cũng rất cần đó
     
  4. nmt_l

    nmt_l Donkey Kong

    Tham gia ngày:
    3/9/05
    Bài viết:
    322
    Cái này nhiều người post rồi còn gì nữa em, kể cả Drop lẫn autosent Item, chịu khó đọc trong Topic Scrip full, chỉnh sửa trong common tí ti là được, đọc lại các topic kia thì rõ hết. Mọi người thương đánh ở Cự lộc, đây là các Id Item ở Cự Lộc ( có 11 Item trừ dánh mã và ngoc TG):
    • 1. Thuốc Bổ Huyết 27066 Hp20
    • 2. Thuốc Lục Vị 27032 Hp31
    • 3. Rượu vàng 26168 Sp31
    • 4. Măng khô 26169 Hp20
    • 5. viênongmật 46033 ...
    • 6. tựđ uốngthuốc 46041 ...
    • 7. thần hành 46016 ...
    • 8. Thuốc Tỉnh Não 27005 Hp31
    • 9. viên công kích 46013 ...
    • 10. trụccuốn TQ 46027 ...
    • 11. ThuốcNhấtĐiểm 27035 Sp10
    Xem lại ở trang này, thay IdItem vào thôi
    http://www.gamevn.com/forum2/showthread.php?t=174020&page=70&pp=10
     
  5. congals

    congals Youtube Master Race

    Tham gia ngày:
    10/1/06
    Bài viết:
    53
    Thưa anh có phải hàm này không ạ em xài legen
    AddDropItemList("viênongmật");
    AddDropItemList("tựđ uốngthuốc");
    AddDropItemList("viên công kích");
    AddDropItemList("ThuốcNhấtĐiểm");
    mình sẽ thêm hàm item mình muốn vứt phải không anh.Ví dụ như mình muốn vứt măng khô thì hàm là:AddDropItemList("26169"); như này đúng chưa anh
    AddDropItemList("viênongmật");
    AddDropItemList("tựđ uốngthuốc");
    AddDropItemList("viên công kích");
    AddDropItemList("ThuốcNhấtĐiểm");
    AddDropItemList("26169");
     
  6. Chutchutchut

    Chutchutchut Mr & Ms Pac-Man

    Tham gia ngày:
    29/10/05
    Bài viết:
    193
    "ItemList" là tên của item đó VD : AddDropItemList("tựđ uốngthuốc"); <-- nó hiểu là Drop tự động uống thuôc.
    Còn "ItemID" thì mình mới điền ID của Item đó vào VD: ItemID == 46041 thì nó hiểu là: item đó là tự động uống thuốc
     
  7. MonKey.D.Luffy

    MonKey.D.Luffy Mr & Ms Pac-Man

    Tham gia ngày:
    5/1/06
    Bài viết:
    259
    Nơi ở:
    Thất Vũ Hải
    public override void MyAttack()
    {

    CharacterInfo MyChar = ts.Character;
    NPCCombatObject Monster = findMonster();
    ts.SendAttack(MyChar.Row, MyChar.Col, Monster.Row, 2, 12003);

    }
     
  8. chandoiqua12345

    chandoiqua12345 Mr & Ms Pac-Man

    Tham gia ngày:
    5/12/05
    Bài viết:
    109
    hix! giờ legn lên ngôi quá trời mọi ng` đổ xô dùng legn chả còn ai để ý đến tb nữa roài! hix! ko có 1 topic nào nói về tb nữa cả cũng chả ai thèm chả lời các câu hỏi liên quan đến tb nữa ah! chắc tới đây sẽ ko còn ai dùng tb nữa quá!!!!!
     
  9. le4408

    le4408 Mr & Ms Pac-Man

    Tham gia ngày:
    3/6/05
    Bài viết:
    276
    TB dùng thì nhanh hơn Legna, nhung dễ bị dis, k chat dc, k nhận dc item --> phải dùng legna. Mà script cho 2 thằng gần giống nhau mà dùng cái nào chả vậy. Bot kim tỏa bằng TB thì đánh nhanh hơn thì phải.
     
  10. Bo_Cap_Tuyet

    Bo_Cap_Tuyet Donkey Kong

    Tham gia ngày:
    20/8/05
    Bài viết:
    407
    Nơi ở:
    Sa Mạc Tuyết
    Đúng rùi , anh Tiến nói không sai chút nào , Chỉ cần cho full sript thôi , rồi chỉ cho họ những chổ nào cần phải thay , còn lại thì đừng có sữa ( nếu không biết ) không thì lỡ mà sai 1 chút xúi là nó không chạy đâu . Quan trọng là những cái nào nên sữa , và nên thêm những gì , còn lại thì coppy y chang là oke thui . Giống tui nè coppy hết nè :D
     
  11. ZzzZhaoYunzzZ

    ZzzZhaoYunzzZ Youtube Master Race

    Tham gia ngày:
    24/2/06
    Bài viết:
    34
    Nơi ở:
    Tp.HCM
    vay con turn cua pet thi minh chinh? o dau vay nmt
     
  12. nmt_l

    nmt_l Donkey Kong

    Tham gia ngày:
    3/9/05
    Bài viết:
    322
    public override void MyAttack() // đây là của tướng
    .......
    public override void MyPartnerAttack() // Của pet
    {
    peturn++;
    if (peturn == 1)// Turn 1
    {
    CharacterInfo MyWarrior = ts.CurrentPartner;
    //NPCCombatObject Monster = findMonster();
    ts.SendAttack(MyWarrior.Row, MyWarrior.Col, 0, 2, 10000);
    }
    if (peturn >= 2)// Turn lớn hơn hoặc bằng 2
    {
    CharacterInfo MyWarrior = ts.CurrentPartner;
    //NPCCombatObject Monster = findMonster();
    ts.SendAttack(MyWarrior.Row, MyWarrior.Col, 0, 4, 17001);
    }
    }
     
  13. minhuy

    minhuy Youtube Master Race

    Tham gia ngày:
    4/9/05
    Bài viết:
    38
    ;))r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r
     
  14. mark_2000

    mark_2000 Donkey Kong

    Tham gia ngày:
    5/3/06
    Bài viết:
    341
    chài anh heocoi nói mấy cái khác đi VD nói về ( NPC Dialog ID) của TT để anh em đi bot TT nào.Để luyện đệ cho lên nhanh ^_^ mong sư huynh giúp đỡ.
     
  15. KoKen

    KoKen Youtube Master Race

    Tham gia ngày:
    22/2/06
    Bài viết:
    65
    vậy trong 1 máy muốn dể nhìu acc LENG@ thì phải làm sao vậy bác nmt
     
  16. KoKen

    KoKen Youtube Master Race

    Tham gia ngày:
    22/2/06
    Bài viết:
    65
    ah còn mấy phần
    ********************* Battle Started **********************/
    public override void BattleStarted()
    {
    battle_count++;
    myturn = 0;
    peturn = 0;
    }


    /********************* Battle Stoped ***********************/
    public override void BattleStoped()
    {
    AutoEatFood();
    ProcessInventoryAction();
    CheckDisconnect();
    ViewState();
    }


    /******************* Receive Question *********************/
    public override void doRecvQuestion()
    {
    NS_count++;
    }


    /******************** Response Answer **********************/
    public override void ResponseAnswer()
    {
    string tmp=ts.LastQuestion.Replace("=?","");
    int ans=ts.Eval(tmp);
    byte ans_index=Convert.ToByte(ts.LastAnswers[ans.ToString()]);
    ts.Answer(ans_index);
    }


    /******************** NPC Dialog Menu **********************/
    public override void NpcDialogMenu(ushort DialogId)
    {
    debug("Dialog Menu ID = "+DialogId.ToString());
    }


    /********************* NPC Dialog ID ***********************/
    public override void NpcDialog(ushort DialogId)
    {
    debug("Dialog ID = "+DialogId.ToString());
    }


    /********************* On NPC Appear ***********************/
    public override void onNPCAppear(ushort npcmapid, int x, int y)
    {
    }


    /************************ On Timer *************************/
    public override void OnTimer()
    {
    if (pt1 == 0) {ts.AcceptParty(idmem1);}
    if (pt2 == 0) {ts.AcceptParty(idmem2);}
    if (pt3 == 0) {ts.AcceptParty(idmem3);}
    if (pt4 == 0) {ts.AcceptParty(idmem4_sena);}
    }


    /********************* Accepted Party **********************/
    public override void AcceptedParty(uint playerid)
    {
    if (playerid == idmem1) {debug(playerid + " Gia nhập đội ngũ");pt1 = 1;}
    if (playerid == idmem2) {debug(playerid + " Gia nhập đội ngũ");pt2 = 1;}
    if (playerid == idmem3) {debug(playerid + " Gia nhập đội ngũ");pt3 = 1;}
    if (playerid == idmem4_sena) {debug(playerid + " Gia nhập đội ngũ");pt4 = 1;
    ts.Sena(idmem4_sena);debug(playerid + " Làm Quân Sư");}
    if (pt1 ==1 && pt2 == 1 && pt3 == 1 && pt4 == 1) {ts.SetTimerOnOff(false);ts.delay(1000);debug("Đội ngũ đã đầy -> Start");Start();}
    }


    /*********************** Party Stop ************************/
    public override void PartyStop(uint playerid)
    {
    if (playerid == idmem1) {debug(playerid+" Rời khỏi đội ngủ -> Disconnect !!!");ts.Disconnect();}
    if (playerid == idmem2) {debug(playerid+" Rời khỏi đội ngủ -> Disconnect !!!");ts.Disconnect();}
    if (playerid == idmem3) {debug(playerid+" Rời khỏi đội ngủ -> Disconnect !!!");ts.Disconnect();}
    if (playerid == idmem4_sena) {debug(playerid+" Rời khỏi đội ngủ -> Disconnect !!!");ts.Disconnect();}
    }


    /********************** Warp Finish ************************/
    public override void warpFinish()
    {
    Start();
    }


    /************************* Start ***************************/
    public override void Start()
    {
    if (ts.Character.mapid == mapid1) {
    ts.Walk(1542,180);
    ts.Warp(warpid1);
    return;
    } else
    if (ts.Character.mapid == mapid2) {
    ts.Warp(warpid2);
    return;
    }
    }


    /************************** Stop ***************************/
    public override void Stop()
    {
    }

    /*********************** View State ************************/
    void ViewState()
    {
    debug("************************************************** **********************",255) ;
    debug(" Số trận đánh : " + battle_count ,255) ;
    debug(" HP của "+ts.Character.CharName+" = " + ts.Character.HP +" "+ "/" +" "+ ts.Character.MAXHP,255);
    debug(" HP của "+ts.CurrentPartner.CharName +" = " + ts.CurrentPartner.HP + " "+"/" +" "+ ts.CurrentPartner.MAXHP +" "+" FAI = " + ts.CurrentPartner.fai,255);
    debug(" Số lần gặp BTQ : "+ NS_count +" Số con ma : " + ts.Character.ghost ,255) ;
    debug("======= Script by Jet007 - Copy Right GameVN–™ =======",255) ;
    }


    /********************* Fishish Answer **********************/
    public override void FinishAnswer()
    {
    ts.delay(2000);
    Start();
    }


    /**************** Request Party Accept From ****************/

    //public override void RequestPartyAcceptFrom(uint playerid)
    //{
    //if (playerid == idmem1) {ts.delay(500);ts.AcceptParty(playerid); pt1 = 1;debug(playerid + " Johned team");}
    //if (playerid == idmem2) {ts.delay(500);ts.AcceptParty(playerid); pt2 = 1;debug(playerid + " Johned team");}
    //if (playerid == idmem3) {ts.delay(500);ts.AcceptParty(playerid); pt3 = 1;debug(playerid + " Johned team");}
    //if (playerid == idmem4_sena) {ts.delay(500);ts.AcceptParty(playerid);ts.delay(5 00);ts.Sena(playerid); pt4 = 1;debug(playerid + " Johned team, Quân Sư = "+playerid);}
    //if (pt1 == 1 && pt2 == 1 && pt3 == 1 && pt4 == 1) {debug("Party Full -> Start ");Start();}
    //}


    /************************ Init Bot *************************/
    public override void InitBot()
    {
    ts.SetTimerOnOff(true);
    if (ts.Character.mapid == mapid2) {ts.Warp(warpid2);}
    AddDropItemList("viênongmật");
    AddDropItemList("tựđ uốngthuốc");
    AddDropItemList("viên công kích");
    ViewState();
    }

    có nghĩa là gì vậy bác nmt
     
  17. KoKen

    KoKen Youtube Master Race

    Tham gia ngày:
    22/2/06
    Bài viết:
    65
    mấy phần như vậy có cấn chỉnh sửa gì ko vậy bác
     
  18. unknown2k

    unknown2k Youtube Master Race

    Tham gia ngày:
    25/6/05
    Bài viết:
    34
    Mấy cái scrip này viết xong để gọi vào chương trình thì phải làm sao mấy pác pro help cái
     
  19. Xã Hội Đen

    Xã Hội Đen Youtube Master Race

    Tham gia ngày:
    20/2/06
    Bài viết:
    71
    Hoan nghênh việc lập topic này, nhưng Mod hãy cho nó thêm chữ chú ý để ko bao giờ bị rớt xuống trang 2 đi Mod
     
  20. RedHair

    RedHair Donkey Kong

    Tham gia ngày:
    19/11/04
    Bài viết:
    321
    Nơi ở:
    HCM city,good things
    ọe bác nobita server Hứa chữ tốt ghê nhỉ hem biết còn khỏe post tipế ko đây T___T thấy ông post mới có bài là thấy le cái đầu heheheh còn cả chục cái hàm mới ghê =))
     

Chia sẻ trang này