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

Help me out here?

Evan

A splendid one to behold
Senator
Premium User
Joined
May 6, 2009
Messages
7,018
Solutions
1
Reaction score
1,040
Location
United States
Cykotitan recently created a script for me to shoot an ethereal shot when clicking the crossbow.

This time, I've decided to make an upgraded version with another crossbow, but the thing I want different about it is; I want it to shoot 2 bolts at once, .5 seconds apart.

Here's the script that I have, it shoots 1 bolt (made by Cykotitan):

PHP:
local exhaust = createConditionObject(CONDITION_EXHAUST)
setConditionParam(exhaust, CONDITION_PARAM_TICKS, 10000)

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, true)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FLASHARROW)
function onGetFormulaValues(cid, level, skill, attack, factor)
	return -(((skill + 100) / 3) + (level / 5)), -((skill + 100) + (level / 5))
end
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")

function onUse(cid, item, fromPosition, itemEx, toPosition)
	if getPlayerMana(cid) >= 20 then
		if not hasCondition(cid, CONDITION_EXHAUST) then
			if getCreatureTarget(cid) > 0 then
				if getPlayerSlotItem(cid, CONST_SLOT_AMMO).itemid == 2543 then
					doAddCondition(cid, exhaust)
					doSendMagicEffect(getThingPos(getCreatureTarget(cid)), CONST_ME_STUN)
					doRemoveItem(getPlayerSlotItem(cid, CONST_SLOT_AMMO).uid, 1)
					doPlayerAddSkillTry(cid, SKILL_DISTANCE, 1)
					doCreatureAddMana(cid, -20)
					return doCombat(cid, combat, numberToVariant(getCreatureTarget(cid)))
				else
					return doPlayerSendCancel(cid, 'You don\'t have any ammunition.')
				end
			else
				return doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUCANONLYUSEITONCREATURES)
			end
		else
			return doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED)
		end
	else
		return doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTENOUGHMANA)
	end
end
 
Code:
local exhaust = createConditionObject(CONDITION_EXHAUST)
setConditionParam(exhaust, CONDITION_PARAM_TICKS, 5000)

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, true)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FLASHARROW)
function onGetFormulaValues(cid, level, skill, attack, factor)
    return -(((skill + 100) / 3) + (level / 5)), -((skill + 100) + (level / 5))
end
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")

function onUse(cid, item, fromPosition, itemEx, toPosition)
    if getPlayerMana(cid) >= 20 then
        if not hasCondition(cid, CONDITION_EXHAUST) then
            if getCreatureTarget(cid) > 0 then
                if getPlayerSlotItem(cid, CONST_SLOT_AMMO).itemid == 2543 then
                    doAddCondition(cid, exhaust)
                    doSendMagicEffect(getThingPos(getCreatureTarget(cid)), CONST_ME_STUN)
                    doRemoveItem(getPlayerSlotItem(cid, CONST_SLOT_AMMO).uid, 2)
                    doPlayerAddSkillTry(cid, SKILL_DISTANCE, 2)
                    doCreatureAddMana(cid, -20)
                    return doCombat(cid, combat, numberToVariant(getCreatureTarget(cid)))
                else
                    return doPlayerSendCancel(cid, 'You don\'t have any ammunition.')
                end
            else
                return doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUCANONLYUSEITONCREATURES)
            end
        else
            return doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED)
        end
    else
        return doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTENOUGHMANA)
    end
end

try this :P
 
something like this;
Code:
local exhaust = createConditionObject(CONDITION_EXHAUST) 
setConditionParam(exhaust, CONDITION_PARAM_TICKS, 10000) 

local combat = createCombatObject() 
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) 
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, true) 
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FLASHARROW) 
function onGetFormulaValues(cid, level, skill, attack, factor) 
	return -(((skill + 100) / 3) + (level / 5)), -((skill + 100) + (level / 5)) 
end 
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues") 

function onUse(cid, item, fromPosition, itemEx, toPosition)
	local v = 0
	if getPlayerMana(cid) >= 20 then 
		if not hasCondition(cid, CONDITION_EXHAUST) then 
			if getCreatureTarget(cid) > 0 then 
				if getPlayerSlotItem(cid, CONST_SLOT_AMMO).itemid == 2543 then 
					doAddCondition(cid, exhaust) 
					doSendMagicEffect(getThingPos(getCreatureTarget(cid)), CONST_ME_STUN) 
					doRemoveItem(getPlayerSlotItem(cid, CONST_SLOT_AMMO).uid, 1) 
					doPlayerAddSkillTry(cid, SKILL_DISTANCE, 1) 
					doCreatureAddMana(cid, -20) 
					while v < 3 do
						addEvent(doCombat, 500, cid, combat, numberToVariant(getCreatureTarget(cid)))
					end
					return true
				else 
					return doPlayerSendCancel(cid, 'You don\'t have any ammunition.') 
				end 
			else 
				return doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUCANONLYUSEITONCREATURES) 
			end 
		else 
			return doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED) 
		end 
	else 
		return doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTENOUGHMANA) 
	end 
