Jump to content
  • 0

Aumenta a quantidade de bicho com dust


MalBack

Question

salve rapaziada queria saber se tem como aumenta a quantidade de mostro q aparece no map com dust "as poerinha para foge "

n ta aparecendo nada , parece um la de vem em quando . 

 

 

se poder me ajuda fico muito grato . " VERSAO 12.91 "

 

Vou deixa 2 arquivo pra verr se ajuda , ver se tem alguma coisa a ver com o que to pedindo .

 

 

local createMonster = TalkAction("/m")

function createMonster.onSay(player, words, param)
	if not player:getGroup():getAccess() or player:getAccountType() < ACCOUNT_TYPE_GOD then
		return true
	end

	-- Usage: "/m monstername, fiendish" for create a fiendish monster (/m rat, fiendish)
	-- Usage: "/m monstername, [1-5]" for create a influenced monster with specific level (/m rat, 2)
	if param == "" then
		player:sendCancelMessage("Monster name param required.")
		Spdlog.error("[createMonster.onSay] - Monster name param not found.")
		return false
	end

	local split = param:split(",")
	local monsterName = split[1]
	local monsterForge = nil
	if split[2] then
		split[2] = split[2]:gsub("^%s*(.-)$", "%1") --Trim left
		monsterForge = split[2]
	end
	-- Check dust level
	local setFiendish = false
	local setInfluenced
	if type(monsterForge) == "string" and monsterForge == "fiendish" then
		setFiendish = true
	end
	local influencedLevel
	if not setFiendish then
		influencedLevel = tonumber(monsterForge)
	end
	if influencedLevel and influencedLevel > 0 then
		if influencedLevel > 5 then
			player:sendCancelMessage("Invalid influenced level.")
			return false
		end
		setInfluenced = true
	end

	local position = player:getPosition()
	local monster = Game.createMonster(monsterName, position)
	if monster then
		monster:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
		position:sendMagicEffect(CONST_ME_MAGIC_RED)
		if setFiendish then
			local monsterType = monster:getType()
			if monsterType and not monsterType:isForgeCreature() then
				player:sendCancelMessage("Only allowed monsters can be fiendish.")
				return false
			end
			monster:setFiendish(position, player)
		end
		if setInfluenced then
			local influencedMonster = Monster(ForgeMonster:pickInfluenced())
			-- If it's reached the limit, we'll remove one to add the new one.
			if ForgeMonster:exceededMaxInfluencedMonsters() then
				if influencedMonster then
					Game.removeInfluencedMonster(influencedMonster:getId())
				end
			end
			Game.addInfluencedMonster(monster)
			monster:setForgeStack(influencedLevel)
		end
	else
		player:sendCancelMessage("There is not enough room.")
		position:sendMagicEffect(CONST_ME_POFF)
	end
	return false
end

createMonster:separator(" ")
createMonster:register()

 

 

if not ForgeMonster then
	ForgeMonster = {
		timeLeftToChangeMonsters = {},
		names = {
			[FORGE_NORMAL_MONSTER] = 'influenced',
			[FORGE_INFLUENCED_MONSTER] = 'influenced',
			[FORGE_FIENDISH_MONSTER] = 'fiendish'
		},
		chanceToAppear = {
			fiendish = 80,
			influenced = 20
		},
		maxFiendish = 3,
		eventName = 'ForgeMonster'
	}
end

function getFiendishMinutesLeft(leftTime)
	local secLeft = leftTime - os.time()
	local desc = "This monster will stay fiendish for less than"

	if math.floor(secLeft / 60) >= 1 then
		desc = desc .. " " .. math.floor(secLeft / 60) .. " minutes and"
		secLeft = secLeft - math.floor(secLeft / 60) * 60
	end

	if secLeft < 60 then
		desc = desc .. " " .. secLeft .. " seconds."
	end
	return desc
end

function ForgeMonster:getTimeLeftToChangeMonster(creature)
	local monster = Monster(creature)
	if monster then
		local leftTime = monster:getTimeToChangeFiendish()
		leftTime = leftTime or 0
		return getFiendishMinutesLeft(leftTime)
	end
	return 0
end

