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

MOD for prem loot gain

MadMOOK

Hoo
Joined
Apr 20, 2011
Messages
802
Reaction score
44
[8.60] - The Forgotten Server v0.3.7 (Crying Damson)
Here is my issue..

error2.jpg

LUA:
<?xml version="1.0" encoding="UTF-8"?>
<mod name="Premium Loot Rate" version="1.0" author="Cykotitan" contact="otland.net" enabled="yes">
	<event type="kill" name="plr" event="script"> <=!=[=C=D=A=T=A=[
local premRate = 7 -- loot rate for premium players
 
local rate = getConfigInfo('rateLoot') -- the normal rate, don't change
 
function getContentDescription(uid, comma)
	local ret, i, containers = '', 0, {}
	while i < getContainerSize(uid) do
		local v, s = getContainerItem(uid, i), ''
		local k = getItemInfo(v.itemid)
		if k.name ~= '' then
			if v.type > 1 and k.stackable and k.showCount then
				s = v.type .. ' ' .. getItemInfo(v.itemid).plural
			else
				local article = k.article
				s = (article == '' and '' or article .. ' ') .. k.name
			end
			ret = ret .. (i == 0 and not comma and '' or ', ') .. s
			if isContainer(v.uid) and getContainerSize(v.uid) > 0 then
				table.insert(containers, v.uid)
			end
		else
			ret = ret .. (i == 0 and not comma and '' or ', ') .. 'an item of type ' .. v.itemid .. ', please report it to gamemaster'
		end
		i = i + 1
	end
	for i = 1, #containers do
		ret = ret .. getContentDescription(containers[i], true)
	end
	return ret
end
 
local function send(cid, pos, corpseid, monster, party)
	local corpse = getTileItemById(pos, corpseid).uid
	local ret = isContainer(corpse) and getContentDescription(corpse)
	doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'Loot of ' .. monster .. ': ' .. (ret ~= '' and ret or 'nothing'))
	if party then
		for _, pid in ipairs(getPartyMembers(party)) do
			doPlayerSendChannelMessage(pid, '', 'Loot of ' .. monster .. ': ' .. (ret ~= '' and ret or 'nothing'), TALKTYPE_CHANNEL_W, CHANNEL_PARTY)
		end
	end
end
 
local function createLoot(i, ext)
	local item = type(i.id) == 'table' and i.id[math.random(#i.id)] or i.id
	local random = math.ceil(math.random(100000) / (ext and premRate or rate))
	local tmpItem
 
	if random < i.chance then
		tmpItem = doCreateItemEx(item, getItemInfo(item).stackable and random % i.count + 1 or 1)
	end
 
	if not tmpItem then
		return
	end
 
	if i.subType ~= -1 then
		doItemSetAttribute(tmpItem, 'subType', i.subType)
	end
 
	if i.actionId ~= -1 then
		doItemSetAttribute(tmpItem, 'aid', i.actionId)
	end
 
	if i.uniqueId ~= -1 then
		doItemSetAttribute(tmpItem, 'uid', i.uniqueId)
	end
 
	if i.text ~= '' then
		doItemSetAttribute(tmpItem, 'text', i.text)
	end
 
	return tmpItem
end
 
local function createChildLoot(parent, i, ext)
	if #i == 0 then
		return true
	end
 
	local size, cap = 0, getContainerCap(parent)
	for k = 1, #i do
		if size == cap then
			break
		end
		local tmp = createLoot(i[k], ext)
		if tmp then
			if isContainer(tmp) then
				if createChildLoot(tmp, i[k].child, ext) then
					doAddContainerItemEx(parent, tmp)
					size = size + 1
				else
					doRemoveItem(tmp)
				end
			else
				doAddContainerItemEx(parent, tmp)
				size = size + 1
			end
		end
	end
 
	return size > 0
end
 
local function dropLoot(pos, v, ext)
	local corpse = getTileItemById(pos, v.lookCorpse).uid
	if isContainer(corpse) then
		for i = 1, getContainerSize(corpse) do
			doRemoveItem(getContainerItem(corpse, 0).uid)
		end
		local size, cap = 0, getContainerCap(corpse)
		for i = 1, #v.loot do
			if size == cap then
				break
			end
			local tmp = createLoot(v.loot[i], ext)
			if tmp then
				if isContainer(tmp) then
					if createChildLoot(tmp, v.loot[i].child, ext) then
						doAddContainerItemEx(corpse, tmp)
						size = size + 1
					else
						doRemoveItem(tmp)
					end
				else
					doAddContainerItemEx(corpse, tmp)
					size = size + 1
				end
			end
		end
	end
end
 
function onKill(cid, target, damage, flags)
	if isInArray({1,3}, flags) and isMonster(target) then
		local v = getMonsterInfo(getCreatureName(target))
		if v.lookCorpse > 0 then
			local master = getCreatureMaster(target)
			if not master or master == target then
				addEvent(dropLoot, 0, getThingPos(target), v, isPremium(cid))
			end
			addEvent(send, 100, cid, getThingPos(target), v.lookCorpse, v.description, getPlayerParty(cid))
		end
	end
	return true
end
	]=]=></event>
<event type="login" name="Premium Loot Rate" event="buffer"><=!=[=C=D=A=T=A=[
	registerCreatureEvent(cid, 'plr')
]=]=></event>
</mod>
 
Last edited:
Where is the pic?

22419d1377571765-mod-prem-loot-gain-error2.jpg
 
i figured it out lol gotta make
Code:
<=!=[=C=D=A=T=A=[
,
this
Code:
<![CDATA[
... and this
Code:
]=]=></event>
to this
Code:
]]></event>
Why did u put = signs in weird places?
 
Back
Top