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

Lua How to use it in default channel?

oliverarrow

Member
Joined
Jul 31, 2015
Messages
82
Reaction score
6
I hate flood on screen

How i can use it
Code:
doPlayerSendChannelMessage(pid, '', 'Loot of ' .. monster .. ': ' .. (ret ~= '' and ret or 'nothing'), TALKTYPE_CHANNEL_W, CHANNEL_PARTY)

To MSG only in channel default or server log, or another?
 
If you want this to be a message in default/server log instead of in the party channel, you can use doPlayerSendTextMessage.
Code:
doPlayerSendTextMessage(pid, MESSAGE_STATUS_DEFAULT, 'Loot of ' .. monster .. ': ' .. (ret ~= '' and ret or 'nothing'))
This will show the message in white in the server log, for default you can use the orange or blue message types.
 
If you want this to be a message in default/server log instead of in the party channel, you can use doPlayerSendTextMessage.
Code:
doPlayerSendTextMessage(pid, MESSAGE_STATUS_DEFAULT, 'Loot of ' .. monster .. ': ' .. (ret ~= '' and ret or 'nothing'))
This will show the message in white in the server log, for default you can use the orange or blue message types.

I try it, dont work bro :(

My mod
Code:
<?xml version="1.0" encoding="UTF-8"?>
<mod name="Loot Ring" version="1.0" author="Cykotitan" contact="otland.net" enabled="yes">
<event type="kill" name="lootring" event="script"> <![CDATA[
local t = {
   item = 11393,
   slot = CONST_SLOT_NECKLACE,
   newRate = 2
}

local rate = getConfigInfo('rateLoot')

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(pid, MESSAGE_STATUS_DEFAULT, '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 t.newRate 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, lastHit)
if lastHit 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, getPlayerSlotItem(cid, t.slot).itemid == t.item)
end
addEvent(send, 100, cid, getThingPos(target), v.lookCorpse, v.description, getPlayerParty(cid))
end
end
return true
end
]]></event>
<event type="login" name="Loot Ring" event="buffer"><![CDATA[
registerCreatureEvent(cid, "lootring")
]]></event>
</mod>
 
pid is not defined atm, so you have to add it in the for loop where doPlayerSendChannelMessage is.

~~~~
for _, pid in ipairs(getPartyMembers(party)) do
~~~~

It's defined there, it gets the creatureids of all partymembers.
 
pid is not defined atm, so you have to add it in the for loop where doPlayerSendChannelMessage is.

~~~~
for _, pid in ipairs(getPartyMembers(party)) do
~~~~

It's defined there, it gets the creatureids of all partymembers.

I found a better command:
Code:
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED,'Loot of ' .. monster .. ': ' .. (ret ~= '' and ret or 'nothing') )

How to use it to work in my new channel:
Code:
<channel id="20" name="Loot"/>
 
how to put this msg
Code:
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED,'Loot of ' .. monster .. ': ' .. (ret ~= '' and ret or 'nothing') )

On this channel
Code:
<channel id="20" name="Loot"/>

?????????????????
 
You have to use the channel message then, so doPlayerSendChannelMessage instead of doPlayerSendTextMessage and 20 instead of CHANNEL_PARTY.
Channel message types you can choose.
Code:
TALKTYPE_CHANNEL_Y -- yellow
TALKTYPE_CHANNEL_W -- white
TALKTYPE_CHANNEL_RN -- red
TALKTYPE_CHANNEL_O -- orange
TALKTYPE_CHANNEL_RA -- red
 
Back
Top