• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Solved Massive Destroy Field SPELL (not rune) does not remove fields

AdiMit

c(;
Joined
May 2, 2016
Messages
70
Solutions
2
Reaction score
3
Hello dear community, :)

I tried to create a spell working exactly in the same way as the Destroy Field Rune does; however, I wanted to make it massive (=CIRCLE3X3)...

I'm currently using the [8.60] The Forgotten Server 0.3.6 (Crying Damson) V8 by Printer, from the thread: [8.60] The Forgotten Server 0.3.6 (Crying Damson) V8;

The spell is possible to be casted, but it does not remove any fields (and yet the rune works fine).
I get the following error message:
DestroyFieldError.png

Here is the script of the spell:
Lua:
UNREMOVABLE_FIELDS = {1497, 1498, 1499, 1505, 1506, 1507, 1508, 7465, 7466, 7467, 7468, 7469, 7470, 7471, 7472, 7473, 11094, 11095}

local function doRemoveField(cid, pos)
    local field = getTileItemByType(pos, ITEM_TYPE_MAGICFIELD)
    if(not isInArray(UNREMOVABLE_FIELDS, field.itemid)) then
        doRemoveItem(field.uid)
        doSendMagicEffect(pos, CONST_ME_POFF)
        return true
    end

    doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
    return false
end

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_NONE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_POFF)

local area = createCombatArea(AREA_CIRCLE3X3)
setCombatArea(combat, area)

function onCastSpell(cid, var)
    local pos = variantToPosition(var)
    if(pos.x == CONTAINER_POSITION) then
        pos = getThingPos(cid)
    end

    if(pos.x ~= 0 and pos.y ~= 0) then
        return doRemoveField(cid, pos)
    end

    doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
    doRemoveField(cid, pos)
    doCombat(cid, combat, var)
    return true
end

If you happen to know how to resolve the issue, I would be greatly thankful for your support, :)
Best Regards!
 
Solution
here you go

Code:
UNREMOVABLE_FIELDS = {1497, 1498, 1499, 1505, 1506, 1507, 1508, 7465, 7466, 7467, 7468, 7469, 7470, 7471, 7472, 7473, 11094, 11095}

local function doRemoveField(cid, pos)
    local field = getTileItemByType(pos, ITEM_TYPE_MAGICFIELD)
    if(not isInArray(UNREMOVABLE_FIELDS, field.itemid)) then
        doRemoveItem(field.uid)
        doSendMagicEffect(pos, CONST_ME_POFF)
        return true
    end

    doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
    return false
end

function onCastSpell(cid, var)
local main_pos = getCreaturePosition(cid)
    local positions = {
        [1] = {x = main_pos.x - 1, y = main_pos.y - 1, z = main_pos.z},
        [2] =...
Lua:
UNREMOVABLE_FIELDS = {1497, 1498, 1499, 1505, 1506, 1507, 1508, 7465, 7466, 7467, 7468, 7469, 7470, 7471, 7472, 7473, 11094, 11095}
local function doRemoveField(cid, pos)
    local field = getTileItemByType(pos, ITEM_TYPE_MAGICFIELD)
    if field then
        if(not isInArray(UNREMOVABLE_FIELDS, field.itemid)) then
            doRemoveItem(field.uid)
            doSendMagicEffect(pos, CONST_ME_POFF)
            return true
        end
    end
    doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
    return false
end
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_NONE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_POFF)
local area = createCombatArea(AREA_CIRCLE3X3)
setCombatArea(combat, area)
function onCastSpell(cid, var)
    local pos = variantToPosition(var)
    if(pos.x == CONTAINER_POSITION) then
        pos = getThingPos(cid)
    end
    if(pos.x ~= 0 and pos.y ~= 0) then
        return doRemoveField(cid, pos)
    end
    doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
    doRemoveField(cid, pos)
    doCombat(cid, combat, var)
    return true
end
 
