• 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!
  • 2026 staff recruitment is open! Check it out and consider applying!

Auto recharge last arrow [0.4]

nintry

New Member
Joined
Oct 18, 2017
Messages
6
Reaction score
2
I need some help to make a function to:
- When player shot the last ammo (arrow, bolt...)
- If player have another ammo like that on inventory
- Automatically recharge

A guy here made some like that:
Feature - Auto recharge ammo
And some guys tried to convert to 0.4 with no sucess:
Compiling - Help to add Auto Recharge Ammo in 0.4

I've tried too with this errors:
Code:
weapons.cpp:447:48: error: ‘class Player’ has no member named ‘getItemTypeCount’; did you mean ‘__getItemTypeCount’?
                 uint32_t playerCount = player->getItemTypeCount(item->getID());
                                                ^~~~~~~~~~~~~~~~
weapons.cpp:451:37: error: ‘class Player’ has no member named ‘removeItemOfType’; did you mean ‘removeEnemy’?
                             player->removeItemOfType(item->getID(), 100);
                                     ^~~~~~~~~~~~~~~~
weapons.cpp:452:37: error: ‘class Player’ has no member named ‘addItem’; did you mean ‘addEnemy’?
                             player->addItem(itemid, 100, 0, CONST_SLOT_AMMO);
                                     ^~~~~~~
weapons.cpp:452:61: error: ‘CONST_SLOT_AMMO’ was not declared in this scope
                             player->addItem(itemid, 100, 0, CONST_SLOT_AMMO);
                                                             ^~~~~~~~~~~~~~~
weapons.cpp:456:37: error: ‘class Player’ has no member named ‘removeItemOfType’; did you mean ‘removeEnemy’?
                             player->removeItemOfType(item->getId(), playerCount);
                                     ^~~~~~~~~~~~~~~~
weapons.cpp:456:60: error: ‘class Item’ has no member named ‘getId’; did you mean ‘getID’?
                             player->removeItemOfType(item->getId(), playerCount);
                                                            ^~~~~
weapons.cpp:457:37: error: ‘class Player’ has no member named ‘addItem’; did you mean ‘addEnemy’?
                             player->addItem(itemid, playerCount, 0, CONST_SLOT_AMMO);
                                     ^~~~~~~
weapons.cpp:457:69: error: ‘CONST_SLOT_AMMO’ was not declared in this scope
                             player->addItem(itemid, playerCount, 0, CONST_SLOT_AMMO);
                                                                     ^~~~~~~~~~~~~~~
Makefile:8: recipe for target 'tfs' failed
make: *** [tfs] Error 1

weapons.cpp:
hastebin
 
Solution
X
Returning this error:
Code:
[16:11:58.024] [Error - Weapon Interface]
[16:11:58.024] data/weapons/scripts/distance_weapons/arrows/arrow.lua:onUseWeapon
[16:11:58.024] Description:
[16:11:58.024] ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:2: attempt to index local 'item' (a number value)
[16:11:58.024] stack traceback:
[16:11:58.024]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:2: in function 'getItemCount'
[16:11:58.024]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:10: in function 'autoRechargeAmmo'
[16:11:58.024]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:75: in function <...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:74>
I'm not sure how your getting that...
Just make it a weapon lua script file, you dont have to source change. Every shot check for the ammunition in the inventory in the arrow slot then reload.

I dont have time to code a perfect function but heres some pseudo code for you.

could do something like this.

This is assuming they just shot the last ammunition value and the arrow slot is empty.
Code:
local ammunitionId=CHANGETHISTOIDVALUE
function onUseWeapon(cid, var)

addEvent(function(cid)
  if(getPlayerSlotItem(cid, CHANGETHISTOARROWSLOTIFORGOTNAME)~=ammunitionId)then
    local ammunitionCount=getPlayerItemCount(cid, ammunitionId)
    if(getPlayerItemCount(cid, ammunitionId)>0)then
      if(ammunitionCount>=100)then
        doPlayerRemoveItem(cid, ammunitionId, 100)
        doPlayerAddItem(cid, ammunitionId, 100)
      else
      doPlayerRemoveItem(cid, ammunitionId, ammunitionCount)
      doPlayerAddItem(cid, ammunitionId, ammunitionCount)
      end
   end
end
end, 500, cid)
    return doCombat(cid, combat, var)
