PDA

View Full Version : [JX] Xin giúp đỡ Gọi tên Nhân vật và thực hiện lệnh trên nhân vật đó



Slayer
22-06-15, 03:59 PM
Hiện tại mình đang viết thẻ GM cho Jxlinux nhưng mình gặp vướng mắc ở Đoạn .lua này và thực hiện lệnh trên ID của nhân vật được chọn , Mong bạn nào giải giúp mình xíu với ạ !!


function one()
n=GetTask(8000)
if ((n*10+1)>GetPlayerCount()) then
Msg2Player("Kh«ng cã nh©n vËt nµy xin kiÔm tra l¹i.");
else
SetTask(8000,n*10+1)
gmName=GetName()
gmidx=PlayerIndex
PlayerIndex=GetTask(8000)
PlayerIndex=gmidx
Msg2Player("Tªn ng­êi ch¬i: "..gmName.."");
Say(wel1, 10, it, sk, mov, kic, inv, bufftp, exppp, buffskills, cscs, can);
end
end;

Chỗ mình bôi đỏ ấy .
Mình có dùng code GM của sv jx win như sau :
function one()
n=GetTask(8000)
if ((n*10+3)>GetPlayerCount()) then
Msg2Player("Kh«ng cã nh©n vËt nµy xin kiÔm tra l¹i.");
else
SetTask(8000,n*10+3)
gmName=GetName()
gmidx=PlayerIndex
PlayerIndex=GetTask(8000)
ObjName=GetName()
PlayerIndex=gmidx
Msg2Player("Tªn ng­êi ch¬i: "..ObjName.."");
if GetName() == "GameMaster" then
Say(wel1, 10, it, sk, mov, kic, inv, bufftp, exppp, buffskills, cscs, can);
elseif GetName() == "GameMaster2" then
Say(wel1, 7, it, sk, mov, kic, bufftp, inv, can);
else
Say(wel1, 6, it, sk, mov, kic, inv, can);
end
end
end;

Nếu dùng như code jx win nó bị lỗi chỗ ObjName .

mình cần gọi đúng tên nhân vật theo ID mình chọn. nhưng mà chưa thực hiện dc mong mọi người giúp đỡ .

tinhhack
22-06-15, 05:58 PM
ý bạn là thực hiện lệnh cho người chơi đúng không
(n*10) + x = id người mình chọn
n: giá trị lưu vị trí chọn hàng chục : 0-9 dc lưu trong Task 8000 -- nên lưu dạng TaskTemp
x: giá trị lưu vị trí chọn hàng đơn vị :0-9
ví dụ chọn người chơi có ID = 52 thì n = 5 và x = 2 --những giá trị này có dc khi mình chọn trong menu

theo mình thì có thể ntn:
khi chọn member có ID = 1 sẽ chạy hàm one() này.. Task 8000 lưu tạm id của người cần thực hiện lệnh. lần đầu thấy cái task 8k :D
ở đây code xài hàm GetPlayerCount() không ổn cho lắm lý do: hàm này sẽ trả về số người chơi đang online, không phải trả về giá trị ID người chơi lớn nhất.
vì thế nếu if ((n*10+1)>GetPlayerCount()) sẽ có lúc không check dc.
--login acc 1 => id sẻ là 1, GetPlayerCount() = 1
--login acc 2 => id sẻ là 2, GetPlayerCount() = 2
bây giờ out acc 1 ra dùng acc 2 check => thì id:2 và GetPlayerCount() = 1

vậy nếu ta muốn thực hiện lênh cho acc 2 thì n=0,x=2 if ((n*10+2)>GetPlayerCount()) luôn luôn đúng => Msg2Player("Kh«ng cã nh©n vËt nµy xin kiÔm tra l¹i.");
mặc dù acc 2 vẫn đang online :D, coi như sống ngoài vòng pháp luật :-"

mình sẽ tạm làm như sau
function one()
local n = GetTaskTemp(8000) ---lấy giá trị hàng chục dc lưu trong task
.......local gmidx = PlayerIndex --- lưu ID của bản thân lại
........PlayerIndex = n*10+1 ----chuyển Index qua người chơi
.......gmName=GetName() -- lấy tên
.......PlayerIndex=gmidx ---chuyển Index về lại bản thân
if gmName ~= "" then
.......Msg2Player("Tªn ng­êi ch¬i: "..gmName..""); lên TV cho admin
Say(wel1, 10, it, sk, mov, kic, inv, bufftp, exppp, buffskills, cscs, can);
else
.......Msg2Player("Kh«ng cã nh©n vËt nµy xin kiÔm tra l¹i.");
end
end;