Lua:
UNREMOVABLE_FIELDS = {1497, 1498, 1499, 1505, 1506, 1507, 1508, 7465, 7466, 7467, 7468, 7469, 7470, 7471, 7472, 7473, 11094, 11095}
local function doRemoveField(cid, pos)
    local field = getTileItemByType(pos, ITEM_TYPE_MAGICFIELD)
    if field then
        if(not isInArray(UNREMOVABLE_FIELDS, field.itemid)) then
            doRemoveItem(field.uid)
            doSendMagicEffect(pos, CONST_ME_POFF)
            return true
        end
    end
    doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
    return false
end
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_NONE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_POFF)
local area = createCombatArea(AREA_CIRCLE3X3)
setCombatArea(combat, area)
function onCastSpell(cid, var)
    local pos = variantToPosition(var)
    if(pos.x == CONTAINER_POSITION) then
        pos = getThingPos(cid)
    end
    if(pos.x ~= 0 and pos.y ~= 0) then
        return doRemoveField(cid, pos)
    end
    doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
    doRemoveField(cid, pos)
    doCombat(cid, combat, var)
    return true
end

Hey, thank you for your reply :)
Unfortunately, the same error pops up on the console and the magic fields do not disappear either :/
 
Lua:
    UNREMOVABLE_FIELDS = {1497, 1498, 1499, 1505, 1506, 1507, 1508, 7465, 7466, 7467, 7468, 7469, 7470, 7471, 7472, 7473, 11094, 11095}

    local combat = createCombatObject()
    setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_NONE)
    setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_POFF)
   
    local area = createCombatArea(AREA_CIRCLE3X3)
    setCombatArea(combat, area)

local function doRemoveField(cid, pos)
    local field = getTileItemByType(pos, ITEM_TYPE_MAGICFIELD)
    if field then
        if(not isInArray(UNREMOVABLE_FIELDS, field.itemid)) then
            doTransformItem(field.uid, 0)
            doSendMagicEffect(pos, CONST_ME_POFF)
            return true
        end
    end
    doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
    return false
end
   
function onCastSpell(cid, var)
    local pos = variantToPosition(var)
    if(pos.x == CONTAINER_POSITION) then
        pos = getThingPos(cid)
    end
    if(pos.x ~= 0 and pos.y ~= 0) then
        return doRemoveField(cid, pos)
    end
    doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
    doRemoveField(cid, pos)
    doCombat(cid, combat, var)
    return true
end
 

Lua:
    UNREMOVABLE_FIELDS = {1497, 1498, 1499, 1505, 1506, 1507, 1508, 7465, 7466, 7467, 7468, 7469, 7470, 7471, 7472, 7473, 11094, 11095}

    local combat = createCombatObject()
    setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_NONE)
    setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_POFF)
  
    local area = createCombatArea(AREA_CIRCLE3X3)
    setCombatArea(combat, area)

local function doRemoveField(cid, pos)
    local field = getTileItemByType(pos, ITEM_TYPE_MAGICFIELD)
    if field then
        if(not isInArray(UNREMOVABLE_FIELDS, field.itemid)) then
            doTransformItem(field.uid, 0)
            doSendMagicEffect(pos, CONST_ME_POFF)
            return true
        end
    end
    doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
    return false
end
  
function onCastSpell(cid, var)
    local pos = variantToPosition(var)
    if(pos.x == CONTAINER_POSITION) then
        pos = getThingPos(cid)
    end
    if(pos.x ~= 0 and pos.y ~= 0) then
        return doRemoveField(cid, pos)
    end
    doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
    doRemoveField(cid, pos)
    doCombat(cid, combat, var)
    return true
end

It's strange... even though the script seems to be fine, I still get the error, guh

[20/03/2017 17:50:23] [Error - Spell Interface]
[20/03/2017 17:50:23] data/spells/scripts/attack/mass destroy field.lua:eek:nCastSpell
[20/03/2017 17:50:23] Description:
[20/03/2017 17:50:23] (luaDoTransformItem) Item not found

