Ir para conteúdo
  • Cadastre-se

(Resolvido)npc points Ajuda


Ir para solução Resolvido por Wakon,

Posts Recomendados

Testa:

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid
local shopWindow = {}
local t = {
[2195] = {price = 15},
[2493] = {price = 25},
[8931] = {price = 100}
}
local onBuy = function(cid, item, subType, amount, ignoreCap, inBackpacks)
if t[item] and getPoints(cid) < t[item].price then
selfSay("você não tem "..t[item].price.." points", cid)
else
doPlayerAddItem(cid, item)
doPlayerRemovePoints(cid, t[item].price)
selfSay("aqui está seu item!", cid)
end
return true
end
if (msgcontains(msg, 'trade') or msgcontains(msg, 'TRADE'))then
for var, ret in pairs(t) do
table.insert(shopWindow, {id = var, subType = 0, buy = ret.price, sell = 0, name = getItemNameById(var)})
end
openShopWindow(cid, shopWindow, onBuy, onSell)
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Link para o post
Compartilhar em outros sites

 

Testa:

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid
local shopWindow = {}
local t = {
[2195] = {price = 15},
[2493] = {price = 25},
[8931] = {price = 100}
}
local onBuy = function(cid, item, subType, amount, ignoreCap, inBackpacks)
if t[item] and getPoints(cid) < t[item].price then
selfSay("você não tem "..t[item].price.." points", cid)
else
doPlayerAddItem(cid, item)
doPlayerRemovePoints(cid, t[item].price)
selfSay("aqui está seu item!", cid)
end
return true
end
if (msgcontains(msg, 'trade') or msgcontains(msg, 'TRADE'))then
for var, ret in pairs(t) do
table.insert(shopWindow, {id = var, subType = 0, buy = ret.price, sell = 0, name = getItemNameById(var)})
end
openShopWindow(cid, shopWindow, onBuy, onSell)
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

funcionou, está removendo os points agora

Reputado !

 

poderia me ajudar em outra coisa ??

queria que o npc comprasse os mesmos itens que ele vende por points, teria como fazer isso ?

n35408.gif

Link para o post
Compartilhar em outros sites
  • Solução

Testa ai:

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid
local shopWindow = {}
local t = {
[2195] = {price = 15},
[2493] = {price = 25},
[8931] = {price = 100}
}

local onBuy = function(cid, item, subType, amount, ignoreCap, inBackpacks)
if t[item] and getPoints(cid) < t[item].price then
selfSay("você não tem "..t[item].price.." points", cid)
else
doPlayerAddItem(cid, item)
doPlayerRemovePoints(cid, t[item].price)
selfSay("aqui está seu item!", cid)
end
return true
end

local onSell = function(cid, item, subType, amount, ignoreCap, inBackpacks)
if getPoints(cid) >= 0 then
doPlayerRemoveItem(cid, item, 1)
doPlayerAddPoints(cid, t[item].price)
selfSay("Você vendeu o item por "..t[item].price.." points.", cid)
end
return true
end

if (msgcontains(msg, 'trade') or msgcontains(msg, 'TRADE'))then
for var, ret in pairs(t) do
table.insert(shopWindow, {id = var, subType = 0, buy = ret.price, sell = ret.price, name = getItemNameById(var)})
end
openShopWindow(cid, shopWindow, onBuy, onSell)
end
return true

end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Link para o post
Compartilhar em outros sites

funcionou cara, você é demais ><'

 

Reputado  :accept:

 

Ediit: no npc aparece que o item vale "ex: 20 golds" ao inves de points, isso eh normal ?

Editado por subhe (veja o histórico de edições)

n35408.gif

Link para o post
Compartilhar em outros sites

funcionou cara, você é demais ><'

 

Reputado  :accept:

 

Ediit: no npc aparece que o item vale "ex: 20 golds" ao inves de points, isso eh normal ?

Sim, esse é o "problema" desses sistemas, pois simula um trade e no padrão está para mostrar gold.

Link para o post
Compartilhar em outros sites

@subhe se sua dúvida/pedido foi sanado peço que marque o post do colega acima como melhor resposta pro tópico ficar como resolvido.

EQD4Qy4.gif

Link para o post
Compartilhar em outros sites

@wakon Tem alguma maneira de eu por este points para ser adquiridos em algum evento? Ou algo do tipo?

Link para o post
Compartilhar em outros sites

Tem sim, pode ver que ele adiciona novas funções ao servidor, então basta colocar a função de adicionar points:

doPlayerAddPoints(cid, 30)

Link para o post
Compartilhar em outros sites

Não conseguir entender de onde o premio vem dessas script, globalevents ou creatureevents. E aonde eu colocaria e como essa função??: doPlayerAddPoints(cid, 30)

 

GlobalEvents

 

