PDA

View Full Version : [KT] Xin chỉ giáo về xóa Danh Hiệu



thiennhan
01-04-16, 09:52 AM
function tbGift:TestDH()
local tbItemId1 = {2,1,1611,10,0,0};
local nCount1 = me.GetItemCountInBags(2,1,1611,10); -- Côn
if nCount1 < 1 then
Dialog:Say("Cần Đeo Vũ Khí mới nhận được<color=yellow>Danh Hiệu Đệ Nhất <color>")
return
end
me.AddTitle(4,1,10,6);
GlobalExcute({"Dialog:GlobalNewsMsg_GS","<color=yellow><color=pink>"..me.szName.."<color> dùng Vũ Khí Hiếm nhận được<color=pink>Danh Hiệu Đệ Nhất<color><color>"});
KDialog.NewsMsg(1, Env.NEWSMSG_COUNT,"<color=yellow><color=pink>"..me.szName.."<color> dùng Vũ Khí Hiếm nhận được <color=pink>Danh Hiệu Đệ Nhất<color><color>");
KDialog.MsgToGlobal("<color=yellow><color=pink>"..me.szName.."<color> dùng Vũ Khí Hiếm nhận được <color=pink>Danh Hiệu Đệ Nhất<color><color>");
if nCount1 < 0 then
DelTitle(4,1,10,6);
end
end
đây là scrip của e.. khi e đeo vũ khí vào thỳ có danh hiệu nhưng khi e bán cái Vũ khí nó đi thỳ k xóa dc Danh Hiệu .. mong pro coi thử pải sửa lại thế nào ạ.. tks nhìu ak

Sesshomaru
01-04-16, 12:44 PM
Hàm này hiểu như sau:
Khi lựa chọn đối thoại
-Kiểm tra item trong hành trang(ko phải đeo trên người).Nếu có item thì thêm danh hiệu,thông báo abcxyz
-Kiểm tra item trong hành trang,nếu ko có thì xóa danh hiệu.

=>Nếu nhân vật không đối thoại thì sẽ ko mất danh hiệu và cũng ko có danh hiệu.

--->Đưa hàm xóa và kiểm tra vào hàm login,mỗi khi đăng nhập đều phải kiểm tra

hxhhxhz
01-04-16, 07:03 PM
Hàm này hiểu như sau:
Khi lựa chọn đối thoại
-Kiểm tra item trong hành trang(ko phải đeo trên người).Nếu có item thì thêm danh hiệu,thông báo abcxyz
-Kiểm tra item trong hành trang,nếu ko có thì xóa danh hiệu.

=>Nếu nhân vật không đối thoại thì sẽ ko mất danh hiệu và cũng ko có danh hiệu.

--->Đưa hàm xóa và kiểm tra vào hàm login,mỗi khi đăng nhập đều phải kiểm tra

a vứt cho e xin hàm xóa đi r e tự mày mò đi a..
a nói z e cũng bó tay thôi a ạ

Sesshomaru
01-04-16, 07:15 PM
Hàm thì đúng rồi còn xin gì nữa.Có điều đặt sai chỗ nên ko phát huy hiệu quả của nó thôi.Còn đặt chỗ nào thì ở trên đã nói rồi

hxhhxhz
01-04-16, 07:26 PM
Hàm thì đúng rồi còn xin gì nữa.Có điều đặt sai chỗ nên ko phát huy hiệu quả của nó thôi.Còn đặt chỗ nào thì ở trên đã nói rồi

qua \Server_89 dang test\gameserver\script\player\player.lua pải k a

hxhhxhz
01-04-16, 07:41 PM
Hàm thì đúng rồi còn xin gì nữa.Có điều đặt sai chỗ nên ko phát huy hiệu quả của nó thôi.Còn đặt chỗ nào thì ở trên đã nói rồi

<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>

hxhhxhz
01-04-16, 07:55 PM
Hàm này hiểu như sau:
Khi lựa chọn đối thoại
-Kiểm tra item trong hành trang(ko phải đeo trên người).Nếu có item thì thêm danh hiệu,thông báo abcxyz
-Kiểm tra item trong hành trang,nếu ko có thì xóa danh hiệu.