end

If for some reason doPlayerAddItem doesnt send to open arrow slot you can use doPlayerAddItemEx to send to a certain slot.

GL
 
Last edited:
Did u know what is the empty ID?

I mean, to use:
Code:
if getPlayerSlotItem(cid, CONST_SLOT_AMMO).itemid == Empty then

Rather then:
Code:
if(getPlayerSlotItem(cid, CHANGETHISTOARROWSLOTIFORGOTNAME)~=ammunitionId)then
 
Did u know what is the empty ID?

I mean, to use:
Code:
if getPlayerSlotItem(cid, CONST_SLOT_AMMO).itemid == Empty then

Rather then:
Code:
if(getPlayerSlotItem(cid, CHANGETHISTOARROWSLOTIFORGOTNAME)~=ammunitionId)then
Code:
if getPlayerSlotItem(cid, CONST_SLOT_AMMO).uid< 1 then

if it works for ya slap me a best answer :D
 
I'm sorry to this too long, i trough no one know how to help...

I've tried:
Code:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, 2)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)

function onGetFormulaValues(cid, level, skill, attack, factor)   
   min = ((damagebase_min) * (attack) * (skill)) * -0.10
   max = ((damagebase_max) * (attack) * (skill)) * -1.00
   return min, max
end
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")

function onUseWeapon(cid, var)
   autoRechargeAmmo(cid)
   return doCombat(cid, combat, var)
end


function autoRechargeAmmo(cid)
   local ammunitionId = 2545
   if getPlayerSlotItem(cid, CONST_SLOT_AMMO).uid < 1 then
       local ammunitionCount = getPlayerItemCount(cid, ammunitionId)
       if(getPlayerItemCount(cid, ammunitionId) > 0)then
           if(ammunitionCount >= 100)then
               doPlayerRemoveItem(cid, ammunitionId, 100)
               doPlayerAddItem(cid, ammunitionId, 100)
           else
               doPlayerRemoveItem(cid, ammunitionId, ammunitionCount)
               doPlayerAddItem(cid, ammunitionId, ammunitionCount)
           end
       end
   end
end

But it's not working, it's not recharging.
 
I'm sorry to this too long, i trough no one know how to help...

I've tried:
Code:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, 2)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)

function onGetFormulaValues(cid, level, skill, attack, factor)
   min = ((damagebase_min) * (attack) * (skill)) * -0.10
   max = ((damagebase_max) * (attack) * (skill)) * -1.00
   return min, max
end
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")

function onUseWeapon(cid, var)
   autoRechargeAmmo(cid)
   return doCombat(cid, combat, var)
end


function autoRechargeAmmo(cid)
   local ammunitionId = 2545
   if getPlayerSlotItem(cid, CONST_SLOT_AMMO).uid < 1 then
       local ammunitionCount = getPlayerItemCount(cid, ammunitionId)
       if(getPlayerItemCount(cid, ammunitionId) > 0)then
           if(ammunitionCount >= 100)then
               doPlayerRemoveItem(cid, ammunitionId, 100)
               doPlayerAddItem(cid, ammunitionId, 100)
           else
               doPlayerRemoveItem(cid, ammunitionId, ammunitionCount)
               doPlayerAddItem(cid, ammunitionId, ammunitionCount)
           end
       end
   end
end

But it's not working, it's not recharging.
Try this. :oops:

LUA:
local function getItemCount(item)
    return item and (getItemWeight(item.uid) > 0 and getItemWeight(item.uid)/getItemWeightById(item.itemid) or 1) or 0
end