I just want to create the spell for a certain boss that bases his strength on his minions that cannot be summoned when he is surrounded by magic fields...
 
Lua:
    UNREMOVABLE_FIELDS = {1497, 1498, 1499, 1505, 1506, 1507, 1508, 7465, 7466, 7467, 7468, 7469, 7470, 7471, 7472, 7473, 11094, 11095}

    local combat = createCombatObject()
    setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_NONE)
    setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_POFF)
   
    local area = createCombatArea(AREA_CIRCLE3X3)
    setCombatArea(combat, area)

local function doRemoveField(cid, pos)
    local getPos = pos
    getPos.stackpos = STACKPOS_TOP_FIELD
    local field = getTileItemByType(getPos, ITEM_TYPE_MAGICFIELD)
    if field then
        if(not isInArray(UNREMOVABLE_FIELDS, field.itemid)) then
            doTransformItem(field.uid, 0)
            doSendMagicEffect(pos, CONST_ME_POFF)
            return true
        end
    end
    doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
    return false
end
   
function onCastSpell(cid, var)
    local pos = variantToPosition(var)
    if(pos.x == CONTAINER_POSITION) then
        pos = getThingPos(cid)
    end
    if(pos.x ~= 0 and pos.y ~= 0) then
        return doRemoveField(cid, pos)
    end
    doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
    doRemoveField(cid, pos)
    doCombat(cid, combat, var)
    return true
end
 
try this

Code:
    UNREMOVABLE_FIELDS = {1497, 1498, 1499, 1505, 1506, 1507, 1508, 7465, 7466, 7467, 7468, 7469, 7470, 7471, 7472, 7473, 11094, 11095}

    local combat = createCombatObject()
    setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_NONE)
    setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_POFF)
   
    local area = createCombatArea(AREA_CIRCLE3X3)
    setCombatArea(combat, area)

local function doRemoveField(cid, pos)
    local pos_new = {x = pos.x, y = pos.y, z = pos.z, stackpos = STACKPOS_TOP_FIELD}
    local field = getThingFromPos(pos_new)
    if field then
        if(not isInArray(UNREMOVABLE_FIELDS, field.itemid)) then
                doRemoveItem(field.uid)
                doSendMagicEffect(pos, CONST_ME_POFF)
            return true
        end
    end
    doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
    return false
end
   
function onCastSpell(cid, var)
    local pos = variantToPosition(var)
    if(pos.x == CONTAINER_POSITION) then
        pos = getThingPos(cid)
    end
    if(pos.x ~= 0 and pos.y ~= 0) then
        return doRemoveField(cid, pos)
    end
    doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
    doRemoveField(cid, pos)
    doCombat(cid, combat, var)
    return true
end
 
Lua:
    UNREMOVABLE_FIELDS = {1497, 1498, 1499, 1505, 1506, 1507, 1508, 7465, 7466, 7467, 7468, 7469, 7470, 7471, 7472, 7473, 11094, 11095}

    local combat = createCombatObject()
    setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_NONE)
    setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_POFF)
 
    local area = createCombatArea(AREA_CIRCLE3X3)
    setCombatArea(combat, area)

local function doRemoveField(cid, pos)
    local getPos = pos
    getPos.stackpos = STACKPOS_TOP_FIELD
    local field = getTileItemByType(getPos, ITEM_TYPE_MAGICFIELD)
    if field then
        if(not isInArray(UNREMOVABLE_FIELDS, field.itemid)) then
            doTransformItem(field.uid, 0)
            doSendMagicEffect(pos, CONST_ME_POFF)
            return true
        end
    end
    doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
    return false
end
 
function onCastSpell(cid, var)
    local pos = variantToPosition(var)
    if(pos.x == CONTAINER_POSITION) then
        pos = getThingPos(cid)
    end
    if(pos.x ~= 0 and pos.y ~= 0) then
        return doRemoveField(cid, pos)
    end
    doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
    doRemoveField(cid, pos)
    doCombat(cid, combat, var)
    return true