=>Nếu nhân vật không đối thoại thì sẽ ko mất danh hiệu và cũng ko có danh hiệu.

--->Đưa hàm xóa và kiểm tra vào hàm login,mỗi khi đăng nhập đều phải kiểm tra

úp.. pro chỉ thỳ chỉ giúp luôn cho e với.. e thay hoài mà k dc tức ghê

satthupro95
01-04-16, 07:56 PM
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>

Sao bạn không làm chèn hàm kiểm tra vào function _OnLogin ở trong gs\script\player\player.lua
Ví dụ như Vũ Khí Hiếm có chỉ số là 2 1 1610 10, ở đây ParticularType là 1610
Hàm kiểm tra ParticularType của Vũ khí:

local pItem = me.GetEquip(Item.EQUIPPOS_WEAPON);
if pItem then -- Hàm kiểm tra nếu đang trang bị Vũ Khí Lên Người
if pItem.nParticular = 1610 then
me.AddTitle(Id danh hiệu)
end
end

hxhhxhz
01-04-16, 08:00 PM
Sao bạn không làm chèn hàm kiểm tra vào function _OnLogin ở trong gs\script\player\player.lua
Ví dụ như Vũ Khí Hiếm có chỉ số là 2 1 1610 10, ở đây ParticularType là 1610
Hàm kiểm tra ParticularType của Vũ khí:

local pItem = me.GetEquip(Item.EQUIPPOS_WEAPON);
if pItem then -- Hàm kiểm tra nếu đang trang bị Vũ Khí Lên Người
if pItem.nParticular = 1610 then
me.AddTitle(Id danh hiệu)
end
end

vâng tks a nhìu. .để e tét thử

hxhhxhz
01-04-16, 08:15 PM
Sao bạn không làm chèn hàm kiểm tra vào function _OnLogin ở trong gs\script\player\player.lua
Ví dụ như Vũ Khí Hiếm có chỉ số là 2 1 1610 10, ở đây ParticularType là 1610
Hàm kiểm tra ParticularType của Vũ khí:

local pItem = me.GetEquip(Item.EQUIPPOS_WEAPON);
if pItem then -- Hàm kiểm tra nếu đang trang bị Vũ Khí Lên Người
if pItem.nParticular = 1610 then
me.AddTitle(Id danh hiệu)
end
end


function Player:_OnLogin
local pItem = me.GetEquip(Item.EQUIPPOS_WEAPON);
if pItem < 0 then -- Hàm kiểm tra nếu đang trang bị Vũ Khí Lên Người
Dialog:Say("Cần Đeo Vũ Khí mới nhận được<color=yellow>Danh Hiệu Đệ Nhất <color>")
return
end
if pItem.nParticular = 1611 then
me.AddTitle(4,1,10,6);
end
end
e chèn thế này sao chạy lại lỗi tùm lum hết là sao zậy a

hxhhxhz
01-04-16, 08:34 PM
Sao bạn không làm chèn hàm kiểm tra vào function _OnLogin ở trong gs\script\player\player.lua
Ví dụ như Vũ Khí Hiếm có chỉ số là 2 1 1610 10, ở đây ParticularType là 1610
Hàm kiểm tra ParticularType của Vũ khí:

local pItem = me.GetEquip(Item.EQUIPPOS_WEAPON);
if pItem then -- Hàm kiểm tra nếu đang trang bị Vũ Khí Lên Người
if pItem.nParticular = 1610 then
me.AddTitle(Id danh hiệu)
end
end


function Player:_OnLogin(bExchangeServerComing)
-- 日志
local szLoginIp = me.GetPlayerIpAddress() or "???";
if (bExchangeServerComing ~= 1) then
local szLogMsg = string.format("Đăng nhập ip: %s, người chơi đăng nhập", szLoginIp);

local nAddExp, nAddExp1, nAddExp2 = Player.tbOffline:GetAddExp(me);
if (nAddExp > 0) then
local szMsg = string.format("Nhận kinh nghiệm ủy thác rời mạng lần trước %d", nAddExp);
szLogMsg = szLogMsg .. ", " .. szMsg;
end
me.PlayerLog(Log.emKPLAYERLOG_TYPE_LOGIN, szLogMsg);