local function autoRechargeAmmo(cid)
    local ammo_in_slot = getPlayerSlotItem(cid, CONST_SLOT_AMMO).uid
    if ammo_in_slot == 0 then
        return false
    end
    if getItemCount(ammo_in_slot) ~= 1 then
        return false
    end
   
    local ammo_itemid = getPlayerSlotItem(cid, CONST_SLOT_AMMO).itemid
    local ammo_count = getPlayerItemCount(cid, ammo_itemid) - 1   
    ammo_count = ammo_count >= 100 and 100 or ammo_count
    addEvent (
        function ()
            doPlayerRemoveItem(cid, ammo_itemid, ammo_count)
            doPlayerAddItem(cid, ammo_itemid, ammo_count)
        end, 1
    )
    return true
end

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, 2)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)

function onGetFormulaValues(cid, level, skill, attack, factor) 
    min = ((damagebase_min) * (attack) * (skill)) * -0.10
    max = ((damagebase_max) * (attack) * (skill)) * -1.00
    return min, max
end
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")

function onUseWeapon(cid, var)
    autoRechargeAmmo(cid)
    return doCombat(cid, combat, var)
end
 
Try this. :oops:

LUA:
local function getItemCount(item)
    return item and (getItemWeight(item.uid) > 0 and getItemWeight(item.uid)/getItemWeightById(item.itemid) or 1) or 0
end

local function autoRechargeAmmo(cid)
    local ammo_in_slot = getPlayerSlotItem(cid, CONST_SLOT_AMMO).uid
    if ammo_in_slot == 0 then
        return false
    end
    if getItemCount(ammo_in_slot) ~= 1 then
        return false
    end
  
    local ammo_itemid = getPlayerSlotItem(cid, CONST_SLOT_AMMO).itemid
    local ammo_count = getPlayerItemCount(cid, ammo_itemid) - 1  
    ammo_count = ammo_count >= 100 and 100 or ammo_count
    addEvent (
        function ()
            doPlayerRemoveItem(cid, ammo_itemid, ammo_count)
            doPlayerAddItem(cid, ammo_itemid, ammo_count)
        end, 1
    )
    return true
end

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, 2)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)

function onGetFormulaValues(cid, level, skill, attack, factor)
    min = ((damagebase_min) * (attack) * (skill)) * -0.10
    max = ((damagebase_max) * (attack) * (skill)) * -1.00
    return min, max
end
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")

function onUseWeapon(cid, var)
    autoRechargeAmmo(cid)
    return doCombat(cid, combat, var)
end

Ty, but i've shotted 5 arrows and print this 5 errors:
Code:
[12:22:34.008] [Error - Weapon Interface]
[12:22:34.008] data/weapons/scripts/distance_weapons/arrows/arrow.lua:onUseWeapon
[12:22:34.008] Description:
[12:22:34.008] ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:2: attempt to index local 'item' (a number value)
[12:22:34.008] stack traceback:
[12:22:34.008]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:2: in function 'getItemCount'
[12:22:34.009]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:10: in function 'autoRechargeAmmo'
[12:22:34.009]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:75: in function <...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:74>

[12:22:36.180] [Error - Weapon Interface]
[12:22:36.180] data/weapons/scripts/distance_weapons/arrows/arrow.lua:onUseWeapon
[12:22:36.180] Description:
[12:22:36.180] ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:2: attempt to index local 'item' (a number value)
[12:22:36.180] stack traceback:
[12:22:36.180]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:2: in function 'getItemCount'
[12:22:36.180]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:10: in function 'autoRechargeAmmo'
[12:22:36.180]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:75: in function <...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:74>

[12:22:38.184] [Error - Weapon Interface]
[12:22:38.184] data/weapons/scripts/distance_weapons/arrows/arrow.lua:onUseWeapon
[12:22:38.184] Description:
[12:22:38.184] ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:2: attempt to index local 'item' (a number value)
[12:22:38.184] stack traceback:
[12:22:38.184]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:2: in function 'getItemCount'
[12:22:38.184]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:10: in function 'autoRechargeAmmo'
[12:22:38.184]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:75: in function <...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:74>

[12:22:40.188] [Error - Weapon Interface]
[12:22:40.188] data/weapons/scripts/distance_weapons/arrows/arrow.lua:onUseWeapon
[12:22:40.188] Description:
[12:22:40.188] ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:2: attempt to index local 'item' (a number value)
[12:22:40.188] stack traceback:
[12:22:40.188]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:2: in function 'getItemCount'
[12:22:40.188]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:10: in function 'autoRechargeAmmo'
[12:22:40.188]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:75: in function <...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:74>