local config = {    semana_mes = "semana",

    days = {1,2,3,4,5,6,7}, -- Dia das semanas que irá acontecer o evento
    goblet = 10127, -- Troféu que vai pro vencedor do evento
    rewards = {2195, 2152, 2160}, -- Recompensas. 
    moneyReward = {2160, 300, 1},-- {moneyId, quantidade, usar}1 pra usar 0 pra não usar}
 
 
 
 
    playerCount = 2001, -- Storage dos players que entram e sai do evento
    zombieCount = 2002, -- Storage do zombie do event
    teleportActionId = 2008, -- Action ID do teleport
    teleportPosition = {x = 162, y = 47, z = 7, stackpos = 1}, -- Onde o teleport é criado
    teleportToPosition = {x = 549, y = 131, z = 7}, -- Pra onde será teleportado
    teleportId = 1387, -- ID do teleporte
    timeToStartEvent = 2, -- Minutos que o portal irá ficar aberto até os player entrarem
    timeBetweenSpawns = 20, -- Segundos dps do evento ser startado começarem a aparecer os zombie
    zombieName = "event zombie", -- Nome do zombie sumonado
    playersNeededToStartEvent = 3, -- Players necessários pro evento ser iniciado
    
    -- Area que o zumbi vai spawnar
    fromPosition = {x = 523, y = 100, z = 7}, -- top de fromPosition até
    toPosition = {x = 587, y = 165, z = 7} -- -- em baixo toPostion
    }
 
 
function onTime()
    local time = os.date("*t")
    if (config.semana_mes == "semana" and isInArray(config.days,time.wday)) or (config.semana_mes == "mes" and isInArray(config.days,time.day)) or config.semana_mes == "" then
   local tp = doCreateTeleport(config.teleportId, config.teleportToPosition, config.teleportPosition)
   doItemSetAttribute(tp, "aid", config.teleportActionId)
   doBroadcastMessage("[Zombie-Event] Vai começar em " .. config.timeToStartEvent .. " minutos! O teleporte vai abrir no templo e sera fechado assim que o evento iniciar.", MESSAGE_STATUS_WARNING)
   setGlobalStorageValue(config.playerCount, 0)
   setGlobalStorageValue(config.zombieCount, 0)
   addEvent(startEvent, config.timeToStartEvent * 1000 * 60)
    end
    return TRUE
end
 
 
function startEvent()   
    
    local fromp, top = config.fromPosition, config.toPosition
 
 
    if getGlobalStorageValue(config.playerCount) >= config.playersNeededToStartEvent then
        addEvent(spawnZombie, config.timeBetweenSpawns * 1000)
        doBroadcastMessage("Boa sorte para os participantes! O portal foi fechado.", MESSAGE_STATUS_WARNING)
        
        for x = fromp.x, top.x do
            for y = fromp.y, top.y do
                for z = fromp.z, top.z do
                    areapos = {x = x, y = y, z = z, stackpos = 253}
                    getPlayers = getThingfromPos(areapos)
                    if isPlayer(getPlayers.uid) then
                        doPlayerSendTextMessage(getPlayers.uid, MESSAGE_EVENT_ADVANCE, "O primeiro Zombie vai aparecer em " .. config.timeBetweenSpawns .. " segundos! BOA SORTE!")
pvgaylord()
                    end
                end
            end
        end
    else
        doBroadcastMessage("The Zombie event could not start because of to few players participating.\n At least " .. config.playersNeededToStartEvent .. " players is needed!", MESSAGE_STATUS_WARNING)
        for x = fromp.x, top.x do
            for y = fromp.y, top.y do
                for z = fromp.z, top.z do
                    areapos = {x = x, y = y, z = z, stackpos = 253}
                    getPlayers = getThingfromPos(areapos)
                    if isPlayer(getPlayers.uid) then
                        doTeleportThing(getPlayers.uid, getTownTemplePosition(getPlayerTown(getPlayers.uid)), false)
                        doSendMagicEffect(getPlayerPosition(getPlayers.uid), CONST_ME_TELEPORT)
                    end
                end
            end
        end
    end
end
 
 
function spawnZombie()
    if getGlobalStorageValue(config.playerCount) >= 2 then
        pos = {x = math.random(config.fromPosition.x, config.toPosition.x), y = math.random(config.fromPosition.y, config.toPosition.y), z = math.random(config.fromPosition.z, config.toPosition.z)}
        doSummonCreature(config.zombieName, pos)
        doSendMagicEffect(pos, CONST_ME_MORTAREA)
        setGlobalStorageValue(config.zombieCount, getGlobalStorageValue(config.zombieCount)+1)
        doBroadcastMessage("Um Zombie nasceu, temos " .. getGlobalStorageValue(config.zombieCount) .. " Zombies no evento. Corram!", MESSAGE_STATUS_CONSOLE_RED)
        addEvent(spawnZombie, config.timeBetweenSpawns * 1000)
    else
local fromp, top = config.fromPosition, config.toPosition
        for x = fromp.x, top.x do
            for y = fromp.y, top.y do
                for z = fromp.z, top.z do
                    areapos = {x = x, y = y, z = z, stackpos = 253}
                    cid = getThingfromPos(areapos).uid
                    if isPlayer(cid) then
doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), false)
doBroadcastMessage(getCreatureName(cid)..' sobreviveu dos Zombie e venceu o evento.')
                   for _,items in ipairs(config.rewards) do
                 doPlayerAddItem(cid, items, 1)
      end
              if config.moneyReward[3] == 1 then
         doPlayerAddItem(cid, config.moneyReward[1], config.moneyReward[2])
         end
                 doBroadcastMessage(getPlayerName(cid) .. " venceu o Zombie Event! Parabens!", MESSAGE_STATUS_WARNING)
                 local goblet = doPlayerAddItem(cid, config.goblet, 1)
               doItemSetAttribute(goblet, "description", "Premio de " .. getPlayerName(cid) .. " por vencer o Zombie Event.")
   elseif isMonster(cid) then
doRemoveCreature(cid)
                    end
                end
            end
        end
    end
end
 
 
 
 
 
 
function pvgaylord()
local fromp, top, p, m = config.fromPosition, config.toPosition, 0, 0
for x = fromp.x, top.x do
            for y = fromp.y, top.y do
                for z = fromp.z, top.z do
                    local areapos = {x = x, y = y, z = z, stackpos = 253}
                    local cid = getThingfromPos(areapos).uid
                    if isPlayer(cid) then
p = p+1
   elseif isMonster(cid) then
m = m+1
                    end
                end
            end
        end
if p ~= getGlobalStorageValue(config.playerCount) then
setGlobalStorageValue(config.playerCount, p)
end
if p < 2 then
return true
end
addEvent(pvgaylord,100,nil)
end

CreatureEvents

 

local config = {

    playerCount = 2001, -- Storage dos players que entram e sai do evento
    goblet = 10127, -- Troféu que vai pro vencedor do evento
    rewards = {2195, 2152, 2160}, -- Recompensas.       
    moneyReward = {2160, 300, 1}, -- {moneyId, quantidade, usar}1 pra usar 0 pra não usar}
    
    -- Area que o zumbi vai spawnar
    fromPosition = {x = 523, y = 100, z = 7}, -- top de fromPosition até
    toPosition = {x = 587, y = 165, z = 7} -- em baixo toPostion
    }
 
 
function onStatsChange(cid, attacker, type, combat, value)
    if isPlayer(cid) and isMonster(attacker) then
        if isInArea(getPlayerPosition(cid), config.fromPosition, config.toPosition) then
            if getGlobalStorageValue(config.playerCount) >= 2 then
                doBroadcastMessage(getPlayerName(cid) .. " foi eliminado do event!", MESSAGE_STATUS_CONSOLE_BLUE)
                local corpse = doCreateItem(3058, 1, getPlayerPosition(cid))
                doItemSetAttribute(corpse, "description", "You recognize " .. getCreatureName(cid) .. ". He was killed by "..(isMonster(attacker) and "a "..string.lower(getCreatureName(attacker)) or isCreature(attacker) and getCreatureName(attacker) or "a field item")..".")
                doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
                doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), false)
                doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT)
                setGlobalStorageValue(config.playerCount, getGlobalStorageValue(config.playerCount)-1)
            elseif getGlobalStorageValue(config.playerCount) == 1 then
                if isInArea(getPlayerPosition(cid), config.fromPosition, config.toPosition) then
                    doBroadcastMessage(getPlayerName(cid) .. " venceu o Zombie Event! Parabens!", MESSAGE_STATUS_WARNING)
                    local goblet = doPlayerAddItem(cid, config.goblet, 1)
                    doItemSetAttribute(goblet, "description", "Premio de " .. getPlayerName(cid) .. " por vencer o Zombie Event.")
                    local corpse = doCreateItem(3058, 1, getPlayerPosition(cid))
                    doItemSetAttribute(corpse, "description", "Voce reconhece " .. getCreatureName(cid) .. "? Ele foi morto por "..(isMonster(attacker) and "a "..string.lower(getCreatureName(attacker)) or isCreature(attacker) and getCreatureName(attacker) or "a field item")..".")
                    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
                    doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), false)
                    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT)
                    for _,items in ipairs(config.rewards) do
                        doPlayerAddItem(cid, items, 1)
                    end
                    if config.moneyReward[3] == 1 then
                        doPlayerAddItem(cid, config.moneyReward[1], config.moneyReward[2])
                    end
                end
                        
                for x = config.fromPosition.x, config.toPosition.x do
                    for y = config.fromPosition.y, config.toPosition.y do
                        for z = config.fromPosition.z, config.toPosition.z do
                            areapos = {x = x, y = y, z = z, stackpos = 253}
                            getMonsters = getThingfromPos(areapos)
                            if isMonster(getMonsters.uid) then
                                doRemoveCreature(getMonsters.uid)
                            end
                        end
                    end
                end
            end
            return false
        end
    end
return true
end
Link para o post
Compartilhar em outros sites

Configurei pra você escolher os points ali na config, testa ai:

Global Events:

