152 lines
3.5 KiB
Lua
152 lines
3.5 KiB
Lua
-- @docclass Player
|
|
|
|
PlayerStates = {
|
|
None = 0,
|
|
Poison = 1,
|
|
Burn = 2,
|
|
Energy = 4,
|
|
Drunk = 8,
|
|
ManaShield = 16,
|
|
Paralyze = 32,
|
|
Haste = 64,
|
|
Swords = 128,
|
|
Drowning = 256,
|
|
Freezing = 512,
|
|
Dazzled = 1024,
|
|
Cursed = 2048,
|
|
PartyBuff = 4096,
|
|
PzBlock = 8192,
|
|
Pz = 16384,
|
|
Bleeding = 32768,
|
|
Hungry = 65536
|
|
}
|
|
|
|
InventorySlotOther = 0
|
|
InventorySlotHead = 1
|
|
InventorySlotNeck = 2
|
|
InventorySlotBack = 3
|
|
InventorySlotBody = 4
|
|
InventorySlotRight = 5
|
|
InventorySlotLeft = 6
|
|
InventorySlotLeg = 7
|
|
InventorySlotFeet = 8
|
|
InventorySlotFinger = 9
|
|
InventorySlotAmmo = 10
|
|
InventorySlotPurse = 11
|
|
|
|
InventorySlotFirst = 1
|
|
InventorySlotLast = 10
|
|
|
|
function Player:isPartyLeader()
|
|
local shield = self:getShield()
|
|
return (shield == ShieldWhiteYellow or
|
|
shield == ShieldYellow or
|
|
shield == ShieldYellowSharedExp or
|
|
shield == ShieldYellowNoSharedExpBlink or
|
|
shield == ShieldYellowNoSharedExp)
|
|
end
|
|
|
|
function Player:isPartyMember()
|
|
local shield = self:getShield()
|
|
return (shield == ShieldWhiteYellow or
|
|
shield == ShieldYellow or
|
|
shield == ShieldYellowSharedExp or
|
|
shield == ShieldYellowNoSharedExpBlink or
|
|
shield == ShieldYellowNoSharedExp or
|
|
shield == ShieldBlueSharedExp or
|
|
shield == ShieldBlueNoSharedExpBlink or
|
|
shield == ShieldBlueNoSharedExp or
|
|
shield == ShieldBlue)
|
|
end
|
|
|
|
function Player:isPartySharedExperienceActive()
|
|
local shield = self:getShield()
|
|
return (shield == ShieldYellowSharedExp or
|
|
shield == ShieldYellowNoSharedExpBlink or
|
|
shield == ShieldYellowNoSharedExp or
|
|
shield == ShieldBlueSharedExp or
|
|
shield == ShieldBlueNoSharedExpBlink or
|
|
shield == ShieldBlueNoSharedExp)
|
|
end
|
|
|
|
function Player:hasVip(creatureName)
|
|
for id, vip in pairs(g_game.getVips()) do
|
|
if (vip[1] == creatureName) then return true end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function Player:isMounted()
|
|
local outfit = self:getOutfit()
|
|
return outfit.mount ~= nil and outfit.mount > 0
|
|
end
|
|
|
|
function Player:toggleMount()
|
|
if g_game.getFeature(GamePlayerMounts) then
|
|
g_game.mount(not self:isMounted())
|
|
end
|
|
end
|
|
|
|
function Player:mount()
|
|
if g_game.getFeature(GamePlayerMounts) then
|
|
g_game.mount(true)
|
|
end
|
|
end
|
|
|
|
function Player:dismount()
|
|
if g_game.getFeature(GamePlayerMounts) then
|
|
g_game.mount(false)
|
|
end
|
|
end
|
|
|
|
function Player:getItem(itemId, subType)
|
|
return g_game.findPlayerItem(itemId, subType or -1)
|
|
end
|
|
|
|
function Player:getItems(itemId, subType)
|
|
local subType = subType or -1
|
|
|
|
local items = {}
|
|
for i=InventorySlotFirst,InventorySlotLast do
|
|
local item = self:getInventoryItem(i)
|
|
if item and item:getId() == itemId and (subType == -1 or item:getSubType() == subType) then
|
|
table.insert(items, item)
|
|
end
|
|
end
|
|
|
|
for i, container in pairs(g_game.getContainers()) do
|
|
for j, item in pairs(container:getItems()) do
|
|
if item:getId() == itemId and (subType == -1 or item:getSubType() == subType) then
|
|
item.container = container
|
|
table.insert(items, item)
|
|
end
|
|
end
|
|
end
|
|
return items
|
|
end
|
|
|
|
function Player:getItemsCount(itemId)
|
|
local items, count = self:getItems(itemId), 0
|
|
for i=1,#items do
|
|
count = count + items[i]:getCount()
|
|
end
|
|
return count
|
|
end
|
|
|
|
function Player:hasState(state, states)
|
|
if not states then
|
|
states = self:getStates()
|
|
end
|
|
|
|
for i = 1, 32 do
|
|
local pow = math.pow(2, i-1)
|
|
if pow > states then break end
|
|
|
|
local states = bit32.band(states, pow)
|
|
if states == state then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|