[12:22:42.192] [Error - Weapon Interface]
[12:22:42.192] data/weapons/scripts/distance_weapons/arrows/arrow.lua:onUseWeapon
[12:22:42.192] Description:
[12:22:42.192] ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:2: attempt to index local 'item' (a number value)
[12:22:42.192] stack traceback:
[12:22:42.192]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:2: in function 'getItemCount'
[12:22:42.192]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:10: in function 'autoRechargeAmmo'
[12:22:42.192]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:75: in function <...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:74>

Not showing arrows thrwoing and not recharging
 
Ty, but i've shotted 5 arrows and print this 5 errors:
Code:
[12:22:34.008] [Error - Weapon Interface]
[12:22:34.008] data/weapons/scripts/distance_weapons/arrows/arrow.lua:onUseWeapon
[12:22:34.008] Description:
[12:22:34.008] ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:2: attempt to index local 'item' (a number value)
[12:22:34.008] stack traceback:
[12:22:34.008]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:2: in function 'getItemCount'
[12:22:34.009]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:10: in function 'autoRechargeAmmo'
[12:22:34.009]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:75: in function <...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:74>

[12:22:36.180] [Error - Weapon Interface]
[12:22:36.180] data/weapons/scripts/distance_weapons/arrows/arrow.lua:onUseWeapon
[12:22:36.180] Description:
[12:22:36.180] ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:2: attempt to index local 'item' (a number value)
[12:22:36.180] stack traceback:
[12:22:36.180]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:2: in function 'getItemCount'
[12:22:36.180]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:10: in function 'autoRechargeAmmo'
[12:22:36.180]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:75: in function <...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:74>

[12:22:38.184] [Error - Weapon Interface]
[12:22:38.184] data/weapons/scripts/distance_weapons/arrows/arrow.lua:onUseWeapon
[12:22:38.184] Description:
[12:22:38.184] ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:2: attempt to index local 'item' (a number value)
[12:22:38.184] stack traceback:
[12:22:38.184]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:2: in function 'getItemCount'
[12:22:38.184]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:10: in function 'autoRechargeAmmo'
[12:22:38.184]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:75: in function <...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:74>

[12:22:40.188] [Error - Weapon Interface]
[12:22:40.188] data/weapons/scripts/distance_weapons/arrows/arrow.lua:onUseWeapon
[12:22:40.188] Description:
[12:22:40.188] ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:2: attempt to index local 'item' (a number value)
[12:22:40.188] stack traceback:
[12:22:40.188]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:2: in function 'getItemCount'
[12:22:40.188]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:10: in function 'autoRechargeAmmo'
[12:22:40.188]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:75: in function <...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:74>

[12:22:42.192] [Error - Weapon Interface]
[12:22:42.192] data/weapons/scripts/distance_weapons/arrows/arrow.lua:onUseWeapon
[12:22:42.192] Description:
[12:22:42.192] ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:2: attempt to index local 'item' (a number value)
[12:22:42.192] stack traceback:
[12:22:42.192]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:2: in function 'getItemCount'
[12:22:42.192]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:10: in function 'autoRechargeAmmo'
[12:22:42.192]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:75: in function <...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:74>

Not showing arrows thrwoing and not recharging
Idk why I tried that function.
I was running a fever of 102 when I wrote that though, so I guess that's why. xP

Try this. :oops:
LUA:
local function autoRechargeAmmo(cid)
    local ammo_in_slot = getPlayerSlotItem(cid, CONST_SLOT_AMMO).uid
    if ammo_in_slot == 0 then
        return false
    end
    ammo_in_slot = getPlayerSlotItem(cid, CONST_SLOT_AMMO).type
    if getItemCount(ammo_in_slot) ~= 1 then
        return false
    end
   
    local ammo_itemid = getPlayerSlotItem(cid, CONST_SLOT_AMMO).itemid
    local ammo_count = getPlayerItemCount(cid, ammo_itemid) - 1 
    ammo_count = ammo_count >= 100 and 100 or ammo_count
    addEvent (
        function ()
            doPlayerRemoveItem(cid, ammo_itemid, ammo_count)
            doPlayerAddItem(cid, ammo_itemid, ammo_count)
        end, 1
    )
    return true