local config = {    semana_mes = "semana",
    days = {1,2,3,4,5,6,7}, -- Dia das semanas que irá acontecer o evento
    goblet = 10127, -- Troféu que vai pro vencedor do evento
    rewards = {2195, 2152, 2160}, -- Recompensas.
    moneyReward = {2160, 300, 1},-- {moneyId, quantidade, usar}1 pra usar 0 pra não usar}
    points = 30,
 
 
    playerCount = 2001, -- Storage dos players que entram e sai do evento
    zombieCount = 2002, -- Storage do zombie do event
    teleportActionId = 2008, -- Action ID do teleport
    teleportPosition = {x = 162, y = 47, z = 7, stackpos = 1}, -- Onde o teleport é criado
    teleportToPosition = {x = 549, y = 131, z = 7}, -- Pra onde será teleportado
    teleportId = 1387, -- ID do teleporte
    timeToStartEvent = 2, -- Minutos que o portal irá ficar aberto até os player entrarem
    timeBetweenSpawns = 20, -- Segundos dps do evento ser startado começarem a aparecer os zombie
    zombieName = "event zombie", -- Nome do zombie sumonado
    playersNeededToStartEvent = 3, -- Players necessários pro evento ser iniciado
    
    -- Area que o zumbi vai spawnar
    fromPosition = {x = 523, y = 100, z = 7}, -- top de fromPosition até
    toPosition = {x = 587, y = 165, z = 7} -- -- em baixo toPostion
    }
 
 
function onTime()
    local time = os.date("*t")
    if (config.semana_mes == "semana" and isInArray(config.days,time.wday)) or (config.semana_mes == "mes" and isInArray(config.days,time.day)) or config.semana_mes == "" then
   local tp = doCreateTeleport(config.teleportId, config.teleportToPosition, config.teleportPosition)
   doItemSetAttribute(tp, "aid", config.teleportActionId)
   doBroadcastMessage("[Zombie-Event] Vai começar em " .. config.timeToStartEvent .. " minutos! O teleporte vai abrir no templo e sera fechado assim que o evento iniciar.", MESSAGE_STATUS_WARNING)
   setGlobalStorageValue(config.playerCount, 0)
   setGlobalStorageValue(config.zombieCount, 0)
   addEvent(startEvent, config.timeToStartEvent * 1000 * 60)
    end
    return TRUE
end
 
 
function startEvent()   
    
    local fromp, top = config.fromPosition, config.toPosition
 
 
    if getGlobalStorageValue(config.playerCount) >= config.playersNeededToStartEvent then
        addEvent(spawnZombie, config.timeBetweenSpawns * 1000)
        doBroadcastMessage("Boa sorte para os participantes! O portal foi fechado.", MESSAGE_STATUS_WARNING)
        
        for x = fromp.x, top.x do
            for y = fromp.y, top.y do
                for z = fromp.z, top.z do
                    areapos = {x = x, y = y, z = z, stackpos = 253}
                    getPlayers = getThingfromPos(areapos)
                    if isPlayer(getPlayers.uid) then
                        doPlayerSendTextMessage(getPlayers.uid, MESSAGE_EVENT_ADVANCE, "O primeiro Zombie vai aparecer em " .. config.timeBetweenSpawns .. " segundos! BOA SORTE!")
pvgaylord()
                    end
                end
            end
        end
    else
        doBroadcastMessage("The Zombie event could not start because of to few players participating.\n At least " .. config.playersNeededToStartEvent .. " players is needed!", MESSAGE_STATUS_WARNING)
        for x = fromp.x, top.x do
            for y = fromp.y, top.y do
                for z = fromp.z, top.z do
                    areapos = {x = x, y = y, z = z, stackpos = 253}
                    getPlayers = getThingfromPos(areapos)
                    if isPlayer(getPlayers.uid) then
                        doTeleportThing(getPlayers.uid, getTownTemplePosition(getPlayerTown(getPlayers.uid)), false)
                        doSendMagicEffect(getPlayerPosition(getPlayers.uid), CONST_ME_TELEPORT)
                    end
                end
            end
        end
    end
end
 
 
function spawnZombie()
    if getGlobalStorageValue(config.playerCount) >= 2 then
        pos = {x = math.random(config.fromPosition.x, config.toPosition.x), y = math.random(config.fromPosition.y, config.toPosition.y), z = math.random(config.fromPosition.z, config.toPosition.z)}
        doSummonCreature(config.zombieName, pos)
        doSendMagicEffect(pos, CONST_ME_MORTAREA)
        setGlobalStorageValue(config.zombieCount, getGlobalStorageValue(config.zombieCount)+1)
        doBroadcastMessage("Um Zombie nasceu, temos " .. getGlobalStorageValue(config.zombieCount) .. " Zombies no evento. Corram!", MESSAGE_STATUS_CONSOLE_RED)
        addEvent(spawnZombie, config.timeBetweenSpawns * 1000)
    else
local fromp, top = config.fromPosition, config.toPosition
        for x = fromp.x, top.x do
            for y = fromp.y, top.y do
                for z = fromp.z, top.z do
                    areapos = {x = x, y = y, z = z, stackpos = 253}
                    cid = getThingfromPos(areapos).uid
                    if isPlayer(cid) then
doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), false)
doBroadcastMessage(getCreatureName(cid)..' sobreviveu dos Zombie e venceu o evento.')
                   for _,items in ipairs(config.rewards) do
                 doPlayerAddItem(cid, items, 1)
                 doPlayerAddPoints(cid, config.points)
      end
              if config.moneyReward[3] == 1 then
         doPlayerAddItem(cid, config.moneyReward[1], config.moneyReward[2])
         end
                 doBroadcastMessage(getPlayerName(cid) .. " venceu o Zombie Event! Parabens!", MESSAGE_STATUS_WARNING)
                 local goblet = doPlayerAddItem(cid, config.goblet, 1)
               doItemSetAttribute(goblet, "description", "Premio de " .. getPlayerName(cid) .. " por vencer o Zombie Event.")
   elseif isMonster(cid) then
doRemoveCreature(cid)
                    end
                end
            end
        end
    end
end
 
 
 
 
 
 
function pvgaylord()
local fromp, top, p, m = config.fromPosition, config.toPosition, 0, 0
for x = fromp.x, top.x do
            for y = fromp.y, top.y do
                for z = fromp.z, top.z do
                    local areapos = {x = x, y = y, z = z, stackpos = 253}
                    local cid = getThingfromPos(areapos).uid
                    if isPlayer(cid) then
p = p+1
   elseif isMonster(cid) then
m = m+1
                    end
                end
            end
        end
if p ~= getGlobalStorageValue(config.playerCount) then
setGlobalStorageValue(config.playerCount, p)
end
if p < 2 then
return true
end
addEvent(pvgaylord,100,nil)
end

 

CreatureEvents:

local config = {
    playerCount = 2001, -- Storage dos players que entram e sai do evento
    goblet = 10127, -- Troféu que vai pro vencedor do evento
    rewards = {2195, 2152, 2160}, -- Recompensas.       
    moneyReward = {2160, 300, 1}, -- {moneyId, quantidade, usar}1 pra usar 0 pra não usar}
    points = 30,
    
    -- Area que o zumbi vai spawnar
    fromPosition = {x = 523, y = 100, z = 7}, -- top de fromPosition até
    toPosition = {x = 587, y = 165, z = 7} -- em baixo toPostion
    }
 
 
function onStatsChange(cid, attacker, type, combat, value)
    if isPlayer(cid) and isMonster(attacker) then
        if isInArea(getPlayerPosition(cid), config.fromPosition, config.toPosition) then
            if getGlobalStorageValue(config.playerCount) >= 2 then
                doBroadcastMessage(getPlayerName(cid) .. " foi eliminado do event!", MESSAGE_STATUS_CONSOLE_BLUE)
                local corpse = doCreateItem(3058, 1, getPlayerPosition(cid))
                doItemSetAttribute(corpse, "description", "You recognize " .. getCreatureName(cid) .. ". He was killed by "..(isMonster(attacker) and "a "..string.lower(getCreatureName(attacker)) or isCreature(attacker) and getCreatureName(attacker) or "a field item")..".")
                doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
                doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), false)
                doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT)
                setGlobalStorageValue(config.playerCount, getGlobalStorageValue(config.playerCount)-1)
            elseif getGlobalStorageValue(config.playerCount) == 1 then
                if isInArea(getPlayerPosition(cid), config.fromPosition, config.toPosition) then
                    doBroadcastMessage(getPlayerName(cid) .. " venceu o Zombie Event! Parabens!", MESSAGE_STATUS_WARNING)
                    local goblet = doPlayerAddItem(cid, config.goblet, 1)
                    doItemSetAttribute(goblet, "description", "Premio de " .. getPlayerName(cid) .. " por vencer o Zombie Event.")
                    local corpse = doCreateItem(3058, 1, getPlayerPosition(cid))
                    doItemSetAttribute(corpse, "description", "Voce reconhece " .. getCreatureName(cid) .. "? Ele foi morto por "..(isMonster(attacker) and "a "..string.lower(getCreatureName(attacker)) or isCreature(attacker) and getCreatureName(attacker) or "a field item")..".")
                    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
                    doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), false)
                    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT)
                    for _,items in ipairs(config.rewards) do
                        doPlayerAddItem(cid, items, 1)
                        doPlayerAddPoints(cid, config.points)
                    end
                    if config.moneyReward[3] == 1 then
                        doPlayerAddItem(cid, config.moneyReward[1], config.moneyReward[2])
                    end
                end
                        
                for x = config.fromPosition.x, config.toPosition.x do
                    for y = config.fromPosition.y, config.toPosition.y do
                        for z = config.fromPosition.z, config.toPosition.z do
                            areapos = {x = x, y = y, z = z, stackpos = 253}
                            getMonsters = getThingfromPos(areapos)
                            if isMonster(getMonsters.uid) then
                                doRemoveCreature(getMonsters.uid)
                            end
                        end
                    end
                end
            end
            return false
        end
    end
return true
end

