PDA

View Full Version : Cách thêm % của boss



angelvipno.1
22-09-12, 08:28 PM
Như tiêu đề, bạn nào giúp mình làm sao thêm cột % máu boss khi vào s boss để dễ nhìn hơn. Tks mọi người

Scofield9x
22-09-12, 08:59 PM
Như tiêu đề, bạn nào giúp mình làm sao thêm % máu boss khi vào s boss để dễ nhìn hơn. Tks mọi người

Thêm % đang 100% thì lên 120% thì mình không biết còn Tăng máu boss thì mình biết
vào Db_tank >>> tables >>> dbo.NPC_Info>>> Xem dòng ID boss xog bạn xem cột blood đo là chỉnh máu

angelvipno.1
22-09-12, 09:51 PM
Thêm % đang 100% thì lên 120% thì mình không biết còn Tăng máu boss thì mình biết
vào Db_tank >>> tables >>> dbo.NPC_Info>>> Xem dòng ID boss xog bạn xem cột blood đo là chỉnh máu
À không phải, ý mình là làm sao thêm cột máu % boss khi đi s mà.

angelvipno.1
23-09-12, 04:29 PM
Ai giúp mình đi mà!!!!!!!!!!!!!!!!!!!!!!!!

quancoi000
23-09-12, 04:58 PM
Ai giúp mình đi mà!!!!!!!!!!!!!!!!!!!!!!!!

nếu s đó là s mà bạn mặc định là gọi boss thì sẽ có cột % máu, còn nếu NPC của bạn lại lấy ID của boss thì không có thanh % máu đâu! =))

angelvipno.1
23-09-12, 05:27 PM
Bạn có thể nói rõ hơn đc k? Mình chưa hiểu lắm

angelvipno.1
23-09-12, 07:20 PM
Ai giúp mình với!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

quancoi000
23-09-12, 11:19 PM
bạn xem cái s2 của gà chẳng hạn nhé! bạn sẽ thấy ở đây có đoạn bossID như sau:


using System;
using System.Collections.Generic;
using System.Text;
using Game.Logic.AI;
using Game.Logic.Phy.Object;
using Game.Logic;