end

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, 2)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)

function onGetFormulaValues(cid, level, skill, attack, factor)
    min = ((damagebase_min) * (attack) * (skill)) * -0.10
    max = ((damagebase_max) * (attack) * (skill)) * -1.00
    return min, max
end
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")

function onUseWeapon(cid, var)
    autoRechargeAmmo(cid)
    return doCombat(cid, combat, var)
end
 
Idk why I tried that function.
I was running a fever of 102 when I wrote that though, so I guess that's why. xP

Try this. :oops:
LUA:
local function autoRechargeAmmo(cid)
    local ammo_in_slot = getPlayerSlotItem(cid, CONST_SLOT_AMMO).uid
    if ammo_in_slot == 0 then
        return false
    end
    ammo_in_slot = getPlayerSlotItem(cid, CONST_SLOT_AMMO).type
    if getItemCount(ammo_in_slot) ~= 1 then
        return false
    end
  
    local ammo_itemid = getPlayerSlotItem(cid, CONST_SLOT_AMMO).itemid
    local ammo_count = getPlayerItemCount(cid, ammo_itemid) - 1
    ammo_count = ammo_count >= 100 and 100 or ammo_count
    addEvent (
        function ()
            doPlayerRemoveItem(cid, ammo_itemid, ammo_count)
            doPlayerAddItem(cid, ammo_itemid, ammo_count)
        end, 1
    )
    return true
end

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, 2)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)

function onGetFormulaValues(cid, level, skill, attack, factor)
    min = ((damagebase_min) * (attack) * (skill)) * -0.10
    max = ((damagebase_max) * (attack) * (skill)) * -1.00
    return min, max
end
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")

function onUseWeapon(cid, var)
    autoRechargeAmmo(cid)
    return doCombat(cid, combat, var)
end

Returning this error:
Code:
[16:11:58.024] [Error - Weapon Interface]
[16:11:58.024] data/weapons/scripts/distance_weapons/arrows/arrow.lua:onUseWeapon
[16:11:58.024] Description:
[16:11:58.024] ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:2: attempt to index local 'item' (a number value)
[16:11:58.024] stack traceback:
[16:11:58.024]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:2: in function 'getItemCount'
[16:11:58.024]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:10: in function 'autoRechargeAmmo'
[16:11:58.024]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:75: in function <...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:74>
 
Returning this error:
Code:
[16:11:58.024] [Error - Weapon Interface]
[16:11:58.024] data/weapons/scripts/distance_weapons/arrows/arrow.lua:onUseWeapon
[16:11:58.024] Description:
[16:11:58.024] ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:2: attempt to index local 'item' (a number value)
[16:11:58.024] stack traceback:
[16:11:58.024]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:2: in function 'getItemCount'
[16:11:58.024]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:10: in function 'autoRechargeAmmo'
[16:11:58.024]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:75: in function <...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:74>
I'm not sure how your getting that error, but I do see a stupid small mistake I made.
try this.
LUA:
local function autoRechargeAmmo(cid)
    local ammo_in_slot = getPlayerSlotItem(cid, CONST_SLOT_AMMO).uid
    if ammo_in_slot == 0 then
        return false
    end
    ammo_in_slot = getPlayerSlotItem(cid, CONST_SLOT_AMMO).type
    if ammo_in_slot ~= 1 then
        return false
    end
   
    local ammo_itemid = getPlayerSlotItem(cid, CONST_SLOT_AMMO).itemid
    local ammo_count = getPlayerItemCount(cid, ammo_itemid) - 1 
    ammo_count = ammo_count >= 100 and 100 or ammo_count
    addEvent (
        function ()
            doPlayerRemoveItem(cid, ammo_itemid, ammo_count)
            doPlayerAddItem(cid, ammo_itemid, ammo_count)
        end, 1
    )
    return true