Link para o post
Compartilhar em outros sites

Configurei pra você escolher os points ali na config, testa ai:

Global Events:

local config = {    semana_mes = "semana",

    days = {1,2,3,4,5,6,7}, -- Dia das semanas que irá acontecer o evento

    goblet = 10127, -- Troféu que vai pro vencedor do evento

    rewards = {2195, 2152, 2160}, -- Recompensas.

    moneyReward = {2160, 300, 1},-- {moneyId, quantidade, usar}1 pra usar 0 pra não usar}

    points = 30,

 

 

    playerCount = 2001, -- Storage dos players que entram e sai do evento

    zombieCount = 2002, -- Storage do zombie do event

    teleportActionId = 2008, -- Action ID do teleport

    teleportPosition = {x = 162, y = 47, z = 7, stackpos = 1}, -- Onde o teleport é criado

    teleportToPosition = {x = 549, y = 131, z = 7}, -- Pra onde será teleportado

    teleportId = 1387, -- ID do teleporte

    timeToStartEvent = 2, -- Minutos que o portal irá ficar aberto até os player entrarem

    timeBetweenSpawns = 20, -- Segundos dps do evento ser startado começarem a aparecer os zombie

    zombieName = "event zombie", -- Nome do zombie sumonado

    playersNeededToStartEvent = 3, -- Players necessários pro evento ser iniciado

    

    -- Area que o zumbi vai spawnar

    fromPosition = {x = 523, y = 100, z = 7}, -- top de fromPosition até

    toPosition = {x = 587, y = 165, z = 7} -- -- em baixo toPostion

    }

 

 

function onTime()

    local time = os.date("*t")

    if (config.semana_mes == "semana" and isInArray(config.days,time.wday)) or (config.semana_mes == "mes" and isInArray(config.days,time.day)) or config.semana_mes == "" then

   local tp = doCreateTeleport(config.teleportId, config.teleportToPosition, config.teleportPosition)

   doItemSetAttribute(tp, "aid", config.teleportActionId)

   doBroadcastMessage("[Zombie-Event] Vai começar em " .. config.timeToStartEvent .. " minutos! O teleporte vai abrir no templo e sera fechado assim que o evento iniciar.", MESSAGE_STATUS_WARNING)

   setGlobalStorageValue(config.playerCount, 0)

   setGlobalStorageValue(config.zombieCount, 0)

   addEvent(startEvent, config.timeToStartEvent * 1000 * 60)

    end

    return TRUE

end

 

 

function startEvent()   

    

    local fromp, top = config.fromPosition, config.toPosition

 

 

    if getGlobalStorageValue(config.playerCount) >= config.playersNeededToStartEvent then

        addEvent(spawnZombie, config.timeBetweenSpawns * 1000)

        doBroadcastMessage("Boa sorte para os participantes! O portal foi fechado.", MESSAGE_STATUS_WARNING)

        

        for x = fromp.x, top.x do

            for y = fromp.y, top.y do

                for z = fromp.z, top.z do

                    areapos = {x = x, y = y, z = z, stackpos = 253}

                    getPlayers = getThingfromPos(areapos)

                    if isPlayer(getPlayers.uid) then

                        doPlayerSendTextMessage(getPlayers.uid, MESSAGE_EVENT_ADVANCE, "O primeiro Zombie vai aparecer em " .. config.timeBetweenSpawns .. " segundos! BOA SORTE!")

pvgaylord()

                    end

                end

            end

        end

    else

        doBroadcastMessage("The Zombie event could not start because of to few players participating.\n At least " .. config.playersNeededToStartEvent .. " players is needed!", MESSAGE_STATUS_WARNING)

        for x = fromp.x, top.x do

            for y = fromp.y, top.y do

                for z = fromp.z, top.z do

                    areapos = {x = x, y = y, z = z, stackpos = 253}

                    getPlayers = getThingfromPos(areapos)

                    if isPlayer(getPlayers.uid) then

                        doTeleportThing(getPlayers.uid, getTownTemplePosition(getPlayerTown(getPlayers.uid)), false)

                        doSendMagicEffect(getPlayerPosition(getPlayers.uid), CONST_ME_TELEPORT)

                    end

                end

            end

        end

    end

end

 

 

function spawnZombie()

    if getGlobalStorageValue(config.playerCount) >= 2 then

        pos = {x = math.random(config.fromPosition.x, config.toPosition.x), y = math.random(config.fromPosition.y, config.toPosition.y), z = math.random(config.fromPosition.z, config.toPosition.z)}

        doSummonCreature(config.zombieName, pos)

        doSendMagicEffect(pos, CONST_ME_MORTAREA)

        setGlobalStorageValue(config.zombieCount, getGlobalStorageValue(config.zombieCount)+1)

        doBroadcastMessage("Um Zombie nasceu, temos " .. getGlobalStorageValue(config.zombieCount) .. " Zombies no evento. Corram!", MESSAGE_STATUS_CONSOLE_RED)

        addEvent(spawnZombie, config.timeBetweenSpawns * 1000)

    else

