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
 |