namespace GameServerScript.AI.Messions
{
public class CHM1273 : AMissionControl
{
private SimpleBoss m_boss;

private PhysicalObj m_moive;

private PhysicalObj m_front;

private int IsSay = 0;

private int bossID = 1203;

private int npcID = 1209;


private static string[] KillChat = new string[]{
"送你回老家!",

"就凭你还妄想能够打败我?"
};

private static string[] ShootedChat = new string[]{
"哎呦!很痛…",

"我还顶的住…"
};
public override int CalculateScoreGrade(int score)
{
base.CalculateScoreGrade(score);
if (score > 900)
{
return 3;
}
else if (score > 825)
{
return 2;
}
else if (score > 725)
{
return 1;
}
else
{
return 0;
}
}

public override void OnPrepareNewSession()
{
base.OnPrepareNewSession();
Game.AddLoadingFile(1, "bombs/61.swf", "tank.resource.bombs.Bomb61");
Game.AddLoadingFile(2, "image/game/thing/BossBornBgAsset.swf", "game.asset.living.BossBgAsset");
Game.AddLoadingFile(2, "image/game/thing/BossBornBgAsset.swf", "game.asset.living.boguoLeaderAsset");
int[] resources = { bossID, npcID };
Game.LoadResources(resources);
Game.LoadNpcGameOverResources(resources);
Game.SetMap(1073);
Game.IsBossWar = "啵咕队长";

foreach (Player player in Game.GetAllPlayers())
{
//player.AfterKilledByLiving += new KillLivingEventHanlde();
player.AfterKillingLiving += new KillLivingEventHanlde(msg);
}

}
public static void msg(Living living, Living target, int damageAmount, int criticalAmount)
{
}

public override void OnStartGame()
{
base.OnStartGame();
m_moive = Game.Createlayer(0, 0, "moive", "game.asset.living.BossBgAsset", "out", 1, 0);
m_front = Game.Createlayer(680, 330, "font", "game.asset.living.boguoLeaderAsset", "out", 1, 0);
m_boss = Game.CreateBoss(bossID, 770, -1500, -1, 1);

m_boss.FallFrom(770, 301, "fall", 0, 2, 1000);
m_boss.SetRelateDemagemRect(34, -35, 11, 18);
m_boss.AddDelay(10);
m_boss.Say("你们胆敢闯入我的地盘,准备受死吧� �", 0, 6000);
m_boss.PlayMovie("call", 5900, 0);
m_moive.PlayMovie("in", 9000, 0);
m_boss.PlayMovie("weakness", 10000, 5000);
m_front.PlayMovie("in", 9000, 0);
m_moive.PlayMovie("out", 15000, 0);

//设置本关卡为Boss关卡,关卡胜利后,� ��家可以翻一张牌
Game.BossCardCount = 1;
}

public override void OnNewTurnStarted()
{
base.OnNewTurnStarted();
List<Player> players = Game.GetAllFightPlayers();
foreach (Player player in players)
{
player.AfterKilledByLiving += new KillLivingEventHanlde(OnKillPlayer);
}
IsSay = 0;

}

public override void OnBeginNewTurn()
{
base.OnBeginNewTurn();
if (Game.TurnIndex > 1)
{
if (m_moive != null)
{
Game.RemovePhysicalObj(m_moive, true);
m_moive = null;
}
if (m_front != null)
{
Game.RemovePhysicalObj(m_front, true);
m_front = null;
}
}
}

public override bool CanGameOver()
{
base.CanGameOver();

if (Game.TurnIndex > Game.MissionInfo.TotalTurn - 1)
{
return true;
}

if (m_boss.IsLiving == false)
{
return true;
}
else
{
return false;
}
}

public override int UpdateUIData()
{

if (m_boss == null)
return 0;

if (m_boss.IsLiving == false)
{
return 1;
}
return base.UpdateUIData();
}

public override void OnGameOver()
{
base.OnGameOver();

if (m_boss.IsLiving == false)
{
Game.IsWin = true;
}
else
{
Game.IsWin = false;
}

List<LoadingFileInfo> loadingFileInfos = new List<LoadingFileInfo>();
loadingFileInfos.Add(new LoadingFileInfo(2, "image/map/show4.jpg", ""));
Game.SendLoadResource(loadingFileInfos);
}

public override void DoOther()
{
base.DoOther();

int index = Game.Random.Next(0, KillChat.Length);
m_boss.Say(KillChat[index], 0, 0);

}

public void OnKillPlayer(Living living, Living target, int damageAmount, int criticalAmount)
{
int index = Game.Random.Next(0, KillChat.Length);
m_boss.Say(KillChat[index], 0, 0);
}

public override void OnShooted()
{
if (m_boss.IsLiving && IsSay == 0)
{
int index = Game.Random.Next(0, ShootedChat.Length);
m_boss.Say(ShootedChat[index], 0, 1500);
IsSay = 1;
}

}
}
}


chỗ mình bôi đỏ là đoạn script gọi boss, ở đây ID của boss là 1203, với bộ sv của mình thì đó là boss Đội Trường Gà (gà thường).
bạn có thể dùng script này để gọi boss khác ra (gọi con boss rồng ra cũng đc) =)). nhưng thế thì nó mất hết cái hay của gunny mẹ rồi nhể =))

angelvipno.1
24-09-12, 12:42 AM
Vậy làm sao có thanh % boss trong s3,4,5 bạn?
Hok lẽ thêm đoạn này vào cái mession sao? Trong s3 có 2 boss gà. Làm sao gọi cả 2 boss?

private SimpleBoss m_boss;

private PhysicalObj m_moive;

private PhysicalObj m_front;

private int IsSay = 0;

private int bossID = 1203;

private int npcID = 1209;

angelvipno.1
24-09-12, 11:25 AM
Có ai giúp mình ko??????????????

angelvipno.1
24-09-12, 10:09 PM
Ai giúp mình với !!!!!!!!!!!!!!!!!!!!!!!!!

quancoi000
24-09-12, 11:52 PM
trước hết, phải nhấn mạnh điều này:
cột máu thì chỉ có boss mới có

cơ bản bạn có thể hiểu như sau:
1. script dùng cho mỗi phó bản thì khác nhau, đó là cái mà không ai có thể phủ nhận, dù cho thêm mắm thêm muối gì cũng thế.
2. mỗi màn khác nhau của mỗi phó bản thì lại có script khác nhau, mình có thể ví dụ điển hình cho bạn là s1 và s2 gà thường. tức là s1 bạn sẽ thấy chỉ có gà hồng và gà tinh anh, không thấy NPC nào có cột máu, tức là bọn gà hồng và gà tinh anh thì không phải là boss. sang s2 khi bắn nhau với thằng đội trưởng gà, bạn sẽ thấy có cột máu, vì ở đây nó là boss. :)

cơ bản như thế là hiểu rồi đúng không? tức là nếu bạn thêm cái thanh máu đó thì chẳng qua là bạn chỉ gọi 1 con NPC bình thường = 1 con boss, vậy thôi!

angelvipno.1
25-09-12, 06:41 PM
Mình đã hiểu ý của bạn. Nhưng mà chẳng phải s3 có 2 boss gà sao? s4,5 chẳng phải có Matthias, bóng ma matthias là boss sao? Nhưng sao mình k gọi đc

angelvipno.1
25-09-12, 11:59 PM
Bạn quancoi000 ơi, giúp mình đi mà !!!!!!!!!!!!

angelvipno.1
26-09-12, 12:27 PM
Ai giúp mình với!!!!!!!!!!!!!!!!!!!!!!!!!!

angelvipno.1
26-09-12, 11:29 PM
Uppppppppppppppppppppppppppppppppppppppp

angelvipno.1
27-09-12, 11:35 AM
Ai giúp mình đi mà!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

angelvipno.1
28-09-12, 01:42 AM
Ai giúp mình với!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!

quancoi000
28-09-12, 11:05 PM
bạn để ý đọc kỹ script của s3 s4 gà khó và gà thường thì sẽ thấy ngay thôi.
mình quote đoạn này cho bạn dễ nhìn nhé!


using System;
using System.Collections.Generic;
using System.Text;
using Game.Logic.AI;
using Game.Logic.Phy.Object;
using Game.Logic;
using SqlDataProvider.Data;
using Bussiness;

namespace GameServerScript.AI.Messions
{
public class CTM1376 : AMissionControl
{
private PhysicalObj m_kingMoive;

private PhysicalObj m_kingFront;

private SimpleBoss m_king = null;

private SimpleBoss m_secondKing = null;

private PhysicalObj[] m_leftWall = null;

private PhysicalObj[] m_rightWall = null;

private int m_kill = 0;

private int m_state = 1305;

private int turn = 0;

private int firstBossID = 1305;

private int secondBossID = 1306;

private int npcID = 1310;

private int direction;


firstBossID và secondBossID...hiểu rồi nhỉ? :)

angelvipno.1
28-09-12, 11:24 PM
Mình hiểu rồi. Nhưng tại sao chỉ có thanh máu boss id 1306 vậy? còn íd 1305 nó gọi trc sao lại k có?
Còn s4 gà ah:


using System;
using System.Collections.Generic;
using System.Text;
using Game.Logic.AI;
using Game.Logic.Phy.Object;
using Game.Logic;
using SqlDataProvider.Data;

namespace GameServerScript.AI.Messions
{
public class CTM1377 : AMissionControl
{
private SimpleBoss m_king = null;

private int m_kill = 0;

private int IsSay = 0;

private int bossID = 1307;

private int npcID = 1304;

Vậy mà vẫn k có thanh máu của boss mặc dù đã gọi đúng.
Thế là sao bạn?

quancoi000
28-09-12, 11:42 PM
Mình hiểu rồi. Nhưng tại sao chỉ có thanh máu boss id 1306 vậy? còn íd 1305 nó gọi trc sao lại k có?
Còn s4 gà ah:


using System;
using System.Collections.Generic;
using System.Text;
using Game.Logic.AI;
using Game.Logic.Phy.Object;
using Game.Logic;
using SqlDataProvider.Data;

namespace GameServerScript.AI.Messions
{
public class CTM1377 : AMissionControl
{
private SimpleBoss m_king = null;

private int m_kill = 0;

private int IsSay = 0;

private int bossID = 1307;

private int npcID = 1304;

Vậy mà vẫn k có thanh máu của boss mặc dù đã gọi đúng.
Thế là sao bạn?

bạn phải đọc hết đoạn script thì mới hiểu đc, phần máu me này thì nói thật là mình tự mò ra chứ chả hề hỏi han ai hết.
bạn nhìn đoạn script của mình đưa ở trên thì thấy:
firstBossID: ID boss trước nộ, tức là thằng quốc vương gà màu vàng.
secondBossID: ID boss lúc nộ, tức là thằng quốc vương gà màu đỏ.

ai mà không phân biệt đc 2 màu này chắc đừng dev gunny :|

tương tự với thằng tù trưởng bộ lạc (bltt) và minotaurus (pdha)

angelvipno.1
29-09-12, 12:22 AM
bạn phải đọc hết đoạn script thì mới hiểu đc, phần máu me này thì nói thật là mình tự mò ra chứ chả hề hỏi han ai hết.
bạn nhìn đoạn script của mình đưa ở trên thì thấy:
firstBossID: ID boss trước nộ, tức là thằng quốc vương gà màu vàng.
secondBossID: ID boss lúc nộ, tức là thằng quốc vương gà màu đỏ.

ai mà không phân biệt đc 2 màu này chắc đừng dev gunny :|

tương tự với thằng tù trưởng bộ lạc (bltt) và minotaurus (pdha)


Nếu như vậy là sao? Làm sao thêm thanh máu boss vào? Bạn nói cụ thể hơn 1 tí đc k?

angelvipno.1
29-09-12, 04:41 PM
Ai giúp mình với!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

angelvipno.1
30-09-12, 07:55 AM
Ai giúp mình với!!!!!!!!!!!!!!!!!!!!!!!!!

quancoi000
30-09-12, 07:44 PM
Nếu như vậy là sao? Làm sao thêm thanh máu boss vào? Bạn nói cụ thể hơn 1 tí đc k?

bạn vẫn không hiểu sao?
chỉ có boss mới có thanh máu, trong cái script bạn gọi boss thì mới hiển thị cái thanh máu.
giả sử 1009 là id của boss gà chẳng hạn nhé!

nếu đoạn script của bạn là:
npcCreat.....1009 thì không có thanh máu.
bossCreat....1009 thì có thanh máu.

không hiểu nữa thì mình bó tay rồi đó!

angelvipno.1
30-09-12, 08:23 PM
bạn vẫn không hiểu sao?
chỉ có boss mới có thanh máu, trong cái script bạn gọi boss thì mới hiển thị cái thanh máu.
giả sử 1009 là id của boss gà chẳng hạn nhé!

nếu đoạn script của bạn là:
npcCreat.....1009 thì không có thanh máu.
bossCreat....1009 thì có thanh máu.

không hiểu nữa thì mình bó tay rồi đó!

Nhưng mà cái đoạn bossCreat...1009 (như bạn giả sử 1009 là id boss đi) thì mình phải thêm vào trong script sao? (Tại vì mình k thấy chỗ đó)
Chỉ cần mình hiểu cái này nữa thui. Và nếu thêm vào thì thêm chỗ nào?

angelvipno.1
01-10-12, 07:01 PM
Ai giúp mình với!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

angelvipno.1
01-10-12, 10:36 PM
Ai giúp mình với!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

quancoi000
01-10-12, 10:53 PM
xem ra mình phải hướng dẫn bạn từ những cái cơ bản nhất rồi.
này nhé:

server lấy dữ liệu phó bản từ database.
database lấy dữ liệu từ script.
script lấy dữ liệu từ các file *.as trong folder script (/road/script/AI/)
script ở trong này được chia làm 3 folder:
1. NPC: các file script trong này quy định các thông tin về các npc như là kiến xanh, kiến đỏ, gà hồng gà tinh anh, và cả các boss: quốc vương gà, nữ vương kiến...
tất nhiên nếu bạn muốn có thêm phó bản thì phải tự build lấy script của các npc ở trong này.
2. Games: chứa các script quy định về phó bản, gà dễ, gà thường, gà khó, gà anh hùng, kiến... đều ở trong này.
bạn muốn build thêm phó bản: bltt, pdha, dcr... thì build thêm ở đây (dựa trên những script có sẵn trong này.)
3. Messions: thông tin về các stage (s trong phó bản).
bạn muốn đi được phó bản thì gần như cái này là quan trọng nhất!
các thông tin về npc, boss đêu ở trong này, quan trọng là bạn có chịu khó đọc hay không?

hi vọng đây là lần cuối mình viết guide cho bạn về vấn đề này. phần còn lại bạn nên động não suy nghĩ, đừng ỷ lại vào người khác quá nhiều như thế, bạn không biết thì có thể hỏi, nhưng bạn không chịu tìm hiểu thì lại là chuyện khác. những hướng dẫn của mình viết trong 2pic này đều là những cái mình học được qua quá trình mày mò tìm hiểu, bạn có thể tìm lại bài viết về hướng dẫn add phó bản. mình chỉ có thể nói thế này, nếu bạn đam mê và có kiến thức thì tiếp tục, còn nếu bạn chỉ là nhất thời, không chịu tìm tòi thì nên dừng lại đi.

angelvipno.1
01-10-12, 11:44 PM
xem ra mình phải hướng dẫn bạn từ những cái cơ bản nhất rồi.
này nhé:

server lấy dữ liệu phó bản từ database.
database lấy dữ liệu từ script.
script lấy dữ liệu từ các file *.as trong folder script (/road/script/AI/)
script ở trong này được chia làm 3 folder:
1. NPC: các file script trong này quy định các thông tin về các npc như là kiến xanh, kiến đỏ, gà hồng gà tinh anh, và cả các boss: quốc vương gà, nữ vương kiến...
tất nhiên nếu bạn muốn có thêm phó bản thì phải tự build lấy script của các npc ở trong này.
2. Games: chứa các script quy định về phó bản, gà dễ, gà thường, gà khó, gà anh hùng, kiến... đều ở trong này.
bạn muốn build thêm phó bản: bltt, pdha, dcr... thì build thêm ở đây (dựa trên những script có sẵn trong này.)
3. Messions: thông tin về các stage (s trong phó bản).
bạn muốn đi được phó bản thì gần như cái này là quan trọng nhất!
các thông tin về npc, boss đêu ở trong này, quan trọng là bạn có chịu khó đọc hay không?

hi vọng đây là lần cuối mình viết guide cho bạn về vấn đề này. phần còn lại bạn nên động não suy nghĩ, đừng ỷ lại vào người khác quá nhiều như thế, bạn không biết thì có thể hỏi, nhưng bạn không chịu tìm hiểu thì lại là chuyện khác. những hướng dẫn của mình viết trong 2pic này đều là những cái mình học được qua quá trình mày mò tìm hiểu, bạn có thể tìm lại bài viết về hướng dẫn add phó bản. mình chỉ có thể nói thế này, nếu bạn đam mê và có kiến thức thì tiếp tục, còn nếu bạn chỉ là nhất thời, không chịu tìm tòi thì nên dừng lại đi.

Xin nói thật với bạn là mấy ngày nay mình đã cố gắng tìm hiểu, và mình cũng đã đọc hết. Nhưng mà có vẻ như mình đã cố gắng tìm tòi xem cái thanh máu boss đó ở đâu nhưng cũng k bít. Thế khi mình hỏi cậu dường như mình thấy cậu trả lời k đi thẳng vấn đề là add thanh máu boss thế nào add ra sao? Và mình cũng xin nhắc lại là mình cần hướng dẫn để add thanh máu boss chứ k phải add thêm phò bản. Còn những cái guide cơ bản đó mình đã biết rùi nên cậu k cần hướng dẫn lại nữa. Hi vọng cậu có thể hiểu vấn đề mình đang nói.

trungqbbn
02-10-12, 06:01 AM
Xin nói thật với bạn là mấy ngày nay mình đã cố gắng tìm hiểu, và mình cũng đã đọc hết. Nhưng mà có vẻ như mình đã cố gắng tìm tòi xem cái thanh máu boss đó ở đâu nhưng cũng k bít. Thế khi mình hỏi cậu dường như mình thấy cậu trả lời k đi thẳng vấn đề là add thanh máu boss thế nào add ra sao? Và mình cũng xin nhắc lại là mình cần hướng dẫn để add thanh máu boss chứ k phải add thêm phò bản. Còn những cái guide cơ bản đó mình đã biết rùi nên cậu k cần hướng dẫn lại nữa. Hi vọng cậu có thể hiểu vấn đề mình đang nói.
bạn không hiểu thì add Yahoo bạn ấy team7 cho có gì phải xoắn thế

hung3020
02-10-12, 06:35 AM
Ý bạn đó là sao con Vua Gà 1 lại không có cột máu boss tượng tự Matthias vs Bóng Ma Matthias
:(:(:(:(:(:(

quancoi000
02-10-12, 06:04 PM
mình nói lại 1 lần nữa, thanh máu chỉ có khi script bạn gọi ra là boss, như đoạn script mình đưa ví dụ:
creatBoss....
trong dấu ... này thì kể cả bạn có cho id của npc bình thường vào đi nữa thì nó vẫn có thanh máu.
bạn chưa thử đọc các script trong folder AI nên bạn mới thế, bạn cứ thử bỏ ra 1 tiếng đồng hồ đọc qua folder này xem. sẽ có rất nhiều điều bổ ích.

có vẻ như đọc lại mấy bài viết trước của bạn thì bạn đang nhầm lẫn rất tai hại về vấn đề này.
thứ nhất, thanh máu của boss ở đây ta không thể thêm được vào trong game bằng cách nào khác ngoài gán từ script.
thứ hai, vẫn là câu nói đó, bạn mở các cái sau lên xem thì chắc sẽ tìm hiểu được kha khá:

đây là hướng dẫn cơ bản nhất của mình để bạn có thể đọc và hiểu các script trong gunny.
script của gà thường chẳng hạn, vào folder Road/Script/AI/Games/
mở thử các file trong đó lên xem, mỗi file quy định một phó bản riêng biệt trong game, gà dễ gà thường gà khó gà anh hùng, kiến...
bạn xem ở trong này sẽ thấy các stage trong các phó bản này. chỗ mà có ("1122,1123,1124,1125") dạng như vầy.
các số trong này chính là thứ tự các stage của phó bản.
tiếp theo chuyển qua folder Road/Script/AI/Messions/
tìm đến các file có số phía sau (như của mình thì mình để là BLTT1122, BLTT1123, BLTT1124, BLTT1125) giống như trên.
đọc thì mới hiểu. ok men?

hung3020
02-10-12, 06:33 PM
mình nói lại 1 lần nữa, thanh máu chỉ có khi script bạn gọi ra là boss, như đoạn script mình đưa ví dụ:
creatBoss....
trong dấu ... này thì kể cả bạn có cho id của npc bình thường vào đi nữa thì nó vẫn có thanh máu.
bạn chưa thử đọc các script trong folder AI nên bạn mới thế, bạn cứ thử bỏ ra 1 tiếng đồng hồ đọc qua folder này xem. sẽ có rất nhiều điều bổ ích.

có vẻ như đọc lại mấy bài viết trước của bạn thì bạn đang nhầm lẫn rất tai hại về vấn đề này.
thứ nhất, thanh máu của boss ở đây ta không thể thêm được vào trong game bằng cách nào khác ngoài gán từ script.
thứ hai, vẫn là câu nói đó, bạn mở các cái sau lên xem thì chắc sẽ tìm hiểu được kha khá:

đây là hướng dẫn cơ bản nhất của mình để bạn có thể đọc và hiểu các script trong gunny.
script của gà thường chẳng hạn, vào folder Road/Script/AI/Games/
mở thử các file trong đó lên xem, mỗi file quy định một phó bản riêng biệt trong game, gà dễ gà thường gà khó gà anh hùng, kiến...
bạn xem ở trong này sẽ thấy các stage trong các phó bản này. chỗ mà có ("1122,1123,1124,1125") dạng như vầy.
các số trong này chính là thứ tự các stage của phó bản.
tiếp theo chuyển qua folder Road/Script/AI/Messions/
tìm đến các file có số phía sau (như của mình thì mình để là BLTT1122, BLTT1123, BLTT1124, BLTT1125) giống như trên.
đọc thì mới hiểu. ok men?
Bải rất hay tks nè 30 charrrrr