• 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!

Lua Starshoter error

grzesiek1925

New Member
Joined
Aug 21, 2009
Messages
81
Reaction score
2
Hi,
I have error in starshoter.lua
anyone knows how to fix it?
beznazwy2s.jpg
 
Code:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 0)
setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 0)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HOLYDAMAGE)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_HOLY)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -4.2, -55, -4.2, -9)

local manaNeededPerTarget = 200
local hitExtraTargets = 2
local hitExtraTargetsInRange = 2

function getCreaturesInRange(position, radiusx, radiusy, showMonsters, showPlayers)
    local creaturesList = {}
    for x = -radiusx, radiusx do
        for y = -radiusy, radiusy do
            if not (x == 0 and y == 0) then
                if getTilePzInfo({x = position.x+x, y = position.y+y, z = position.z}) ~= TRUE then
                    creature = getTopCreature({x = position.x+x, y = position.y+y, z = position.z, stackpos = STACKPOS_TOP_CREATURE})
                    if (creature.type == 1 and showPlayers == 1) or (creature.type == 2 and showMonsters == 1) then
                        table.insert(creaturesList, creature.uid)
                    end
                end
            end
        end
    end
    return creaturesList
end
function onUseWeapon(cid, var)
    local ret = doCombat(cid, combat, var)
    if(ret == LUA_ERROR) then
        return LUA_ERROR
    end
    doCreatureAddMana(cid, -manaNeededPerTarget)
   
    local target = variantToNumber(var)
    local hitplayers = 0
    if(target ~= 0) then
        if(isPlayer(target) == TRUE) then
            hitplayers = 1
        end
        local nowHit = 0
        local randomId = 0
        local otherTargets = getCreaturesInRange(getCreaturePosition(target), hitExtraTargetsInRange, hitExtraTargetsInRange, 1, hitplayers)
        if(#otherTargets > 0) then
            for i = 1, hitExtraTargets do
                if(getCreatureMana(cid) > manaNeededPerTarget) then
                    randomId = math.random(1, #otherTargets)
                    nowHit = otherTargets[randomId]
                    if(isCreature(nowHit) == TRUE) then
                        table.remove(otherTargets, randomId)
                        ret = doCombat(cid, combat, numberToVariant(nowHit))
                        if(ret ~= LUA_ERROR) then
                            doCreatureAddMana(cid, -manaNeededPerTarget)
                        end
                    end
                    if(#otherTargets == 0) then
                        break
                    end
                else
                    break
                end
            end
        end
    end
    return TRUE
end

weapons.xml:
Code:
	<distance id="7735" script="starshoter.lua">
    <vocation name="Druid"/><vocation name="Elder Druid"/>
    <vocation name="Sorcerer"/><vocation name="Master Sorcerer"/>
	</distance>
 
but how fix it?
and i have a problem:
Code:
[Error - Action Interface] 
 data/actions/scripts/quests/system.lua:onUse
Description: 
data/lib/050-function.lua:222: attempt to index a boolean value
stack traceback:
data/lib/050-function.lua:222: in function 'getItemNameById'
	data/actions/scripts/quests/system.lua:39: in function <data/actions/scripts/quests/system.lua:21>

You can help me?
 
you can fix error in starshoter?


system.lua:
Code:
function copyItem(item)
    if (isContainer(item.uid) == TRUE) then
        uid = copyContainer(item.uid, item.itemid)
        if item.actionid > 0 then
            doSetItemActionId(uid, item.actionid)
        end
        return uid
    else
        return doCreateItemEx(item.itemid, item.type)
    end
end
function copyContainer(uid, itemid)
    local container = doCreateItemEx(itemid, 1)
    local iterator = getContainerSize(uid)
    while iterator > 0  do
        iterator = iterator - 1
        doAddContainerItemEx(container, copyItem(getContainerItem(uid, iterator)))
    end
    return container
end
function onUse(cid, item, fromPosition, itemEx, toPosition)
    if getPlayerStorageValue(cid, item.uid) ~= 1 then
        local items = {}
        local item_in = {}
        local item_slot = 0
        local item_to_give = 0
        local item_desc = ''
        while(true) do
            item_in = getContainerItem(item.uid, item_slot)
            if item_in.itemid > 0 then
                table.insert(items, item_in)
            else
                break
            end
            item_slot = item_slot+1
        end
        if #items == 0 then
            item_to_give = doCreateItemEx(item.uid)
            item_desc = getItemNameById(item.uid)
        elseif #items == 1 then
            item_to_give = doCreateItemEx(items[1].itemid, items[1].type)
            if items[1].actionid > 0 then
                doSetItemActionId(item_to_give, items[1].actionid)
            end
            item_desc = getItemNameById(items[1].itemid)
        else
            if #items <= 8 then
                item_to_give = doCreateItemEx(1987, 1)
            else
                item_to_give = doCreateItemEx(1988, 1)
            end
            local n = 0
            local uid = 0
            for i=1, #items do
                n = #items - i + 1
                uid = doAddContainerItemEx(item_to_give, copyItem(items[n]))
                if items[n].actionid > 0 then
                    doSetItemActionId(uid, items[n].actionid)
                end
                item_desc = getItemNameById(items[n].itemid) .. item_desc
                if i ~= #items then
                    item_desc = ", " .. item_desc
                end
            end
        end
        if doPlayerAddItemEx(cid, item_to_give, 0) == RETURNVALUE_NOERROR then
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, 'You have found a ' .. item_desc .. '.')
            setPlayerStorageValue(cid, item.uid, 1)
            if item.uid < 2000 then
                setPlayerStorageValue(cid, 1000, getPlayerStorageValue(cid,1000)+1)
            end
        else
            doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You don\'t have enought capacity or free place in backpack for a ' .. item_desc .. '.')
        end
    else
        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is empty.")
    end
    return TRUE
end
 
why not just use the most up-to-date version of the script apparently you didnt read the thread at all. if you have 3.6 it works perfectly
 
Back
Top