end

[20/03/2017 18:05:18] [Error - Spell Interface]
[20/03/2017 18:05:18] data/spells/scripts/attack/mass destroy field.lua:eek:nCastSpell
[20/03/2017 18:05:18] Description:
[20/03/2017 18:05:18] (luaDoTransformItem) Item not found

@EDIT

try this

Code:
    UNREMOVABLE_FIELDS = {1497, 1498, 1499, 1505, 1506, 1507, 1508, 7465, 7466, 7467, 7468, 7469, 7470, 7471, 7472, 7473, 11094, 11095}

    local combat = createCombatObject()
    setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_NONE)
    setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_POFF)
 
    local area = createCombatArea(AREA_CIRCLE3X3)
    setCombatArea(combat, area)

local function doRemoveField(cid, pos)
    local pos_new = {x = pos.x, y = pos.y, z = pos.z, stackpos = STACKPOS_TOP_FIELD}
    local field = getThingFromPos(pos_new)
    if field then
        if(not isInArray(UNREMOVABLE_FIELDS, field.itemid)) then
                doRemoveItem(field.uid)
                doSendMagicEffect(pos, CONST_ME_POFF)
            return true
        end
    end
    doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
    return false
end
 
function onCastSpell(cid, var)
    local pos = variantToPosition(var)
    if(pos.x == CONTAINER_POSITION) then
        pos = getThingPos(cid)
    end
    if(pos.x ~= 0 and pos.y ~= 0) then
        return doRemoveField(cid, pos)
    end
    doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
    doRemoveField(cid, pos)
    doCombat(cid, combat, var)
    return true
end
^ Exactly the same result

~~
Well, I'm starting to doubt whether it is possible to recreate the destroy field rune into a spell...

If my claims are correct, then does anyone know how to make it impossible to create magic fields (for both players and creatures) in a certain area?
 
@Itutorial no need to do all this
Lua:
local pos_new = {x = pos.x, y = pos.y, z = pos.z, stackpos = STACKPOS_TOP_FIELD}
Just do
Lua:
local pos_new = pos
pos_new.stackpos = STACKPOS_TOP_FIELD
The x, y, & z will stay the same. stackpos is just a property of the pos table.
 
@Itutorial no need to do all this
Lua:
local pos_new = {x = pos.x, y = pos.y, z = pos.z, stackpos = STACKPOS_TOP_FIELD}
Just do
Lua:
local pos_new = pos
pos_new.stackpos = STACKPOS_TOP_FIELD
The x, y, & z will stay the same. stackpos is just a property of the pos table.

Thank you so much @Makalo and @Itutorial for your involvement and help, but as I said in the previous reply, I'm starting to doubt if it is even possible after so many tries;
In that case: do you by chance know how to make it impossible to create magic fields (for both players and creatures) in a certain area?
^ It might be easier to do since this the spell seems to be troublesome...
 
The problem with this code is its meant to be given the position it should check. All that was done here is adding a circle to the combat object. It doesn't actually call all the positions, and because he is just trying to cast it on himself it isn't being told ANY items.

He needs to make a loop or something that registers all the positions in the circle separate and runs them all through the remove field code.

The reason you dont need to do that for normal spells is because the damage formula is part of the combat object.
 
The problem with this code is its meant to be given the position it should check. All that was done here is adding a circle to the combat object. It doesn't actually call all the positions, and because he is just trying to cast it on himself it isn't being told ANY items.

He needs to make a loop or something that registers all the positions in the circle separate and runs them all through the remove field code.

The reason you dont need to do that for normal spells is because the damage formula is part of the combat object.
This doesn't look right but I won't delete it.
Lua:
    UNREMOVABLE_FIELDS = {1497, 1498, 1499, 1505, 1506, 1507, 1508, 7465, 7466, 7467, 7468, 7469, 7470, 7471, 7472, 7473, 11094, 11095}

    local combat = createCombatObject()
    setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_NONE)
    setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_POFF)
 
    local area = createCombatArea(AREA_CIRCLE3X3)
    setCombatArea(combat, area)

