BO
tfs 1.0

Bug? script drop item message - by zipter

Por Bodak Reborn, 28 de abr. de 2016 em Scripts

8
1.3k
28 de abril de 2016 às 08:22

@zipter98, desculpa incomodar, but, o script não funciona para mim... ele funciona no pda? Eu dei print (numero) em diversas linhas para saber onde estava o erro e tentar corrigir, mas não printa nada ao dropar o item.

Eu coloquei a tag, o script em creaturescripts e registrei no login.lua, mas não acontece nada ao dropar o item. Nada mesmo, sem bug na distro, nada...

 

Obrigado pela atenção! =):

Editado Abril 28 por Bodak Reborn

zipter98Z
28 de abril de 2016 às 15:32

O PDA já possui um código de função muito semelhante. Procure pelo arquivo dropStone.lua, em data/creaturescripts/scripts.

28 de abril de 2016 às 19:40

Muito obrigado, @zipter98!

Eu achei o arquivo e adaptei para quando dropar uma Fire Stone, mandar um broadcast.

Achei estranho o fato de quando eu usava a função "getCreatureName(cid)" na mensagem do broadcast, aparecia o nome do meu pokémon, não o meu. Então eu fiz com a variável "myname".

Bom, está funcionando, mas está dando alguns erros.

Ao dropar o item, a mensagem é enviada, mas depois que você dropa o item algumas vezes, são enviadas duas ou três mensagens e a maioria das vezes, é enviado mensagem mesmo sem ter dropado o item.

Agradeço, novamente.

 

Esqueci de postar o script ISADHIASDHUSAID

Aqui:

Spoiler
local function dropMessage(cid, pos, itens, myname, name)	if not isCreature(cid) then return true end	for i = 1, 255 do		pos.stackpos = i		local item = getTileThingByPos(pos)		if item.uid ~= 0 then			if isContainer(item.uid) then				if isContainer(item.uid) and getContainerSize(item.uid) > 0 then					for slot=0, (getContainerSize(item.uid)-1) do						local item = getContainerItem(item.uid, slot)						if isInArray(itens, item.itemid) then							print(1)							broadcastMessage('MENSAGEM LOOT: O jogador '..myname..' dropou uma '..getItemNameById(item.itemid)..' de um '..name..'.')						end					end				end			end		end	endreturn trueendfunction onKill(cid, target)	local itens = {11447}	if ehMonstro(target) and isPlayer(cid) then		local pos = getThingPos(target)		local myname = getCreatureName(cid)		local name = getCreatureName(target)		local pid = getCreatureSummons(cid)[1]		addEvent(dropMessage, 150, pid, pos, itens, myname, name)	endreturn trueend

 

 

Editado Abril 28 por Bodak Reborn

zipter98Z
28 de abril de 2016 às 20:41

Hm, curioso. Mesmo não dropando o item, a mensagem que aparece informa o nome deste? 

De qualquer maneira, fiz algumas pequenas modificações no código:

 

 

local function dropMessage(cid, pos, itens, myname, name)    if not isCreature(cid) then return true end        for i = 1, 255 do        pos.stackpos = i        local item = getTileThingByPos(pos)                if item.uid ~= 0 then            if isContainer(item.uid) then                if isContainer(item.uid) and getContainerSize(item.uid) > 0 then                    for slot=0, (getContainerSize(item.uid)-1) do                        local _item = getContainerItem(item.uid, slot)                                                if _item.uid > 0 and isInArray(itens, _item.itemid) then                            print(1)                            broadcastMessage('MENSAGEM LOOT: O jogador '..myname..' dropou uma '..getItemNameById(_item.itemid)..' de um '..name..'.')                            return true                        end                    end                end            end        end    end    return trueendfunction onKill(cid, target)    local itens = {11447}    if ehMonstro(target) and isPlayer(cid) then        local pos = getThingPos(target)        local myname = getCreatureName(cid)        local name = getCreatureName(target)        local pid = getCreatureSummons(cid)[1]        addEvent(dropMessage, 150, pid, pos, itens, myname, name)    end    return trueend

 

 

Editado Abril 28 por zipter98

28 de abril de 2016 às 20:45

Editei lá, esqueci de colocar.. sorry

28 de abril de 2016 às 21:04

Mesmo erro, @zipter98.

Sim, na mensagem enviada, aparece "Fire Stone" mesmo dropando nothing.

Editado Abril 28 por Bodak Reborn

zipter98Z
29 de abril de 2016 às 13:24

Apenas para confirmar algumas coisas, teste o seguinte código, fundado naquele que mencionei primeiramente, e nos diga se o mesmo erro acontece:

 

 

local items, monster_function = {11447}, ehMonstro or isMonsterlocal function drop_item(cid, position, corpseid, player_name, monster_name)    if not isCreature(cid) then return true end    local corpse = getTileItemById(position, corpseid).uid        if corpse <= 1 then return end    if not isContainer(corpse) then return true end        for slot = 0, getContainerSize(corpse) - 1 do        local item = getContainerItem(corpse, slot)                if item.uid <= 1 then return end        if isInArray(items, item.itemid) then            broadcastMessage('MENSAGEM LOOT: O jogador '..player_name..' dropou uma '..getItemNameById(item.itemid)..' de um '..monster_name..'.')            return true        end    endendfunction onKill(cid, target, lastHit)    if not monster_function(target) then return true end    local m_name = getCreatureName(target)    local corpse = getMonsterInfo(m_name).lookCorpse    addEvent(drop_item, 5, getCreatureSummons(cid)[1], getThingPos(target), corpse, getCreatureName(cid), m_name)    return trueend

 

 

29 de abril de 2016 às 14:04

Perfeito, @zipter98.

Funcionou normalmente, sem bug nenhum.

Muito obrigado!

Seus códigos são incríveis! =D

 

Dúvida sanada, pode mover. =):

Editado Abril 29 por Bodak Reborn