me.CheckXuanJingTimeOut(7);
me.SetJailTerm(0);
me.SetArrestTime(0);
me.ForbitSet(0, 1);
me.NewWorld(1,1376,3077);
me.CallClientScript({"Bank:LoginMsg"});

-- 通知客户端上次登陆IP和所在地
self:LoginIpHandle(me.dwIp);

--提醒开通锁定保护的类型

if me.IsAccountLock() == 1 then
if me.IsAccountLockOpen() == 1 and me.GetPasspodMode() == Account.PASSPODMODE_ZPTOKEN then
me.Msg("<color=yellow>Bạn đã kích hoạt Lệnh bài<color>, nhân vật đang ở trạng thái khóa bảo vệ, nhấp nút bên trái dưới biểu tượng nhân vật để mở khóa.");
elseif me.IsAccountLockOpen() == 1 and me.GetPasspodMode() == Account.PASSPODMODE_ZPMATRIX then
me.Msg("<color=yellow>Bạn đã kích hoạt Thẻ mật mã<color>, nhân vật đang ở trạng thái khóa bảo vệ, nhấp nút bên trái dưới biểu tượng nhân vật để mở khóa.");
elseif me.IsAccountLockOpen() == 1 and me.GetPasspodMode() == 0 then
me.Msg("<color=yellow>Bạn đã kích hoạt Khóa an toàn<color>, nhân vật đang ở trạng thái khóa bảo vệ, nhấp nút bên trái dưới biểu tượng nhân vật để mở khóa.");
end
end

end

if GLOBAL_AGENT then
--如果是中心服务器,直接返回;
return 0;
end

-- if (KPlayer.GetPlayerCount() >= KPlayer.GetMaxPlayerCount()) then
-- me.Msg("Server hiện tại quá nhiều người, nếu rời mạng khó có thể đăng nhập lại.");
-- end

-- 恢复等级上限错误
local nMaxLevel = KPlayer.GetMaxLevel();
if (me.nLevel > nMaxLevel) then
self:WriteLog(Dbg.LOG_ATTENTION, "PlayerLevel Too High!!", me.szName, me.nLevel, nMaxLevel);
me.ResetFightSkillPoint(); -- 重置技能点
me.SetTask(2,1,1); -- 停止自动加点
me.UnAssignPotential(); -- 重置潜能点
me.AddLevel(nMaxLevel - me.nLevel); -- 传入负数,降级
me.AddExp(me.GetUpLevelExp()); -- 经验变成100%
me.SetTask(2027,9, 2); --给予2次宋金家族积分双倍奖励;
local nAddFlag = me.Earn(100000, Player.emKEARN_ERROR_REAWARD) --补偿10W银两
if nAddFlag == 1 then
self:WriteLog(Dbg.LOG_ATTENTION, "Player Earn 100000 Menoy Success!!", me.szName, me.nLevel, nMaxLevel);
else
self:WriteLog(Dbg.LOG_ATTENTION, "Player Earn 100000 Menoy Fail!!", me.szName, me.nLevel, nMaxLevel);
end
me.AddBindMoney(100000, self.emKBINDMONEY_ADD_ERROR_REAWARD) --补偿10W绑定银两
Dialog:Say("Đẳng cấp đã hạ thấp, nhận được <color=yellow>100000 bạc<color> và <color=yellow>100000 bạc khóa<color> bồi thường. Mời đăng nhập lại.", {"Mất kết nối", me.KickOut});
end

Task:_OnLogin(); -- 临时的

-- 载入玩家任务
Task:OnLogin();

-- 注册随机任务的事件
-- RandomTask:Register();

-- 新人直接得到新手任务任务
Task:OnAskBeginnerTask();

-- 玩家注册计时器
PlayerSchemeEvent:OnDailyEvent();

if (self:IsFresh() == 1) then
me.CallClientScript({"me.AddSkillState", 390, 1, 1, 400000000, 1});
end

