Ir para conteúdo

Ed.Specter

Membro
  • Registro em

  • Última visita

Tudo que Ed.Specter postou

  1. posta o npc. faço pra vc. fiz aqui, não testei tudo... testa tudo ai, e se achar qualquer bug me avisa! desculpem a bagunça, faz um tempo que não faço um script assim.. em data/talkactions/scripts cria um arquivo lua e coloca isso dentro: em talkactions.xml coloca a tag: talkaction words="!transferir(ou oq vc desejar)" event="script" value="NomeDoArquivo.lua"/> em data/actions/scripts cria um arquivo.lua e coloca isso dentro: em actions.xml coloca a tag: <action itemid="2161(id do item)" script="NomeDoArquivo.lua"/> ai é só colocar o item pra vender no npc, ou como você desejar que os players consigam o item.
  2. adiciona a função que citei. e vê se funciona esse aqui: talkactions function onSay(cid, words, param, param2, channel) local t = string.explode(param, ",") local target = getCreatureByName(t[1]) local points = tonumber(t[2]) local item = 2233 local storage = 21223 if(param == '') then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.") end if (target ~= nil) and isPlayer(target) and not isPlayerGhost(target) then if (points ~= nil) and (type(points) == 'number') and (points>0) then if getPlayerVipPoints(cid) > points then local addItem = doPlayerAddItem(cid, item, 1) doStartTrade(cid, target, addItem) doItemSetAttribute(addItem, "description", "Transferência de "..points.." premium points.") doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você deu trade no jogador "..getPlayerName(target)..", com a intenção de trocar "..points.." premium points.") doPlayerSendTextMessage(target, MESSAGE_INFO_DESCR, "O Jogador "..getPlayerName(cid).." deu trade em você, e está disposto a trocar "..points.." premium points.") setPlayerStorageValue(cid, storage, points) else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você não tem essa quantidade de premium points.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.") end return true end creaturescripts: function onTradeAccept(cid, target, item) local storage = 21223 local sto = getPlayerStorageValue(cid, storage) if sto > 0 then doPlayerRemoveVipPoints(cid, sto) doPlayerAddVipPoints(target, sto) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você trocou "..sto.." premium points, Parabéns.") doPlayerSendTextMessage(target, MESSAGE_STATUS_CONSOLE_BLUE, "Você realizou uma troca e adquiriu "..sto.." premium points, Parabéns.") setPlayerStorageValue(cid, storage, 0) end return true end nesse caso você vai usar !trade NomeDoOutroPlayer, Quantidade de points. Exemplo: !trade Eduardo, 3 acho que deu pra ter uma boa base de como funciona.. não entendi direito esse do npc
  3. não amigo, esse que mandei n serve para checar se o player tem a storage 13901, ele checa se o player tem premium.. esse 13901, é a uniqueid que você coloca no tile, você terá que fazer o mesmo colocando storage no script de premium. faz um teste, coloca o script que te mandei, e coloca a uniqueid no tile. tenta passar com um player que tem premium, e outro que n tem.
  4. é melhor usar um script pra checar o premium.. em data/movements/scripts cria um arquivo lua e coloca isso dentro: e em data/movements/movements.xml coloca a seguinte tag: <movevent type="StepIn" uniqueid="13901" event="script" value="Nome Do Arquivo.lua"/> no rme coloca o numero da uniqueid no tile que o player vai conseguir passar ou n. a mesma da tag.
  5. nesse caso ai o player vai entrar mesmo se estiver com o amulet na bp. getPlayerItems não retorna todos os itens do jogador? acho que seria melhor usar getPlayerSlotItem
  6. não entendeu! rsr ou eu não te entendi. é só fazer o script com essa função ai que te passei. vc vai falar o comando e vai simular o trade, com o item que colocar na função. se precisar de ajuda, vai pedindo aqui.
  7. não entendi. a função doStartTrade precisa de um item. você vai usar o talkactions pra chamar o trade, tipo [ !trade Player, 4 ] no caso, vai da trade no player para trocar 4 pontos. ae a TradeAccept para fazer acontecer a troca, quando eles aceitarem. você vai usar o talkaction como um trade, coloca todas as condições nele.
  8. Em luascript.h, adicione essa linha: static int32_t luaDoStartTrade(lua_State* L); coloca abaixo de linhas parecidas. Em luascript.cpp, adicione isso: //doStartTrade(cid, target, item) lua_register(m_luaState, "doStartTrade", LuaInterface::luaDoStartTrade); coloca perto de linhas parecidas. e em luascript.cpp ainda. coloca isso também: (perto de algo parecido) int32_t LuaInterface::luaDoStartTrade(lua_State* L) { ScriptEnviroment* env = getEnv(); Item* item = env->getItemByUID(popNumber(L)); if(!item) { errorEx(getError(LUA_ERROR_ITEM_NOT_FOUND)); lua_pushboolean(L, false); return 1; } Player* target = env->getPlayerByUID(popNumber(L)); Player* player = env->getPlayerByUID(popNumber(L)); if(!player || !target) { errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); return 1; } if(g_game.internalStartTrade(player, target, item)) { lua_pushboolean(L, true); return 1; } return 1; } todos os créditos da função para OneShot! exemplo de uso: local item = doPlayerAddItem(cid, 1234) doStartTrade(cid, target, item) dai é só criar um talkactions, usa como base esse que você comentou ai. e cria um onTradeAccept(cid, target, item). o talkactions para chamar a função doStartTrade, que vai simular o trade, e o tradeAccept para quando o trade for aceito.
  9. Oneshot criou uma função doStartTrade(cid, target, item) que simula o trade, é só colocar a função na source e criar o código em lua, é bem simples na verdade.
  10. que funções ? kkk
  11. testa o que eu mandei
  12. eu tenho toc. Não consigo, não usar _
  13. @Liane Maria testa isso aqui.. local config = { [2001] = {pos = {x=1000, y=1000, z=1}, storage = 1001}, -- [actionid], pos= aonde que leva, storage [2002] = {pos = {x=1000, y=1000, z=2}, storage = 1002}, [2003] = {pos = {x=1000, y=1000, z=3}, storage = 1003}, [2004] = {pos = {x=1000, y=1000, z=4}, storage = 1004}, [2005] = {pos = {x=1000, y=1000, z=5}, storage = 1005}, [2006] = {pos = {x=1000, y=1000, z=6}, storage = 1006}, } local ultimoTeleport = {x=1000, y=1000, z=7} -- ultimo teleport para aonde que leva function onStepIn(player, item, position, fromPosition) if item.actionid ~= 2007 then for _, p in pairs(config) do if player:getStorageValue(p.storage) < 1 then if _ == item.actionid then player:setStorageValue(p.storage, 1) player:teleportTo(p.pos) player:getPosition():sendMagicEffect(CONST_ME_TELEPORT) else player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa passar pelo teleport anterior.") player:teleportTo(fromPosition) end break end end else player:teleportTo(ultimoTeleport) player:getPosition():sendMagicEffect(CONST_ME_TELEPORT) end return true end coloca todas as tags no movements.xml, e coloca a actionid de acada teleporte nos mesmos, igual vc colocou na tag.
  14. como você configurou? o script não roda ou da erro ?
  15. em movements/scripts.. adiciona aa tags, e coloca o actionid nos teleportes.
  16. testa isso aqui, não testei.. local config = { [2001] = {pos = {x=1000, y=1000, z=1}, storage = 1001}, -- [actionid], pos= aonde que leva, storage [2002] = {pos = {x=1000, y=1000, z=2}, storage = 1002}, [2003] = {pos = {x=1000, y=1000, z=3}, storage = 1003}, [2004] = {pos = {x=1000, y=1000, z=4}, storage = 1004}, [2005] = {pos = {x=1000, y=1000, z=5}, storage = 1005}, [2006] = {pos = {x=1000, y=1000, z=6}, storage = 1006}, } local ultimoTeleport = {x=1000, y=1000, z=7} -- ultimo teleport para aonde que leva function onStepIn(player, item, position, fromPosition) local t = config[item.actionid] if(t) then if player:getStorageValue(t.storage) < 1 then player:setStorageValue(t.storage, 1) end player:teleportTo(t.pos) player:getPosition():sendMagicEffect(CONST_ME_TELEPORT) elseif(item.actionid == 2007) then for i = 1001, 1006 do if player:getStorageValue(i) < 1 then player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa passar por cima de todos os teleports.") player:teleportTo(fromPosition) return true end end player:teleportTo(ultimoTeleport) player:getPosition():sendMagicEffect(CONST_ME_TELEPORT) end return true end
  17. Não testei, e não lembro se math.random só retorna números inteiros. testa ae.. local items = { --id do item, quantidade, chance de ganhar [6527] = {quant = 1, chance = 0.1}, [8301] = {quant = 1, chance = 0.5}, -- deixa a chance nessa ordem, se quiser, altera a ordem dos item [8302] = {quant = 1, chance = 1} } function onUse(cid, item, frompos, item2, topos) if item.itemid == 10520 then local a = math.random(0, 1) for _, i in pairs(items) do if a <= i.chance then doPlayerAddItem(cid, _, i.quant) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você ganhou "..i.quant.." item(s) "..getItemNameById(_)..".") doSendMagicEffect(getCreaturePosition(cid), 25) break end end doRemoveItem(item.uid) end return true end

Informação Importante

Confirmação de Termo