local fromp, top = config.fromPosition, config.toPosition

        for x = fromp.x, top.x do

            for y = fromp.y, top.y do

                for z = fromp.z, top.z do

                    areapos = {x = x, y = y, z = z, stackpos = 253}

                    cid = getThingfromPos(areapos).uid

                    if isPlayer(cid) then

doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), false)

doBroadcastMessage(getCreatureName(cid)..' sobreviveu dos Zombie e venceu o evento.')

                   for _,items in ipairs(config.rewards) do

                 doPlayerAddItem(cid, items, 1)

                 doPlayerAddPoints(cid, config.points)

      end

              if config.moneyReward[3] == 1 then

         doPlayerAddItem(cid, config.moneyReward[1], config.moneyReward[2])

         end

                 doBroadcastMessage(getPlayerName(cid) .. " venceu o Zombie Event! Parabens!", MESSAGE_STATUS_WARNING)

                 local goblet = doPlayerAddItem(cid, config.goblet, 1)

               doItemSetAttribute(goblet, "description", "Premio de " .. getPlayerName(cid) .. " por vencer o Zombie Event.")

   elseif isMonster(cid) then

doRemoveCreature(cid)

                    end

                end

            end

        end

    end

end

 

 

 

 

 

 

function pvgaylord()

local fromp, top, p, m = config.fromPosition, config.toPosition, 0, 0

for x = fromp.x, top.x do

            for y = fromp.y, top.y do

                for z = fromp.z, top.z do

                    local areapos = {x = x, y = y, z = z, stackpos = 253}

                    local cid = getThingfromPos(areapos).uid

                    if isPlayer(cid) then

p = p+1

   elseif isMonster(cid) then

m = m+1

                    end

                end

            end

        end

if p ~= getGlobalStorageValue(config.playerCount) then

setGlobalStorageValue(config.playerCount, p)

end

if p < 2 then

return true

end

addEvent(pvgaylord,100,nil)

end

 

CreatureEvents:

local config = {

    playerCount = 2001, -- Storage dos players que entram e sai do evento

    goblet = 10127, -- Troféu que vai pro vencedor do evento

    rewards = {2195, 2152, 2160}, -- Recompensas.       

    moneyReward = {2160, 300, 1}, -- {moneyId, quantidade, usar}1 pra usar 0 pra não usar}

    points = 30,

    

    -- Area que o zumbi vai spawnar

    fromPosition = {x = 523, y = 100, z = 7}, -- top de fromPosition até

    toPosition = {x = 587, y = 165, z = 7} -- em baixo toPostion

    }

 

 

function onStatsChange(cid, attacker, type, combat, value)

    if isPlayer(cid) and isMonster(attacker) then

        if isInArea(getPlayerPosition(cid), config.fromPosition, config.toPosition) then

            if getGlobalStorageValue(config.playerCount) >= 2 then

                doBroadcastMessage(getPlayerName(cid) .. " foi eliminado do event!", MESSAGE_STATUS_CONSOLE_BLUE)

                local corpse = doCreateItem(3058, 1, getPlayerPosition(cid))

                doItemSetAttribute(corpse, "description", "You recognize " .. getCreatureName(cid) .. ". He was killed by "..(isMonster(attacker) and "a "..string.lower(getCreatureName(attacker)) or isCreature(attacker) and getCreatureName(attacker) or "a field item")..".")

                doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)

                doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), false)

                doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT)

                setGlobalStorageValue(config.playerCount, getGlobalStorageValue(config.playerCount)-1)

            elseif getGlobalStorageValue(config.playerCount) == 1 then

                if isInArea(getPlayerPosition(cid), config.fromPosition, config.toPosition) then

                    doBroadcastMessage(getPlayerName(cid) .. " venceu o Zombie Event! Parabens!", MESSAGE_STATUS_WARNING)

                    local goblet = doPlayerAddItem(cid, config.goblet, 1)

                    doItemSetAttribute(goblet, "description", "Premio de " .. getPlayerName(cid) .. " por vencer o Zombie Event.")

                    local corpse = doCreateItem(3058, 1, getPlayerPosition(cid))

                    doItemSetAttribute(corpse, "description", "Voce reconhece " .. getCreatureName(cid) .. "? Ele foi morto por "..(isMonster(attacker) and "a "..string.lower(getCreatureName(attacker)) or isCreature(attacker) and getCreatureName(attacker) or "a field item")..".")

                    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)

                    doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), false)

                    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT)

                    for _,items in ipairs(config.rewards) do

                        doPlayerAddItem(cid, items, 1)

                        doPlayerAddPoints(cid, config.points)

                    end

                    if config.moneyReward[3] == 1 then

                        doPlayerAddItem(cid, config.moneyReward[1], config.moneyReward[2])

                    end

                end

                        

                for x = config.fromPosition.x, config.toPosition.x do

                    for y = config.fromPosition.y, config.toPosition.y do

                        for z = config.fromPosition.z, config.toPosition.z do

                            areapos = {x = x, y = y, z = z, stackpos = 253}

                            getMonsters = getThingfromPos(areapos)

                            if isMonster(getMonsters.uid) then

                                doRemoveCreature(getMonsters.uid)

                            end

                        end

                    end

                end

            end

            return false

        end

    end