end
 
something like this;
Code:
local exhaust = createConditionObject(CONDITION_EXHAUST) 
setConditionParam(exhaust, CONDITION_PARAM_TICKS, 10000) 

local combat = createCombatObject() 
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) 
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, true) 
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FLASHARROW) 
function onGetFormulaValues(cid, level, skill, attack, factor) 
	return -(((skill + 100) / 3) + (level / 5)), -((skill + 100) + (level / 5)) 
end 
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues") 

function onUse(cid, item, fromPosition, itemEx, toPosition)
	local v = 0
	if getPlayerMana(cid) >= 20 then 
		if not hasCondition(cid, CONDITION_EXHAUST) then 
			if getCreatureTarget(cid) > 0 then 
				if getPlayerSlotItem(cid, CONST_SLOT_AMMO).itemid == 2543 then 
					doAddCondition(cid, exhaust) 
					doSendMagicEffect(getThingPos(getCreatureTarget(cid)), CONST_ME_STUN) 
					doRemoveItem(getPlayerSlotItem(cid, CONST_SLOT_AMMO).uid, 1) 
					doPlayerAddSkillTry(cid, SKILL_DISTANCE, 1) 
					doCreatureAddMana(cid, -20) 
					while v < 3 do
						addEvent(doCombat, 500, cid, combat, numberToVariant(getCreatureTarget(cid)))
					end
					return true
				else 
					return doPlayerSendCancel(cid, 'You don\'t have any ammunition.') 
				end 
			else 
				return doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUCANONLYUSEITONCREATURES) 
			end 
		else 
			return doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED) 
		end 
	else 
		return doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTENOUGHMANA) 
	end 
end

Wow, when I tried it, it lagged the entire computer and crashed the server.

[05/05/2010 18:01:49] [Error - Action Interface]
[05/05/2010 18:01:50] data/actions/scripts/crossbow power 2.lua:onUse
[05/05/2010 18:01:50] Description:
[05/05/2010 18:01:50] not enough memory

Seems like there was a massive memory leak.
 
And then it spams an error in the GUI window;

Something like

luaDoCombat error
Creature not found or something
 
there u go;
Code:
local exhaust = createConditionObject(CONDITION_EXHAUST) 
setConditionParam(exhaust, CONDITION_PARAM_TICKS, 10000) 

local combat = createCombatObject() 
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) 
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, true) 
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FLASHARROW) 
function onGetFormulaValues(cid, level, skill, attack, factor) 
	return -(((skill + 100) / 3) + (level / 5)), -((skill + 100) + (level / 5)) 
end 
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues") 

function onUse(cid, item, fromPosition, itemEx, toPosition)
	if getPlayerMana(cid) >= 20 then 
		if not hasCondition(cid, CONDITION_EXHAUST) then 
			if getCreatureTarget(cid) > 0 then 
				if getPlayerSlotItem(cid, CONST_SLOT_AMMO).itemid == 2543 then 
					doAddCondition(cid, exhaust) 
					doSendMagicEffect(getThingPos(getCreatureTarget(cid)), CONST_ME_STUN) 
					doRemoveItem(getPlayerSlotItem(cid, CONST_SLOT_AMMO).uid, 1) 
					doPlayerAddSkillTry(cid, SKILL_DISTANCE, 1) 
					doCreatureAddMana(cid, -20) 
					for i = 1, 3 do
						addEvent(doCombat, 500, cid, combat, numberToVariant(getCreatureTarget(cid)))
					end
					return true
				else 
					return doPlayerSendCancel(cid, 'You don\'t have any ammunition.') 
				end 
			else 
				return doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUCANONLYUSEITONCREATURES) 
			end 
		else 
			return doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED) 
		end 
	else 
		return doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTENOUGHMANA) 
	end 
end
 
Didn't work out the right way.

The script did the stun magic effect on target, then about a second later it shoots the bolt (only 1 bolt) doing 2x the damage as the normal crossbow script in first post.
 
Didn't work out the right way.

The script did the stun magic effect on target, then about a second later it shoots the bolt (only 1 bolt) doing 2x the damage as the normal crossbow script in first post.
lua is fast :S, thats why you dont see it boom, boom, boom, ull see it as a "boom" but the damage is different... or what you want it to do exactly? :S
or, you want it to send the magic effect 3 times also?
if "yes";
Code:
local exhaust = createConditionObject(CONDITION_EXHAUST) 
setConditionParam(exhaust, CONDITION_PARAM_TICKS, 10000) 