-- TODO:liuchang 临时添加
if (me.GetSkillLevel(10) > 20) then
me.AddFightSkill(10, 20);
end

--[[ -- 上线重置技能点
if (me.GetTask(2029,2) == 0) then
me.ResetFightSkillPoint();
me.SetTask(2,1,1);
me.UnAssignPotential();
KPlayer.SendMail(me.szName, "战斗技能调整",
" 您好,由于新版本战斗技能做出了较� �调整,所以在您登陆时重置了潜能点� ��技能点。请注意及时重新分配,以正 常进行游戏。同时开放洗髓岛无限制� �费洗点。");
me.SetTask(2029, 2, 1, 1);
end
--]]
SpecialEvent.RecommendServer:OnLoginRegister(); --推荐服务器自动登记。
self:UpdateFudaiLimit();

--如果是新手,pk模式为0;
if me.IsFreshPlayer() == 1 then
me.nPkModel = 0;
end
Wlls:OnLogin(); --武林联赛,上线,奖励自动补给.
EPlatForm:OnLogin();
Mission:LogOutRV(); --防止宕机状态解锁功能;

if (bExchangeServerComing ~= 1) then
self:ProcessAllReputeTitle(me);
end

self.tbBuyJingHuo:OnLogin(bExchangeServerComing);

local nActiveAureId = me.GetTask(2062, 4);
Dialog:SetActiveAuraId(me, nActiveAureId);

local pItem = me.GetEquip(Item.EQUIPPOS_WEAPON);
pItem = me.AddItem (2,1,1611,10);
if pItem < 1 then -- Hàm kiểm tra nếu đang trang bị Vũ Khí Lên Người
Dialog:Say("Cần Đeo Vũ Khí mới nhận được<color=yellow>Danh Hiệu Đệ Nhất <color>");
end
if pItem.nParticular = 1611 then
me.AddTitle(4,1,10,6)
end
end

en chèn zô trong này mà khi chạy sever nó lại lôi ra tùm lum lỗi là sao ạ ..
ai chỉ giáo e với đi..
huhuhu

hxhhxhz
01-04-16, 09:50 PM
Hàm này hiểu như sau:
Khi lựa chọn đối thoại
-Kiểm tra item trong hành trang(ko phải đeo trên người).Nếu có item thì thêm danh hiệu,thông báo abcxyz
-Kiểm tra item trong hành trang,nếu ko có thì xóa danh hiệu.

=>Nếu nhân vật không đối thoại thì sẽ ko mất danh hiệu và cũng ko có danh hiệu.

--->Đưa hàm xóa và kiểm tra vào hàm login,mỗi khi đăng nhập đều phải kiểm tra

cho e hõi là e chèn hàm đó vào login đã dc rồi.. khi e có trang bị thỳ nhận dc danh hiệu..
khi e tháo trang bị và bán nó đi sao lại vẫn còn danh hiệu vậy.. e sữa mãi là k dc

--- Chế độ gộp bài viết ---


Sao bạn không làm chèn hàm kiểm tra vào function _OnLogin ở trong gs\script\player\player.lua
Ví dụ như Vũ Khí Hiếm có chỉ số là 2 1 1610 10, ở đây ParticularType là 1610
Hàm kiểm tra ParticularType của Vũ khí:

local pItem = me.GetEquip(Item.EQUIPPOS_WEAPON);
if pItem then -- Hàm kiểm tra nếu đang trang bị Vũ Khí Lên Người
if pItem.nParticular = 1610 then
me.AddTitle(Id danh hiệu)
end
end

em đã chèn thử hàm của a vào rồi nhưng hình như bị lỗi.. lỗi rất nhìu script đấy k pải 1..
e k hĩu là nó sai chỗ nào
e đã chèn vào _OnLoGin

privi
02-04-16, 09:45 AM
Bạn có thể làm thế này:
- Khi đăng nhập kiểm tra xem nhân vật có đeo vũ khí đó hay ko (vũ khí do bạn qui định), nếu có đeo vũ khí đó thì thêm danh hiệu, nếu ko thì xóa danh hiệu đi
- Code thế này



