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

Problem z przeskakiwaniem czaru na innych graczy

Kurczok

Newbie
Joined
Oct 22, 2009
Messages
497
Reaction score
4
Witam mam problem ze spellem który powinien przeskakiwać miedzy następnymi graczami w pobliżu zadając im dmg i paraliżując ich jednak czar atakuje tylko jednego gracza (czar to exori xena od Gesiora)

xena.lua
PHP:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, TRUE)

local condition = createConditionObject(CONDITION_PARALYZE)
setConditionParam(condition, CONDITION_PARAM_TICKS, 3000)
setConditionFormula(condition, -0.3, 0, -0.3, 0)
setCombatCondition(combat, condition)

function getSpellDamageXena(cid, weaponSkill, weaponAttack, attackStrength)
	local attack = 35 --Spear's attack
	local skill = getPlayerSkill(cid, CONST_SKILL_DISTANCE)

	local maxWeaponDamage = (skill * attack) / 20 + attack
	local damage = -((math.random(0, maxWeaponDamage) * attackStrength) / 20) * 0.8 --0.8 is the multiplier

	return damage, damage --The random part of the formula has already been made, just return the normal damage
end

function xenaHit(param)
	if isCreature(param.cid) == TRUE and isCreature(variantToNumber(param.var)) == TRUE then
		doSendDistanceShoot(param.fromcidpos, getCreaturePosition(variantToNumber(param.var)), CONST_ANI_LARGEROCK)
		doCombat(param.cid, param.combat, param.var)
		param.fromcidpos = getCreaturePosition(variantToNumber(param.var))
		table.insert(param.notHitCidArray, variantToNumber(param.var))
		param.count = param.count + 1
		if (param.lastshot == 0) then
			local enemies = getMonstersInArea3(param.fromcidpos, param.notHitCidArray)
			if (enemies.number > 0) and (param.count < 8) then
				local enemiesList = enemies.list
				local randenemy = math.random(1, enemies.number)
				param.var = numberToVariant(enemiesList[randenemy])
			else
				param.var = numberToVariant(param.cid)
				param.lastshot = 1
			end
			addEvent(xenaHit, 200, param)
		end
	end
end

setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "getSpellDamageXena")

function onCastSpell(cid, var)
	if(variantToNumber(var) ~= 0) then
		if isCreature(variantToNumber(var)) == TRUE then
			local param = {}
			param.cid = cid
			param.fromcidpos = getCreaturePosition(cid)
			param.var = var
			param.combat = combat
			param.count = 0
			param.lastshot = 0
			param.notHitCidArray = {cid}
			addEvent(xenaHit, 1, param)
		end
	end
	return true
end

wpis do function.lua
PHP:
function getMonstersInArea3(cidpos, notCidArray)
	local playernumber = 0
	local playersInRange = {}
		local pPos = cidpos
		local positionsToCheck = {
		{x=pPos.x-3,y=pPos.y+3,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x-2,y=pPos.y+3,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x-1,y=pPos.y+3,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x,y=pPos.y+3,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+1,y=pPos.y+3,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+2,y=pPos.y+3,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+3,y=pPos.y+3,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},
		{x=pPos.x-3,y=pPos.y+2,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x-2,y=pPos.y+2,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x-1,y=pPos.y+2,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x,y=pPos.y+2,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+1,y=pPos.y+2,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+2,y=pPos.y+2,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+3,y=pPos.y+2,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},
		{x=pPos.x-3,y=pPos.y+1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x-2,y=pPos.y+1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x-1,y=pPos.y+1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x,y=pPos.y+1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+1,y=pPos.y+1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+2,y=pPos.y+1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+3,y=pPos.y+1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},
		{x=pPos.x-3,y=pPos.y,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x-2,y=pPos.y,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x-1,y=pPos.y,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x,y=pPos.y,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+1,y=pPos.y,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+2,y=pPos.y,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+3,y=pPos.y,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},
		{x=pPos.x-3,y=pPos.y-1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x-2,y=pPos.y-1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x-1,y=pPos.y-1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x,y=pPos.y-1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+1,y=pPos.y-1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+2,y=pPos.y-1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+3,y=pPos.y-1,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},
		{x=pPos.x-3,y=pPos.y-2,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x-2,y=pPos.y-2,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x-1,y=pPos.y-2,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x,y=pPos.y-2,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+1,y=pPos.y-2,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+2,y=pPos.y-2,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+3,y=pPos.y-2,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},
		{x=pPos.x-3,y=pPos.y-3,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x-2,y=pPos.y-3,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x-1,y=pPos.y-3,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x,y=pPos.y-3,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+1,y=pPos.y-3,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+2,y=pPos.y-3,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE},{x=pPos.x+3,y=pPos.y-3,z=pPos.z,stackpos=STACKPOS_TOP_CREATURE}
		}
		for i = 1, table.maxn(positionsToCheck) do
			local creatureToHit = getThingfromPos(positionsToCheck[i])
			if getTilePzInfo(positionsToCheck[i]) == 0 then
				if isCreature(creatureToHit.uid) == TRUE and creatureToHit.uid ~= cid and isInArray(notCidArray, creatureToHit.uid) ~= TRUE then
					table.insert(playersInRange, creatureToHit.uid)
					playernumber = playernumber + 1
				end
			end
		end
	return {list = playersInRange, number = playernumber}
end

Jeśli ktoś ma jakieś pomysły lub widzi błąd to proszę o pomoc.
 
A możesz napisać dokładniej co i jak? bo nigdy tego nie używałem :/
 
Zobacz na CityGuard'a w TFS'ie on loopuje po wszystkich na ekranie i sprawdza im skulle, przerzuc to do swojego spella :P
 
Problem rozwiązany nie chodziło o getSpectators.

A mam jeszcze pytanie jak zabezpieczyć żeby nie wbijał pz na graczach?
 
Last edited:
Back
Top