end

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, 2)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)

function onGetFormulaValues(cid, level, skill, attack, factor)
    min = ((damagebase_min) * (attack) * (skill)) * -0.10
    max = ((damagebase_max) * (attack) * (skill)) * -1.00
    return min, max
end
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")

function onUseWeapon(cid, var)
    autoRechargeAmmo(cid)
    return doCombat(cid, combat, var)
end
 
Solution
I'm not sure how your getting that error, but I do see a stupid small mistake I made.
try this.
LUA:
local function autoRechargeAmmo(cid)
    local ammo_in_slot = getPlayerSlotItem(cid, CONST_SLOT_AMMO).uid
    if ammo_in_slot == 0 then
        return false
    end
    ammo_in_slot = getPlayerSlotItem(cid, CONST_SLOT_AMMO).type
    if ammo_in_slot ~= 1 then
        return false
    end
  
    local ammo_itemid = getPlayerSlotItem(cid, CONST_SLOT_AMMO).itemid
    local ammo_count = getPlayerItemCount(cid, ammo_itemid) - 1
    ammo_count = ammo_count >= 100 and 100 or ammo_count
    addEvent (
        function ()
            doPlayerRemoveItem(cid, ammo_itemid, ammo_count)
            doPlayerAddItem(cid, ammo_itemid, ammo_count)
        end, 1
    )
    return true
end

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, 2)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)

function onGetFormulaValues(cid, level, skill, attack, factor)
    min = ((damagebase_min) * (attack) * (skill)) * -0.10
    max = ((damagebase_max) * (attack) * (skill)) * -1.00
    return min, max
end
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")

function onUseWeapon(cid, var)
    autoRechargeAmmo(cid)
    return doCombat(cid, combat, var)
end

Ty to still trying helping
But still not working:
Code:
[16:28:18.999] [Error - Weapon Interface]
[16:28:18.999] data/weapons/scripts/distance_weapons/arrows/arrow.lua:onUseWeapon
[16:28:18.999] Description:
[16:28:18.999] ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:2: attempt to index local 'item' (a number value)
[16:28:18.999] stack traceback:
[16:28:18.999]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:2: in function 'getItemCount'
[16:28:18.999]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:10: in function 'autoRechargeAmmo'
[16:28:18.999]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:75: in function <...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:74>
 
Ty to still trying helping
But still not working:
Code:
[16:28:18.999] [Error - Weapon Interface]
[16:28:18.999] data/weapons/scripts/distance_weapons/arrows/arrow.lua:onUseWeapon
[16:28:18.999] Description:
[16:28:18.999] ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:2: attempt to index local 'item' (a number value)
[16:28:18.999] stack traceback:
[16:28:18.999]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:2: in function 'getItemCount'
[16:28:18.999]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:10: in function 'autoRechargeAmmo'
[16:28:18.999]    ...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:75: in function <...ta/weapons/scripts/distance_weapons/arrows/arrow.lua:74>
I'm getting the feeling that you've pasted the script underneath the older code.
My script is only 38 lines long, yet your getting errors on line 74.

Install the script properly and restart your server.
If your still getting the same error, upload screenshots of everything.

:oops:
 
I'm getting the feeling that you've pasted the script underneath the older code.
My script is only 38 lines long, yet your getting errors on line 74.

Install the script properly and restart your server.
If your still getting the same error, upload screenshots of everything.

:oops:

I'm sorry, i was using /reload weapons thiking it was working...

Guys the script is working, thank you again Xikini!
 
How to adapt this function autoRechargeAmmo(cid) to weapons on hands, for example: small stone (it could be on left or right hands :S)
LUA:
local function autoRechargeAmmo(cid, slot)
    local ammo_in_slot = getPlayerSlotItem(cid, slot).uid
    if ammo_in_slot == 0 then
        return false
    end
    ammo_in_slot = getPlayerSlotItem(cid, slot).type
    if ammo_in_slot ~= 1 then
        return false
    end
   
    local ammo_itemid = getPlayerSlotItem(cid, slot).itemid
    local ammo_count = getPlayerItemCount(cid, ammo_itemid) - 1
    ammo_count = ammo_count >= 100 and 100 or ammo_count
    addEvent (
        function ()
            doPlayerRemoveItem(cid, ammo_itemid, ammo_count)
            doPlayerAddItem(cid, ammo_itemid, ammo_count)
        end, 1
    )
    return true