return true

end

FUNCIONOUUUUUUUUUUUUU .  Obrigado, mais uma vez vc me ajudandooo *---*

Link para o post
Compartilhar em outros sites
  • 4 months later...

descupe reviver o post mas e que preciso muito de ajuda.

wakon estou usando este script do npc que vc citou acima. este que compra e vende itens por Ppoints.

e notei que quando agente vende o item para ele nao recebe os os Ppoints.ele ate retira o item do player mais quando falo !ppoints para ver o saldo nao tenho os points entendeu. se puder ajudar. e se tiver como vc alterar apenas uma coisa porfavor.eu queria que ele comprasse os mesmos itens que vende pelo dobro do preco.

segue abaixo o scrip que faei

 

[spolier/] local keywordHandler = KeywordHandler:new()

local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid
local shopWindow = {}
local t = {
[10310] = {price = 25},
[6512] = {price = 100},
[8926] = {price = 200},
[2390] = {price = 200},
[7450] = {price = 200},
[7424] = {price = 200},
[7438] = {price = 100},
[2352] = {price = 100},
[7440] = {price = 30},
[9693] = {price = 8},
}
 
local onBuy = function(cid, item, subType, amount, ignoreCap, inBackpacks)
if t[item] and getPoints(cid) < t[item].price then
selfSay("você não tem "..t[item].price.." p points", cid)
else
doPlayerAddItem(cid, item)
doPlayerRemovePoints(cid, t[item].price)
selfSay("aqui está seu item!", cid)
end
return true
end
 
local onSell = function(cid, item, subType, amount, ignoreCap, inBackpacks)
if getPoints(cid) >= 0 then
doPlayerRemoveItem(cid, item, 1)
doPlayerAddPoints(cid, t[item].price)
selfSay("Você vendeu o item por "..t[item].price.." p points.", cid)
end
return true
end
 
if (msgcontains(msg, 'trade') or msgcontains(msg, 'TRADE'))then
for var, ret in pairs(t) do
table.insert(shopWindow, {id = var, subType = 0, buy = ret.price, sell = ret.price, name = getItemNameById(var)})
end
openShopWindow(cid, shopWindow, onBuy, onSell)
end
return true
 
end
 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

[spolier]

Link para o post
Compartilhar em outros sites

Adicionou a função doPlayerAddPoints corretamente? Eu tinha testado esse script e funciona normalmente o sell.

Sobre a edição, tente assim:

local t = {
[10310] = {price = 25, sellprice = 50},
[6512] = {price = 100, sellprice = 200},
[8926] = {price = 200, sellprice = 400},
[2390] = {price = 200, sellprice = 400},
[7450] = {price = 200, sellprice = 400},
[7424] = {price = 200, sellprice = 400},
[7438] = {price = 100, sellprice = 200},
[2352] = {price = 100, sellprice = 200},
[7440] = {price = 30, sellprice = 60},
[9693] = {price = 8, sellprice = 16}
}

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}

function onCreatureAppear(cid)                 npcHandler:onCreatureAppear(cid)          end
function onCreatureDisappear(cid)              npcHandler:onCreatureDisappear(cid)       end
function onCreatureSay(cid, type, msg)         npcHandler:onCreatureSay(cid, type, msg)  end
function onThink()                             npcHandler:onThink()                      end

function creatureSayCallback(cid, type, msg)
    if(not npcHandler:isFocused(cid)) then
    return false
    end
    local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid

    local shopWindow = {}
    local onBuy = function(cid, item, subType, amount, ignoreCap, inBackpacks)
        if t[item] and getPoints(cid) < t[item].price then
            selfSay("Você não tem "..t[item].price.." p points.", cid)
        else
            doPlayerAddItem(cid, item)
            doPlayerRemovePoints(cid, t[item].price)
            selfSay("Aqui está seu item.", cid)
        end
       return true
    end
 
    local onSell = function(cid, item, subType, amount, ignoreCap, inBackpacks)
        if getPoints(cid) >= 0 then
            doPlayerRemoveItem(cid, item, 1)
            doPlayerAddPoints(cid, t[item].sellprice)
            selfSay("Você vendeu o item por "..t[item].price.." p points.", cid)
        end
       return true
    end
 
    if (msgcontains(msg, 'trade') or msgcontains(msg, 'TRADE'))then
        for var, ret in pairs(t) do
            table.insert(shopWindow, {id = var, subType = 0, buy = ret.price, sell = ret.price, name = getItemNameById(var)})
        end
       openShopWindow(cid, shopWindow, onBuy, onSell)
    end
   return true
end
 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new()) 

Link para o post
Compartilhar em outros sites

Vc consegue por tipo , pra vender o npc X100 Item por 1 Points? Por exemplo : Id 2160 Thousand Dollar, vender 100x Por 1 Points..?

 

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo