satthupro95
24-04-17, 07:33 PM
Thấy bên server private nào đó có tính năng truyền công khá hay, hôm nay mình sẽ chia sẻ một số hàm để làm tính năng này:
1. Hàm khiến người chơi ngồi xuống
me.CallClientScript({"AutoAi:Sit"});
2. Hàm check có ngồi trên ngựa hay không
local bCheckedMe = me.GetNpc().IsRideHorse();
if bCheckedMe ~= 0 then
Dialog:Say("Cần phải xuống ngựa mới có thể truyền công")
return
end
3. Hàm gửi yêu cầu cho đối phương và confirm hoặc từ chối
function tbItem:OnUse()
local tbMemberList, nMemberCount = me.GetTeamMemberList();
if not tbMemberList or nMemberCount ~= 2 then
Dialog:Say("Cần 2 người tổ đội nhau mới có thể sử dụng tính năng này");
return 0;
end
local pTeamMate = nil;
for _, pMember in pairs(tbMemberList) do
if pMember.szName ~= me.szName then
pTeamMate = pMember;
end
end
local szMsg = string.format("Bạn có chắc chắn muốn truyền công cho <color=green>%s<color> không ?", pTeamMate.szName);
local tbOpt =
{
{"Ta đồng ý", self.OnConfirmQiuhun, self, me.nId, pTeamMate.nId, nItemId},
{"Để ta suy nghĩ lại"},
};
Dialog:Say(szMsg, tbOpt);
end
-- Đồng ý nhận lời truyền công
function tbItem:OnConfirmQiuhun(nSuitorId, nTeamMateId, nItemId)
local pSuitor = KPlayer.GetPlayerObjById(nSuitorId);
local pTeamMate = KPlayer.GetPlayerObjById(nTeamMateId);
if not pSuitor or not pTeamMate then
return 0;
end
local bIsNearby = 0;
local tbPlayerList = KPlayer.GetAroundPlayerList(pSuitor.nId, 15);
if (tbPlayerList) then
for _, pPlayer in ipairs(tbPlayerList) do
if (pPlayer.szName == pTeamMate.szName) then
bIsNearby = 1;
end
end
end
if (0 == bIsNearby) then
pSuitor.Msg("Hai người phải đứng gần nhau mới có thể truyền công")
pTeamMate.Msg("Hai người phải đứng gần nhau mới có thể truyền công")
return
end
local bCheckedSuitor = pSuitor.GetNpc().IsRideHorse();
local bCheckedTeamMate = pTeamMate.GetNpc().IsRideHorse();
if bCheckedSuitor ~= 0 or bCheckedTeamMate ~= 0 then
Dialog:Say("Cả 2 phải xuống ngựa mới có thể truyền công")
return
end
pSuitor.CallClientScript({"AutoAi:Sit"});
pTeamMate.CallClientScript({"AutoAi:Sit"});
-- 只要使用了求婚卡片,不论对方是否� �意都得删除
local szMsg = string.format("<color=green>%s<color> muốn truyền công cho bạn, bạn có đồng ý ?", pSuitor.szName);
local tbOpt =
{
{"Vâng tôi đồng ý", self.OnAcceptQiuhun, self, nSuitorId, nTeamMateId},
{"Tôi từ chối", self.OnRefuseQiuhun, self, nSuitorId, nTeamMateId},
};
Setting:SetGlobalObj(pTeamMate);
Dialog:Say(szMsg, tbOpt);
Setting:RestoreGlobalObj();
end
-- Đồng ý truyền công
function tbItem:OnAcceptQiuhun(nSuitorId, nTeamMateId)
local pSuitor = KPlayer.GetPlayerObjById(nSuitorId);
local pTeamMate = KPlayer.GetPlayerObjById(nTeamMateId);
if not pSuitor or not pTeamMate then
return 0;
end
end
-- Từ chối truyền công
function tbItem:OnRefuseQiuhun(nSuitorId, nTeamMateId)
local pSuitor = KPlayer.GetPlayerObjById(nSuitorId);
local pTeamMate = KPlayer.GetPlayerObjById(nTeamMateId);
if not pSuitor or not pTeamMate then
return 0;
end
Dialog:SendBlackBoardMsg(pSuitor, string.format("Thật đáng tiếc, <color=green>%s<color> không muốn truyền công với ngươi", pTeamMate.szName));
end
Với hàm này các bạn có thể áp dụng tính năng khi chạy làm cho cả 1 map ngồi xuống :v
1. Hàm khiến người chơi ngồi xuống
me.CallClientScript({"AutoAi:Sit"});
2. Hàm check có ngồi trên ngựa hay không
local bCheckedMe = me.GetNpc().IsRideHorse();
if bCheckedMe ~= 0 then
Dialog:Say("Cần phải xuống ngựa mới có thể truyền công")
return
end
3. Hàm gửi yêu cầu cho đối phương và confirm hoặc từ chối
function tbItem:OnUse()
local tbMemberList, nMemberCount = me.GetTeamMemberList();
if not tbMemberList or nMemberCount ~= 2 then
Dialog:Say("Cần 2 người tổ đội nhau mới có thể sử dụng tính năng này");
return 0;
end
local pTeamMate = nil;
for _, pMember in pairs(tbMemberList) do
if pMember.szName ~= me.szName then
pTeamMate = pMember;
end
end
local szMsg = string.format("Bạn có chắc chắn muốn truyền công cho <color=green>%s<color> không ?", pTeamMate.szName);
local tbOpt =
{
{"Ta đồng ý", self.OnConfirmQiuhun, self, me.nId, pTeamMate.nId, nItemId},
{"Để ta suy nghĩ lại"},
};
Dialog:Say(szMsg, tbOpt);
end
-- Đồng ý nhận lời truyền công
function tbItem:OnConfirmQiuhun(nSuitorId, nTeamMateId, nItemId)
local pSuitor = KPlayer.GetPlayerObjById(nSuitorId);
local pTeamMate = KPlayer.GetPlayerObjById(nTeamMateId);
if not pSuitor or not pTeamMate then
return 0;
end
local bIsNearby = 0;
local tbPlayerList = KPlayer.GetAroundPlayerList(pSuitor.nId, 15);
if (tbPlayerList) then
for _, pPlayer in ipairs(tbPlayerList) do
if (pPlayer.szName == pTeamMate.szName) then
bIsNearby = 1;
end
end
end
if (0 == bIsNearby) then
pSuitor.Msg("Hai người phải đứng gần nhau mới có thể truyền công")
pTeamMate.Msg("Hai người phải đứng gần nhau mới có thể truyền công")
return
end
local bCheckedSuitor = pSuitor.GetNpc().IsRideHorse();
local bCheckedTeamMate = pTeamMate.GetNpc().IsRideHorse();
if bCheckedSuitor ~= 0 or bCheckedTeamMate ~= 0 then
Dialog:Say("Cả 2 phải xuống ngựa mới có thể truyền công")
return
end
pSuitor.CallClientScript({"AutoAi:Sit"});
pTeamMate.CallClientScript({"AutoAi:Sit"});
-- 只要使用了求婚卡片,不论对方是否� �意都得删除
local szMsg = string.format("<color=green>%s<color> muốn truyền công cho bạn, bạn có đồng ý ?", pSuitor.szName);
local tbOpt =
{
{"Vâng tôi đồng ý", self.OnAcceptQiuhun, self, nSuitorId, nTeamMateId},
{"Tôi từ chối", self.OnRefuseQiuhun, self, nSuitorId, nTeamMateId},
};
Setting:SetGlobalObj(pTeamMate);
Dialog:Say(szMsg, tbOpt);
Setting:RestoreGlobalObj();
end
-- Đồng ý truyền công
function tbItem:OnAcceptQiuhun(nSuitorId, nTeamMateId)
local pSuitor = KPlayer.GetPlayerObjById(nSuitorId);
local pTeamMate = KPlayer.GetPlayerObjById(nTeamMateId);
if not pSuitor or not pTeamMate then
return 0;
end
end
-- Từ chối truyền công
function tbItem:OnRefuseQiuhun(nSuitorId, nTeamMateId)
local pSuitor = KPlayer.GetPlayerObjById(nSuitorId);
local pTeamMate = KPlayer.GetPlayerObjById(nTeamMateId);
if not pSuitor or not pTeamMate then
return 0;
end
Dialog:SendBlackBoardMsg(pSuitor, string.format("Thật đáng tiếc, <color=green>%s<color> không muốn truyền công với ngươi", pTeamMate.szName));
end
Với hàm này các bạn có thể áp dụng tính năng khi chạy làm cho cả 1 map ngồi xuống :v