function ForgeMonster:onDeath(creature, corpse, killer, mostDamageKiller, unjustified, mostDamageUnjustified)
	if not creature then
		return true
	end

	local stack = creature:getForgeStack()
	if stack > 0 then
		local party = nil
		if killer then
			if killer:isPlayer() then
				party = killer:getParty()
			elseif killer:getMaster() and killer:getMaster():isPlayer() then
				party = killer:getMaster():getParty()
			end
		end

		if party and party:isSharedExperienceEnabled() then
			local killers = {}
			local partyMembers = party:getMembers()

			for pid, _ in pairs(creature:getDamageMap()) do
				local creatureKiller = Creature(pid)
				if creatureKiller and creatureKiller:isPlayer() then
					if not isInArray(killers, creatureKiller) and isInArray(partyMembers, creatureKiller) then
						table.insert(killers, creatureKiller)
					end
				end
			end

			for i = 1, #killers do
				local playerKiller = killers[i]
				if playerKiller then
					-- Each stack can multiplied from 1x to 3x
					-- Example monster with 5 stack and system randomize multiplier 3x, players will receive 15x dusts

					local amount = math.random(stack, 3 * stack)

					local totalDusts = playerKiller:getForgeDusts()
					local limitDusts = playerKiller:getForgeDustLevel()

					if totalDusts < limitDusts then
						if totalDusts + amount > limitDusts then
							playerKiller:addForgeDusts(limitDusts - totalDusts)
						else
							playerKiller:addForgeDusts(amount)
						end

						local actualTotalDusts = playerKiller:getForgeDusts()
						playerKiller:sendTextMessage(MESSAGE_EVENT_ADVANCE,
						"You received " .. amount .. " dust" ..
						" for the Exaltation Forge. You now have " .. actualTotalDusts .. " out of a maximum of " ..
						limitDusts .. " dusts.")
					else
						playerKiller:sendTextMessage(MESSAGE_EVENT_ADVANCE,
						"You did not receive " .. amount .. " dust" ..
						" for the Exaltation Forge because you have already reached the maximum of " .. limitDusts .. " dust.")
					end
				end
			end
		else
			local playerKiller = nil

			if killer then
				if killer:isPlayer() then
					playerKiller = killer
				elseif killer:getMaster() and killer:getMaster():isPlayer() then
					playerKiller = killer:getMaster()
				end
			end

			if playerKiller then
				-- Each stack can multiplied from 1x to 3x
				-- Example monster with 5 stack and system randomize multiplier 3x, players will receive 15x dusts

				local amount = math.random(stack, 3 * stack)

				local totalDusts = playerKiller:getForgeDusts()
				local limitDusts = playerKiller:getForgeDustLevel()

				if totalDusts < limitDusts then
					if totalDusts + amount > limitDusts then
						playerKiller:addForgeDusts(limitDusts - totalDusts)
					else
						playerKiller:addForgeDusts(amount)
					end

					local actualTotalDusts = playerKiller:getForgeDusts()
					playerKiller:sendTextMessage(MESSAGE_EVENT_ADVANCE,
					"You received " .. amount .. " dust" ..
					" for the Exaltation Forge. You now have " .. actualTotalDusts .. " out of a maximum of " ..
					limitDusts .. " dusts.")
				else
					playerKiller:sendTextMessage(MESSAGE_EVENT_ADVANCE,
					"You did not receive " .. amount .. " dust" ..
					" for the Exaltation Forge because you have already reached the maximum of " .. limitDusts .. " dust.")
				end
			end
		end
	end
	return true
end

function ForgeMonster:onSpawn(creature)
	local monster = Monster(creature)
	if not monster then
		return false
	end

	local monsterType = monster:getType()
	if not monsterType then
		return false
	end

	local pos = monster:getPosition()
	local tile = Tile(pos)
	if tile and tile:hasFlag(TILESTATE_NOLOGOUT) then
		return false
	end

	Game.addInfluencedMonster(monster)
end

function ForgeMonster:pickFiendish()
	for _, cid in pairs(Game.getFiendishMonsters()) do
		if Monster(cid) then
			return cid
		end
	end
	return 0
end

function ForgeMonster:pickInfluenced()
	for _, cid in pairs(Game.getInfluencedMonsters()) do
		if Monster(cid) then
			return cid
		end
	end
	return 0
end

function ForgeMonster:pickClosestFiendish(creature)
	local player = Player(creature)
	if not player then
		return 0
	end

	local creatures = {}

	local playerPosition = player:getPosition()
	for _, cid in pairs(Game.getFiendishMonsters()) do
		if (Monster(cid)) then
			creatures[#creatures + 1] = {cid = cid, distance = Monster(cid):getPosition():getDistance(playerPosition)}
		end
	end

	if (#creatures == 0) then
		return false
	end

	table.sort(creatures, function(a, b)
		return a.distance < b.distance
	end)
	return creatures[1].cid
end

function ForgeMonster:exceededMaxInfluencedMonsters()
	local totalMonsters = 0
	for _, cid in pairs(Game.getInfluencedMonsters()) do
		if Monster(cid) then
			totalMonsters = totalMonsters + 1
		end
	end
	local configMaxMonsters = configManager.getNumber(configKeys.FORGE_INFLUENCED_CREATURES_LIMIT)
	if totalMonsters >= configMaxMonsters then
		return true
	end
	return false
end

 

Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...