mirror of
https://github.com/ErikasKontenis/SabrehavenServer.git
synced 2025-10-13 22:34:53 +02:00
Resolve "Merge the best from 7.40 branch"
This commit is contained in:
151
SabrehavenOTClient/modules/gamelib/player.lua
Normal file
151
SabrehavenOTClient/modules/gamelib/player.lua
Normal file
@@ -0,0 +1,151 @@
|
||||
-- @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
|
Reference in New Issue
Block a user