local function doRemoveField(cid, pos)
    local getPos = pos
    getPos.stackpos = STACKPOS_TOP_FIELD
    local field = getTileItemByType(getPos, ITEM_TYPE_MAGICFIELD)
    if field then
        if(not isInArray(UNREMOVABLE_FIELDS, field.itemid)) then
            doTransformItem(field.uid, 0)
            doSendMagicEffect(pos, CONST_ME_POFF)
            return true
        end
    end
    doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
    return false
end
 
function onCastSpell(cid, var)
    local pos = variantToPosition(var)
    if(pos.x == CONTAINER_POSITION) then
        pos = getThingPos(cid)
    end
    if(pos.x ~= 0 and pos.y ~= 0) then
        for x = 1, #area do
            for y = 1, #area[x] do
                doRemoveField(cid, area[x][y])
            end
        end
    end
    doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
    doRemoveField(cid, pos)
    doCombat(cid, combat, var)
    return true
end
 
The problem with this code is its meant to be given the position it should check. All that was done here is adding a circle to the combat object. It doesn't actually call all the positions, and because he is just trying to cast it on himself it isn't being told ANY items.

He needs to make a loop or something that registers all the positions in the circle separate and runs them all through the remove field code.

The reason you dont need to do that for normal spells is because the damage formula is part of the combat object.

This doesn't look right but I won't delete it.
Lua:
    UNREMOVABLE_FIELDS = {1497, 1498, 1499, 1505, 1506, 1507, 1508, 7465, 7466, 7467, 7468, 7469, 7470, 7471, 7472, 7473, 11094, 11095}

    local combat = createCombatObject()
    setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_NONE)
    setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_POFF)

    local area = createCombatArea(AREA_CIRCLE3X3)
    setCombatArea(combat, area)

local function doRemoveField(cid, pos)
    local getPos = pos
    getPos.stackpos = STACKPOS_TOP_FIELD
    local field = getTileItemByType(getPos, ITEM_TYPE_MAGICFIELD)
    if field then
        if(not isInArray(UNREMOVABLE_FIELDS, field.itemid)) then
            doTransformItem(field.uid, 0)
            doSendMagicEffect(pos, CONST_ME_POFF)
            return true
        end
    end
    doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
    return false
end

function onCastSpell(cid, var)
    local pos = variantToPosition(var)
    if(pos.x == CONTAINER_POSITION) then
        pos = getThingPos(cid)
    end
    if(pos.x ~= 0 and pos.y ~= 0) then
        for x = 1, #area do
            for y = 1, #area[x] do
                doRemoveField(cid, area[x][y])
            end
        end
    end
    doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
    doRemoveField(cid, pos)
    doCombat(cid, combat, var)
    return true
end
^ The same error... :/


~~
In that case, would it be easier to make a script for a selected ground tile to prevent any magic fields to be spawned on it?
 
Try this one...

Code:
UNREMOVABLE_FIELDS = {1497, 1498, 1499, 1505, 1506, 1507, 1508, 7465, 7466, 7467, 7468, 7469, 7470, 7471, 7472, 7473, 11094, 11095}

local function doRemoveField(cid, pos)
    local field = getTileItemByType(pos, ITEM_TYPE_MAGICFIELD)
    if(not isInArray(UNREMOVABLE_FIELDS, field.itemid)) then
        doRemoveItem(field.uid)
        doSendMagicEffect(pos, CONST_ME_POFF)
        return true
    end

    doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
    return false
end