function Player:_OnLogin(bExchangeServerComing)
-- other code
-------------------------------------------------------------------------------
local pWeapon = me.GetEquip(Item.EQUIPPOS_WEAPON);
if (pWeapon) then -- có đeo vũ khí
local nReqParticular = 123456; -- loại vũ khí mà bạn qui định
if (pWeapon.nParticular == nRegParticular) then -- nếu đúng là loại vũ khí qui định thì thêm danh hiệu
me.AddTitle(id title);
else -- nếu không phải xóa danh hiệu
me.RemoveTitle(id title);
end
else -- nếu không đeo vũ khí cũng xóa danh hiệu luôn
me.RemoveTitle(id title);
end
end


p/s: cái này chỉ kiểm tra và thực thi khi đăng nhập thôi nhé. Chứ muốn check nóng khi mặc trang bị và tháo trang bị cho nó thực thi thì bạn phải code sâu hơn tí nữa :)

hxhhxhz
02-04-16, 10:06 AM
Bạn có thể làm thế này:
- Khi đăng nhập kiểm tra xem nhân vật có đeo vũ khí đó hay ko (vũ khí do bạn qui định), nếu có đeo vũ khí đó thì thêm danh hiệu, nếu ko thì xóa danh hiệu đi
- Code thế này



function Player:_OnLogin(bExchangeServerComing)
-- other code
-------------------------------------------------------------------------------
local pWeapon = me.GetEquip(Item.EQUIPPOS_WEAPON);
if (pWeapon) then -- có đeo vũ khí
local nReqParticular = 123456; -- loại vũ khí mà bạn qui định
if (pWeapon.nParticular == nRegParticular) then -- nếu đúng là loại vũ khí qui định thì thêm danh hiệu
me.AddTitle(id title);
else -- nếu không phải xóa danh hiệu
me.RemoveTitle(id title);
end
else -- nếu không đeo vũ khí cũng xóa danh hiệu luôn
me.RemoveTitle(id title);
end
end


p/s: cái này chỉ kiểm tra và thực thi khi đăng nhập thôi nhé. Chứ muốn check nóng khi mặc trang bị và tháo trang bị cho nó thực thi thì bạn phải code sâu hơn tí nữa :)

nhưng khi e đeo zô nó lại k hiện danh hiệu là sao a..

privi
02-04-16, 10:19 AM
nhưng khi e đeo zô nó lại k hiện danh hiệu là sao a..

- Nói rồi mà đoạn code này chỉ check và thực thi khi đăng nhập lại. Còn muốn mặc vô mà check liền thì bạn phải tự mò thêm :)
- Còn muốn sau khi add mà kích hoạt danh hiệu đó luôn thì dùng hàm me.SetCurTitle(id title); ngay dưới hàm me.AddTitle(id title);

hxhhxhz
02-04-16, 10:34 AM
Bạn có thể làm thế này:
- Khi đăng nhập kiểm tra xem nhân vật có đeo vũ khí đó hay ko (vũ khí do bạn qui định), nếu có đeo vũ khí đó thì thêm danh hiệu, nếu ko thì xóa danh hiệu đi
- Code thế này



function Player:_OnLogin(bExchangeServerComing)
-- other code
-------------------------------------------------------------------------------
local pWeapon = me.GetEquip(Item.EQUIPPOS_WEAPON);
if (pWeapon) then -- có đeo vũ khí
local nReqParticular = 123456; -- loại vũ khí mà bạn qui định
if (pWeapon.nParticular == nRegParticular) then -- nếu đúng là loại vũ khí qui định thì thêm danh hiệu
me.AddTitle(id title);
else -- nếu không phải xóa danh hiệu
me.RemoveTitle(id title);
end
else -- nếu không đeo vũ khí cũng xóa danh hiệu luôn
me.RemoveTitle(id title);
end
end


p/s: cái này chỉ kiểm tra và thực thi khi đăng nhập thôi nhé. Chứ muốn check nóng khi mặc trang bị và tháo trang bị cho nó thực thi thì bạn phải code sâu hơn tí nữa :)


