-- Pre-made areas -- Waves AREA_WAVE3 = { {1, 1, 1}, {1, 1, 1}, {0, 3, 0} } AREA_WAVE4 = { {1, 1, 1, 1, 1}, {0, 1, 1, 1, 0}, {0, 1, 1, 1, 0}, {0, 0, 3, 0, 0} } AREA_WAVE6 = { {0, 0, 0, 0, 0}, {0, 1, 3, 1, 0}, {0, 0, 0, 0, 0} } AREA_WAVE7 = { {1, 1, 1, 1, 1}, {1, 1, 1, 1, 1}, {0, 1, 1, 1, 0}, {0, 1, 1, 1, 0}, {0, 0, 3, 0, 0} } AREA_SQUAREWAVE5 = { {1, 1, 1}, {1, 1, 1}, {1, 1, 1}, {0, 1, 0}, {0, 3, 0} } AREA_SQUAREWAVE6 = { {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0} } AREA_SQUAREWAVE7 = { {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0} } -- Diagonal waves AREADIAGONAL_WAVE4 = { {0, 0, 0, 0, 1, 0}, {0, 0, 0, 1, 1, 0}, {0, 0, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 0}, {1, 1, 1, 1, 1, 0}, {0, 0, 0, 0, 0, 3} } AREADIAGONAL_SQUAREWAVE5 = { {1, 1, 1, 0, 0}, {1, 1, 1, 0, 0}, {1, 1, 1, 0, 0}, {0, 0, 0, 1, 0}, {0, 0, 0, 0, 3} } AREADIAGONAL_WAVE6 = { {0, 0, 1}, {0, 3, 0}, {1, 0, 0} } AREADIAGONAL_WAVE7 = { {0, 0, 0, 0, 0, 1, 0}, {0, 0, 0, 0, 1, 1, 0}, {0, 0, 0, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 1, 1, 1, 0}, {0, 0, 0, 0, 0, 0, 3} } -- Beams AREA_BEAM1 = { {3} } AREA_BEAM5 = { {1}, {1}, {1}, {1}, {3} } AREA_BEAM7 = { {1}, {1}, {1}, {1}, {1}, {1}, {3} } AREA_BEAM8 = { {1}, {1}, {1}, {1}, {1}, {1}, {1}, {3} } -- Diagonal Beams AREADIAGONAL_BEAM5 = { {1, 0, 0, 0, 0}, {0, 1, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 1, 0}, {0, 0, 0, 0, 3} } AREADIAGONAL_BEAM7 = { {1, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0}, {0, 0, 0, 0, 0, 1, 0}, {0, 0, 0, 0, 0, 0, 3} } -- Circles AREA_CIRCLE2X2 = { {0, 1, 1, 1, 0}, {1, 1, 1, 1, 1}, {1, 1, 3, 1, 1}, {1, 1, 1, 1, 1}, {0, 1, 1, 1, 0} } AREA_CIRCLE3X3 = { {0, 0, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 3, 1, 1, 1}, {1, 1, 1, 1, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 0, 0} } -- Crosses AREA_CROSS1X1 = { {0, 1, 0}, {1, 3, 1}, {0, 1, 0} } AREA_CIRCLE5X5 = { {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0} } AREA_CIRCLE6X6 = { {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0} } -- Squares AREA_SQUARE1X1 = { {1, 1, 1}, {1, 3, 1}, {1, 1, 1} } -- Walls AREA_WALLFIELD = { {1, 1, 3, 1, 1} } AREADIAGONAL_WALLFIELD = { {0, 0, 0, 0, 1}, {0, 0, 0, 1, 1}, {0, 1, 3, 1, 0}, {1, 1, 0, 0, 0}, {1, 0, 0, 0, 0}, } -- This array contains all destroyable field items FIELDS = {1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1500, 1501, 1502, 1503, 1504} function Player:addPartyCondition(combat, variant, condition, baseMana) local party = self:getParty() if not party then self:sendCancelMessage(RETURNVALUE_NOPARTYMEMBERSINRANGE) self:getPosition():sendMagicEffect(CONST_ME_POFF) return false end local positions = combat:getPositions(self, variant) local members = party:getMembers() members[#members + 1] = party:getLeader() local affectedMembers = {} for _, member in ipairs(members) do local memberPosition = member:getPosition() for _, position in ipairs(positions) do if memberPosition == position then affectedMembers[#affectedMembers + 1] = member end end end if #affectedMembers <= 1 then self:sendCancelMessage(RETURNVALUE_NOPARTYMEMBERSINRANGE) self:getPosition():sendMagicEffect(CONST_ME_POFF) return false end local mana = math.ceil(#affectedMembers * math.pow(0.9, #affectedMembers - 1) * baseMana) if self:getMana() < mana then self:sendCancelMessage(RETURNVALUE_NOTENOUGHMANA) self:getPosition():sendMagicEffect(CONST_ME_POFF) return false end self:addMana(-mana) self:addManaSpent(mana) for _, member in ipairs(affectedMembers) do member:addCondition(condition) end for _, position in ipairs(positions) do position:sendMagicEffect(CONST_ME_MAGIC_BLUE) end return true end function Player:conjureItem(reagentId, conjureId, conjureCount, effect) if not conjureCount and conjureId ~= 0 then local itemType = ItemType(conjureId) if itemType:getId() == 0 then return false end local charges = itemType:getCharges() if charges ~= 0 then conjureCount = charges end end if reagentId ~= 0 and not self:removeItem(reagentId, 1, -1) then self:sendCancelMessage(RETURNVALUE_YOUNEEDAMAGICITEMTOCASTSPELL) self:getPosition():sendMagicEffect(CONST_ME_POFF) return false end local item = self:addItem(conjureId, conjureCount) if not item then self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE) self:getPosition():sendMagicEffect(CONST_ME_POFF) return false end if item:hasAttribute(ITEM_ATTRIBUTE_DURATION) then item:decay() end self:getPosition():sendMagicEffect(item:getType():isRune() and CONST_ME_MAGIC_RED or effect) return true end function Creature:addAttributeCondition(parameters) local condition = Condition(CONDITION_ATTRIBUTES) for _, parameter in ipairs(parameters) do if parameter.key and parameter.value then condition:setParameter(parameter.key, parameter.value) end end self:addCondition(condition) end