116 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
function Creature.getClosestFreePosition(self, position, extended)
 | 
						|
	local usePosition = Position(position)
 | 
						|
	local tiles = { Tile(usePosition) }
 | 
						|
	local length = extended and 2 or 1
 | 
						|
 | 
						|
	local tile
 | 
						|
	for y = -length, length do
 | 
						|
		for x = -length, length do
 | 
						|
			if x ~= 0 or y ~= 0 then
 | 
						|
				usePosition.x = position.x + x
 | 
						|
				usePosition.y = position.y + y
 | 
						|
 | 
						|
				tile = Tile(usePosition)
 | 
						|
				if tile then
 | 
						|
					tiles[#tiles + 1] = tile
 | 
						|
				end
 | 
						|
			end
 | 
						|
		end
 | 
						|
	end
 | 
						|
 | 
						|
	for i = 1, #tiles do
 | 
						|
		tile = tiles[i]
 | 
						|
		if tile:getCreatureCount() == 0 and not tile:hasProperty(CONST_PROP_IMMOVABLEBLOCKSOLID) then
 | 
						|
			return tile:getPosition()
 | 
						|
		end
 | 
						|
	end
 | 
						|
	return Position()
 | 
						|
end
 | 
						|
 | 
						|
function Creature:setMonsterOutfit(monster, time)
 | 
						|
	local monsterType = MonsterType(monster)
 | 
						|
	if not monsterType then
 | 
						|
		return false
 | 
						|
	end
 | 
						|
 | 
						|
	if self:isPlayer() and not (getPlayerFlagValue(self, PlayerFlag_CanIllusionAll) or monsterType:isIllusionable()) then
 | 
						|
		return false
 | 
						|
	end
 | 
						|
 | 
						|
	local condition = Condition(CONDITION_OUTFIT)
 | 
						|
	condition:setOutfit(monsterType:getOutfit())
 | 
						|
	condition:setTicks(time)
 | 
						|
	self:addCondition(condition)
 | 
						|
 | 
						|
	return true
 | 
						|
end
 | 
						|
 | 
						|
function Creature:setItemOutfit(item, time)
 | 
						|
	local itemType = ItemType(item)
 | 
						|
	if not itemType then
 | 
						|
		return false
 | 
						|
	end
 | 
						|
 | 
						|
	local condition = Condition(CONDITION_OUTFIT)
 | 
						|
	condition:setOutfit({
 | 
						|
		lookTypeEx = itemType:getId()
 | 
						|
	})
 | 
						|
	condition:setTicks(time)
 | 
						|
	self:addCondition(condition)
 | 
						|
 | 
						|
	return true
 | 
						|
end
 | 
						|
 | 
						|
function Creature:addSummon(monster)
 | 
						|
	local summon = Monster(monster)
 | 
						|
	if not summon then
 | 
						|
		return false
 | 
						|
	end
 | 
						|
 | 
						|
	summon:setTarget(nil)
 | 
						|
	summon:setFollowCreature(nil)
 | 
						|
	summon:setDropLoot(false)
 | 
						|
	summon:setMaster(self)
 | 
						|
	return true
 | 
						|
end
 | 
						|
 | 
						|
function Creature:removeSummon(monster)
 | 
						|
	local summon = Monster(monster)
 | 
						|
	if not summon or summon:getMaster() ~= self then
 | 
						|
		return false
 | 
						|
	end
 | 
						|
 | 
						|
	summon:setTarget(nil)
 | 
						|
	summon:setFollowCreature(nil)
 | 
						|
	summon:setDropLoot(true)
 | 
						|
	summon:setMaster(nil)
 | 
						|
	return true
 | 
						|
end
 | 
						|
 | 
						|
function Creature.getPlayer(self)
 | 
						|
	return self:isPlayer() and self or nil
 | 
						|
end
 | 
						|
 | 
						|
function Creature.isItem(self)
 | 
						|
	return false
 | 
						|
end
 | 
						|
 | 
						|
function Creature.isMonster(self)
 | 
						|
	return false
 | 
						|
end
 | 
						|
 | 
						|
function Creature.isNpc(self)
 | 
						|
	return false
 | 
						|
end
 | 
						|
 | 
						|
function Creature.isPlayer(self)
 | 
						|
	return false
 | 
						|
end
 | 
						|
 | 
						|
function Creature.isTile(self)
 | 
						|
	return false
 | 
						|
end
 | 
						|
 | 
						|
function Creature.isContainer(self)
 | 
						|
	return false
 | 
						|
end |