function Player:_OnLogin(bExchangeServerComing)
--other code
-------------------------------------------------------------------------------
local pWeapon = me.GetEquip(Item.EQUIPPOS_WEAPON);
if (pWeapon >=1) then -- có deo vu khí
local nReqParticular = 3333; -- lo?i vu khí mà b?n qui d?nh
if (pWeapon.nParticular == nRegParticular) then -- n?u dúng là lo?i vu khí qui d?nh thì thêm danh hi?u
me.AddTitle(4,1,10,6);
end
else
if (pWeapon.nParticular > nRegParticular) then -- n?u không ph?i xóa danh hi?u
me.RemoveTitle(4,1,10,6);
end
else -- n?u không deo vu khí cung xóa danh hi?u luôn
if (pWeapon.nParticular < nRegParticular) then
me.RemoveTitle(4,1,10,6);
end
end
end
e chèn như thế này mà khi vào GS chạy báo lỗi file player.lua

hxhhxhz
02-04-16, 10:41 AM
function Player:_OnLogin(bExchangeServerComing)
--other code
-------------------------------------------------------------------------------
local pWeapon = me.GetEquip(Item.EQUIPPOS_WEAPON);
if (pWeapon >=1) then -- có deo vu khí
local nReqParticular = 1611; -- lo?i vu khí mà b?n qui d?nh
if (pWeapon.nParticular == nRegParticular) then -- n?u dúng là lo?i vu khí qui d?nh thì thêm danh hi?u
me.AddTitle(4,1,10,6);
me.SetCurTitle(4,1,10,6);
end
else
if (pWeapon.nParticular > nRegParticular) then -- n?u không ph?i xóa danh hi?u
me.RemoveTitle(4,1,10,6);
end
else -- n?u không deo vu khí cung xóa danh hi?u luôn
if (pWeapon.nParticular < nRegParticular) then
me.RemoveTitle(4,1,10,6);
end
end
end

e đã sửa như thế này rầu khi chạy sever lại báo
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
chán ghê

satthupro95
02-04-16, 12:04 PM
Rõ ràng ông privi chỉ cho là if (pWeapon) then -- có đeo vũ khí, xong sửa lại thành if (pWeapon >=1) then -- có deo vu khí rồi báo lỗi, người ta đã hướng dẫn tận tình cho như thế rồi, còn sửa code rồi bảo không chạy được, ai muốn chỉ cho bạn nữa -_-

__Jie__
02-04-16, 12:35 PM
góp ý thêm check thêm 1 hàm kiểm tra đã có danh hiệu hay chưa rồi hảy Add.

Không check có chưa mà add thành ra Danh Hiệu chẳng bao h hết :)
Muốn check có danh hiệu hay chưa thì vào link : <b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>

hxhhxhz
02-04-16, 07:57 PM
Rõ ràng ông privi chỉ cho là if (pWeapon) then -- có đeo vũ khí, xong sửa lại thành if (pWeapon >=1) then -- có deo vu khí rồi báo lỗi, người ta đã hướng dẫn tận tình cho như thế rồi, còn sửa code rồi bảo không chạy được, ai muốn chỉ cho bạn nữa -_-

thỳ e chèn giống vậy nó cũng bị lỗi chớ nói gì.. nếu k bị lỗi thỳ e nói làm gì

satthupro95
02-04-16, 08:19 PM
thỳ e chèn giống vậy nó cũng bị lỗi chớ nói gì.. nếu k bị lỗi thỳ e nói làm gì

Bạn chỉ có thể check if (pWeapon) then KHÔNG THỂ check if (pWeapon >=1) then, câu lệnh esleif của bạn sai hết rồi, bạn g ogle xem câu lệnh if then trong ngôn ngữ lua nhé

hxhhxhz
02-04-16, 08:25 PM
Bạn chỉ có thể check if (pWeapon) then KHÔNG THỂ check if (pWeapon >=1) then, câu lệnh esleif của bạn sai hết rồi, bạn g ogle xem câu lệnh if then trong ngôn ngữ lua nhé

vâng ..h e để nguyên code như vậy chỉ thay đổi Title thôi nhưng chạy vẫn lỗi đấy a,. thật là bùn