function onCastSpell(cid, var)
local main_pos = getCreaturePosition(cid)
    local positions = {
        [1] = {x = main_pos.x - 1, y = main_pos.y - 1, z = main_pos.z},
        [2] = {x = main_pos.x, y = main_pos.y - 1, z = main_pos.z},
        [3] = {x = main_pos.x + 1, y = main_pos.y - 1, z = main_pos.z},
        [4] = {x = main_pos.x - 1, y = main_pos.y, z = main_pos.z},
        [5] = {x = main_pos.x + 1, y = main_pos.y, z = main_pos.z},
        [6] = {x = main_pos.x - 1, y = main_pos.y + 1, z = main_pos.z},
        [7] = {x = main_pos.x, y = main_pos.y + 1, z = main_pos.z},
        [8] = {x = main_pos.x + 1, y = main_pos.y + 1, z = main_pos.z},
        --End square 1 sqm
        [9] = {x = main_pos.x - 2, y = main_pos.y - 2, z = main_pos.z},
        [10] = {x = main_pos.x, y = main_pos.y - 2, z = main_pos.z},
        [11] = {x = main_pos.x + 2, y = main_pos.y - 2, z = main_pos.z},
        [12] = {x = main_pos.x - 2, y = main_pos.y, z = main_pos.z},
        [13] = {x = main_pos.x + 2, y = main_pos.y, z = main_pos.z},
        [14] = {x = main_pos.x - 2, y = main_pos.y + 2, z = main_pos.z},
        [15] = {x = main_pos.x, y = main_pos.y + 2, z = main_pos.z},
        [16] = {x = main_pos.x + 2, y = main_pos.y + 2, z = main_pos.z}
        --End square 2 sqm
    }
    for i = 1, #positions do
        return doRemoveField(cid, positions[i])
    end

    doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
    return false
end

Im not worried about how it looks right now, I am worried about getting it to work. Then we can sexify it.
 
Code:
UNREMOVABLE_FIELDS = {1497, 1498, 1499, 1505, 1506, 1507, 1508, 7465, 7466, 7467, 7468, 7469, 7470, 7471, 7472, 7473, 11094, 11095}

local function doRemoveField(cid, pos)
    local field = getTileItemByType(pos, ITEM_TYPE_MAGICFIELD)
    if(not isInArray(UNREMOVABLE_FIELDS, field.itemid)) then
        doRemoveItem(field.uid)
        doSendMagicEffect(pos, CONST_ME_POFF)
        return true
    end

    doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
    return false
end

function onCastSpell(cid, var)
local main_pos = getCreaturePosition(cid)
    local positions = {
        [1] = {x = main_pos.x - 1, y = main_pos.y - 1, z = main_pos.z},
        [2] = {x = main_pos.x, y = main_pos.y - 1, z = main_pos.z},
        [3] = {x = main_pos.x + 1, y = main_pos.y - 1, z = main_pos.z},
        [4] = {x = main_pos.x - 1, y = main_pos.y, z = main_pos.z},
        [5] = {x = main_pos.x + 1, y = main_pos.y, z = main_pos.z},
        [6] = {x = main_pos.x - 1, y = main_pos.y + 1, z = main_pos.z},
        [7] = {x = main_pos.x, y = main_pos.y + 1, z = main_pos.z},
        [8] = {x = main_pos.x + 1, y = main_pos.y + 1, z = main_pos.z},
        --End square 1 sqm
        [9] = {x = main_pos.x - 2, y = main_pos.y - 2, z = main_pos.z},
        [10] = {x = main_pos.x, y = main_pos.y - 2, z = main_pos.z},
        [11] = {x = main_pos.x + 2, y = main_pos.y - 2, z = main_pos.z},
        [12] = {x = main_pos.x - 2, y = main_pos.y, z = main_pos.z},
        [13] = {x = main_pos.x + 2, y = main_pos.y, z = main_pos.z},
        [14] = {x = main_pos.x - 2, y = main_pos.y + 2, z = main_pos.z},
        [15] = {x = main_pos.x, y = main_pos.y + 2, z = main_pos.z},
        [16] = {x = main_pos.x + 2, y = main_pos.y + 2, z = main_pos.z}
        --End square 2 sqm
    }
    for i = 1, #positions do
        doRemoveField(cid, positions[i])
    end

    doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
    return false
end

This should do it.
 
Back
Top