local combat = createCombatObject() 
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) 
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, true) 
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FLASHARROW) 
function onGetFormulaValues(cid, level, skill, attack, factor) 
	return -(((skill + 100) / 3) + (level / 5)), -((skill + 100) + (level / 5)) 
end 
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues") 

function onUse(cid, item, fromPosition, itemEx, toPosition)
	if getPlayerMana(cid) >= 20 then 
		if not hasCondition(cid, CONDITION_EXHAUST) then 
			if getCreatureTarget(cid) > 0 then 
				if getPlayerSlotItem(cid, CONST_SLOT_AMMO).itemid == 2543 then 
					doAddCondition(cid, exhaust)
					doRemoveItem(getPlayerSlotItem(cid, CONST_SLOT_AMMO).uid, 1) 
					doPlayerAddSkillTry(cid, SKILL_DISTANCE, 1) 
					doCreatureAddMana(cid, -20) 
					for i = 1, 3 do
						addEvent(doCombat, 500, cid, combat, numberToVariant(getCreatureTarget(cid)))
						addEvent(doSendMagicEffect, 500, getThingPos(getCreatureTarget(cid)), CONST_ME_STUN)
					end
					return true
				else 
					return doPlayerSendCancel(cid, 'You don\'t have any ammunition.') 
				end 
			else 
				return doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUCANONLYUSEITONCREATURES) 
			end 
		else 
			return doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED) 
		end 
	else 
		return doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTENOUGHMANA) 
	end 
end
 
What I want is the script shooting 2 bolts at 2 different times (.5 seconds apart) and doing 2 different damages.
Like boom boom.
2 different damages in each bolt shot in 1 script.

Get what I mean?
I'm not sure if its possible, but...

But, I guess you're right, not possible to see the boom boom.
 
like for example a damage: 500 and another one 700? with a formula? and each 2 different effects but not same time like 1 0.5 seconds and the oher 1 second, true?
 
Code:
local exhaust = createConditionObject(CONDITION_EXHAUST) 
setConditionParam(exhaust, CONDITION_PARAM_TICKS, 10000) 

local combat = createCombatObject() 
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) 
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, true) 
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FLASHARROW) 
function onGetFormulaValues(cid, level, skill, attack, factor) 
	return -(((skill + 100) / 3) + (level / 5)), -((skill + 100) + (level / 5)) 
end 
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues") 

function onUse(cid, item, fromPosition, itemEx, toPosition)
	if getPlayerMana(cid) >= 20 then 
		if not hasCondition(cid, CONDITION_EXHAUST) then 
			if getCreatureTarget(cid) > 0 then 
				if getPlayerSlotItem(cid, CONST_SLOT_AMMO).itemid == 2543 then 
					doAddCondition(cid, exhaust) 
					doRemoveItem(getPlayerSlotItem(cid, CONST_SLOT_AMMO).uid, 2)
					doPlayerAddSkillTry(cid, SKILL_DISTANCE, 1) 
					doCreatureAddMana(cid, -20)
					for i = 1, 2 do
						addEvent(doCombat, 500, cid, combat, numberToVariant(getCreatureTarget(cid)))
						addEvent(doSendMagicEffect, 500, getThingPos(getCreatureTarget(cid)), CONST_ME_STUN)
						addEvent(doCombat, 1000, cid, combat, numberToVariant(getCreatureTarget(cid)))
						addEvent(doSendMagicEffect, 1000, getThingPos(getCreatureTarget(cid)), CONST_ME_STUN)
						break
					end
					return true
				else 
					return doPlayerSendCancel(cid, 'You don\'t have any ammunition.') 
				end 
			else 
				return doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUCANONLYUSEITONCREATURES) 
			end 
		else 
			return doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED) 
		end 
	else 
		return doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTENOUGHMANA) 
	end 
end
? ;d
 
Yup, that is exactly the way I wanted, thanks so much!
I wish I could give you 2 rep counts, but oh well.
 
Code:
[B][COLOR="Red"]for i = 1, 2 do[/COLOR][/B]
	addEvent(doCombat, 500, cid, combat, numberToVariant(getCreatureTarget(cid)))
	addEvent(doSendMagicEffect, 500, getThingPos(getCreatureTarget(cid)), CONST_ME_STUN)
	addEvent(doCombat, 1000, cid, combat, numberToVariant(getCreatureTarget(cid)))
	addEvent(doSendMagicEffect, 1000, getThingPos(getCreatureTarget(cid)), CONST_ME_STUN)
	[B][COLOR="Red"]break[/COLOR][/B]
end
Why are you looping if you stop the loop in the first iteration?
 

Similar threads

Back
Top