end

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, 2)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)

function onGetFormulaValues(cid, level, skill, attack, factor)
    min = ((damagebase_min) * (attack) * (skill)) * -0.10
    max = ((damagebase_max) * (attack) * (skill)) * -1.00
    return min, max
end
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")

function onUseWeapon(cid, var)
    autoRechargeAmmo(cid, CONST_SLOT_AMMO)
    return doCombat(cid, combat, var)
end
 
LUA:
local function autoRechargeAmmo(cid, slot)
    local ammo_in_slot = getPlayerSlotItem(cid, slot).uid
    if ammo_in_slot == 0 then
        return false
    end
    ammo_in_slot = getPlayerSlotItem(cid, slot).type
    if ammo_in_slot ~= 1 then
        return false
    end
  
    local ammo_itemid = getPlayerSlotItem(cid, slot).itemid
    local ammo_count = getPlayerItemCount(cid, ammo_itemid) - 1
    ammo_count = ammo_count >= 100 and 100 or ammo_count
    addEvent (
        function ()
            doPlayerRemoveItem(cid, ammo_itemid, ammo_count)
            doPlayerAddItem(cid, ammo_itemid, ammo_count)
        end, 1
    )
    return true
end

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, 2)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)

function onGetFormulaValues(cid, level, skill, attack, factor)
    min = ((damagebase_min) * (attack) * (skill)) * -0.10
    max = ((damagebase_max) * (attack) * (skill)) * -1.00
    return min, max
end
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")

function onUseWeapon(cid, var)
    autoRechargeAmmo(cid, CONST_SLOT_AMMO)
    return doCombat(cid, combat, var)
end

Not work, no error, just no recharging.
 
did you change this line for your script?
LUA:
autoRechargeAmmo(cid, CONST_SLOT_AMMO)

If you did, and it's still not working, I'm not sure what could be wrong and I have no way to test the script on my side.
I could teamviewer with you to attempt to solve the issue though.
 
did you change this line for your script?
LUA:
autoRechargeAmmo(cid, CONST_SLOT_AMMO)

If you did, and it's still not working, I'm not sure what could be wrong and I have no way to test the script on my side.
I could teamviewer with you to attempt to solve the issue though.

What are u mean to change this line autoRechargeAmmo(cid, CONST_SLOT_AMMO)
You mean change autoRechargeAmmo(cid) to autoRechargeAmmo(cid, CONST_SLOT_AMMO)?

This is my small stone script:
Code:
local function autoRechargeAmmo(cid, slot)
    local ammo_in_slot = getPlayerSlotItem(cid, slot).uid
    if ammo_in_slot == 0 then
        return false
    end
    ammo_in_slot = getPlayerSlotItem(cid, slot).type
    if ammo_in_slot ~= 1 then
        return false
    end
   
    local ammo_itemid = getPlayerSlotItem(cid, slot).itemid
    local ammo_count = getPlayerItemCount(cid, ammo_itemid) - 1
    ammo_count = ammo_count >= 100 and 100 or ammo_count
    addEvent (
        function ()
            doPlayerRemoveItem(cid, ammo_itemid, ammo_count)
            doPlayerAddItem(cid, ammo_itemid, ammo_count)
        end, 1
    )
    return true
end

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, 2)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)

function onGetFormulaValues(cid, level, skill, attack, factor)
    min = ((damagebase_min) * (attack) * (skill)) * -0.10
    max = ((damagebase_max) * (attack) * (skill)) * -1.00
    return min, max
end
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")

function onUseWeapon(cid, var)
    autoRechargeAmmo(cid, CONST_SLOT_AMMO)
    return doCombat(cid, combat, var)
end

Is this not working because small stone break rarelly, while arrows broke every shot?
 
Back
Top