Ir para conteúdo

Djonga

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Obrigado
    Djonga recebeu reputação de Lucif3r em Xampp Erro   
    cheque se no caminho informado no erro está a pasta do seu Apache, provavelmente ao instalar você colocou um caminho e o programa tá configurado pra outro, causando esse conflito. 
    espero ter ajudado!
  2. Obrigado
    Gente o erro é o seguinte, quando você sobre numa elevação e abre seu poke e solta aqueles moves que atinge vários sqm o servidor fica travando pois alguns sqm são considerados como inexistentes no mapa.
     
    então pra vc fazer a correção é só abrir o arquivo data\lib\newStatusSyst.lua e adicionar as linhas que eu vou marcar em vermelho que vão aparecer quando estiver chegando perto do final do arquivo (obs, faça backup do seu arquivo antes das edições!)
  3. Obrigado
    Djonga deu reputação a marcot em (Resolvido)pedido script held fusion   
    @Danxi
    Eu testei um pouco o sistema e a princípio parece que funcionou. Gostaria que você testasse adequadamente e, caso encontre algum bug, me mande aqui nessa mesma página que vou tentar corrigir.
     
    Nome:
    Fusão de Held Item Testado em:
    The Forgotten Server 0.4 Como instalar:
    1) Cole a tag em data/actions/actions.xml 2) Crie um arquivo chamado "heldFusion.lua" em data/actions/scripts e cole o "script" dentro dele 3) Vá no map editor de sua preferência, crie um contêiner e um ativador (nos testes usei uma alavanca), guarde a posição do contêiner, pois será necessário na configuração do script. 4) Ainda no map editor, coloque o actionID 10001 no ativador Pronto! Tag:
    <action actionid = "10001" event = "script" value = "heldFusion.lua" /> Script:
    -- Held Fusion 0.1 by Marcot -- Se encontrou algum erro no script, favor enviar PM explicando os erros -- http://www.tibiaking.com/forum/profile/120572-marcot/ -- Configuracoes necessarias para o script local config = { quest = { -- Precisa fazer quest? (Nao mexa caso negativo) necessaria = false, -- Eh necessario fazer uma quest para liberar o sistema? storageID = 10001, -- Qual o storageID dessa quest? (caso true, anteriormente) }, chestPos = {x = 92, y = 114, z = 7, stackpos = 1}, -- Posicao do Bau (certifique-se que nao tenha nada encima dele) -- Tenha atencao para que a soma das chances dos helds em cada tier seja igual a 100 helds = { -- Item IDs e chance de vir o held [1] = { -- Array Tier 1 {ID = 2159, chance = 10}, {ID = 2160, chance = 80}, {ID = 2158, chance = 10}, }, [2] = { -- Array Tier 2 {ID = 2000, chance = 20}, {ID = 2001, chance = 20}, {ID = 2002, chance = 20}, {ID = 2003, chance = 20}, {ID = 2004, chance = 20}, }, [3] = { -- Array Tier 3 }, [4] = { -- Array Tier 4 }, [5] = { -- Array Tier 5 }, [6] = { -- Array Tier 6 }, [7] = { -- Array Tier 7 }, }, } function onUse(cid, item, fromPosition, itemEx, toPosition) if config.quest.necessaria and getPlayerStorageValue (cid, config.quest.storageID) == 0 then -- Erro caso a pessoa use a maquina sem ter feito a quest -- Valido apenas quando a opcao esta ativada doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You don\'t have permission to use this machine.") return false end items = {nil, nil, nil} container = getThingFromPos(config.chestPos) for i = 0, 2 do items[i + 1] = getContainerItem (container.uid, i) if items [i + 1].itemid == 0 or items [i + 1].itemid == nil then -- Erro quando tem menos de 3 itens no bau doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You need 3 held items to fuse.") return false end end heldType = {nil, nil, nil} for j=1, 3 do for i=1, 7 do for k = 1, #config.helds[i] do if config.helds[i][k].ID == items[j].itemid then heldType[j] = i end end end if heldType [j] == nil then -- Erro a ser exibido caso o jogador coloque algum item que nao seja um held na maquina doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "This machine works only to held items.") return false end end if heldType[1] ~= heldType[2] or heldType[2] ~= heldType[3] then -- Erro a ser exibido caso o jogador coloque helds de tiers diferentes doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You need helds with the same tier.") return false elseif heldType[1] == 7 or heldType[2] == 7 or heldType[3] == 7 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You cannot fuse tier 7 held items.") return false end -- Sortear qual held vira for i = 1, 3 do doRemoveItem(items[i].uid, 1) end tierSorteado = heldType[1] + 1 numeroSorte = math.random(1, 100) itemIDSorteado = sorteiaValor (tierSorteado, numeroSorte) doPlayerAddItem(cid, itemIDSorteado, 1) -- Mensagem exibida ao fundir com sucesso doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You received your new held item.") return true end -- Função retirada de https://pt.stackoverflow.com/questions/147884/sorteio-aleat%C3%B3rio-mas-com-diferentes-probabilidades function sorteiaValor (tierSorteado, numeroSorte) x = numeroSorte for i = 1, #config.helds[tierSorteado] do x = x - config.helds[tierSorteado][i].chance if x <= 0 then return config.helds[tierSorteado][i].ID end end end  
     
    Caso queira personalizar as mensagens eu deixei comentários encima de cada mensagem explicando quando são executadas, desculpe pelo meu inglês fisk, só consigo ler, quando vou escrever é um desastre. 
     
    P.S.: Note que o script só olha os 3 primeiros itens de dentro do contêiner, portanto, cabe ao utilizador do script limitar o slot desse contêiner para 3.
     
    [EDIT] Link para compreender a configuração do stackpos: 
     
  4. Gostei
    Djonga deu reputação a marcot em (Resolvido)pedido script held fusion   
    Não faz sentido, o stackpos 255 corresponde ao item mais acima do stack de um SQM, se ele imprime o chão então teoricamente não tem nada acima dele.
     
    Troque o stackpos para 1 e certifique-se se a posição está realmente correta (a mesma posiçao que você deu look e apareceu que possui 3 slots)
  5. Obrigado
    Djonga recebeu reputação de BangBang em Poke System   
    poste o seu creaturescripts/player/pokedeath.lua
  6. Gostei
    Djonga recebeu reputação de tavarb em (Resolvido)[AJUDA] Pokémon Icon   
    lib/configuration.lua 
     
    procura uma linha parecida com isso
    ["makuhita"] = {effect = 188, on = 14950, use = 14951, off = 14951, all = {14950, 14951}}, on= sprite do pokémon vivo
    use= sprite do pokémon vivo mas pra fora da pokeball
    off= sprite do pokémon morto
  7. Obrigado
    Djonga deu reputação a Refe em Adicionando Tiles a janela de jogo!   
    Hoje eu vim ensinar como aumenta a "tela" de jogo do OTCLIENT

    (Desculpe o merchant, era a unica imagem que eu tinha salvo)
     
    Testado em : 0.3.6pl1, Pode funcionar em 1.0 com alterações pequenas.
     
     
    Agora ache e troque:
    return ((x >= myPos.x - 8 + offsetz) && (x <= myPos.x + 9 + offsetz) && (y >= myPos.y - 6 + offsetz) && (y <= myPos.gety + 7 + offsetz)); Por:
    return ((x >= myPos.x - Map::maxClientViewportX + offsetz) && (x <= myPos.x + (Map::maxClientViewportX+1) + offsetz) && (y >= myPos.y - Map::maxClientViewportY + offsetz) && (y <= myPos.y + (Map::maxClientViewportY+1) + offsetz)); Agora ache:
    GetMapDescription(pos.x - 8, pos.y - 6, pos.z, 18, 14, msg); E troque por:
    GetMapDescription(pos.x - Map::maxClientViewportX, pos.y - Map::maxClientViewportY, pos.z, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, msg); Agora em
    void ProtocolGame::sendMoveCreature(const Creature* creature, const Tile* newTile, const Position& newPos, uint32_t newStackpos, const Tile* oldTile, const Position& oldPos, uint32_t oldStackpos, bool teleport) Troque:
    A parte que começa em if (oldPos.y > newPos.y) { e Termina em GetMapDescription(newPos.x - 8, newPos.y - 6, newPos.z, 1, 14, msg); } Por:
    if (oldPos.y > newPos.y) { // north, for old x msg->AddByte(0x65); GetMapDescription(oldPos.x - Map::maxClientViewportX, newPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); } else if (oldPos.y < newPos.y) { // south, for old x msg->AddByte(0x67); GetMapDescription(oldPos.x - Map::maxClientViewportX, newPos.y + (Map::maxClientViewportY+1), newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); } if (oldPos.x < newPos.x) { // east, [with new y] msg->AddByte(0x66); GetMapDescription(newPos.x + (Map::maxClientViewportX+1), newPos.y - Map::maxClientViewportY, newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); } else if (oldPos.x > newPos.x) { // west, [with new y] msg->AddByte(0x68); GetMapDescription(newPos.x - Map::maxClientViewportX, newPos.y - Map::maxClientViewportY, newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); Agora ache:
    if (newPos.z == 7) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 5, 18, 14, 3, skip); //(floor 7 and 6 already set) GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 4, 18, 14, 4, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 3, 18, 14, 5, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 2, 18, 14, 6, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 1, 18, 14, 7, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 0, 18, 14, 8, skip);  Depedendo da Source, a parte será assim:
     
    Por:
    if(newPos.z == 7) //going to surface { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 5, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 3, skip); //(floor 7 and 6 already set) GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 4, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 4, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 3, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 5, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 6, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 1, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 7, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 0, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 8, skip); Agora ache:
    else if(newPos.z > 7) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, oldPos.getZ() - 3, 18, 14, 3, skip); Depedendo da source será assim:
     
    Por:
    else if(newPos.z > 7) //underground, going one floor up (still underground) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, oldPos.z - 3, (Map::maxClientViewportX+1), (Map::maxClientViewportY+1)*2, 3, skip); Troque:
    //moving up a floor up makes us out of sync //west msg->AddByte(0x68); GetMapDescription(oldPos.x - 8, oldPos.y - 5, newPos.z, 1, 14, msg); //north msg->AddByte(0x65); GetMapDescription(oldPos.x - 8, oldPos.y - 6, newPos.z, 18, 1, msg); Por:
    //moving up a floor up makes us out of sync //west msg->AddByte(0x68); GetMapDescription(oldPos.x - Map::maxClientViewportX, oldPos.y - (Map::maxClientViewportY-1), newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); //north msg->AddByte(0x65); GetMapDescription(oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); Agora troque:
    if(newPos.z == 8) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z, 18, 14, -1, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 1, 18, 14, -2, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 2, 18, 14, -3, skip); Dependendo da source poderá ser:
     
    Por:
    if(newPos.z == 8) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -1, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 1, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -2, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -3, skip); Agora troque:
    else if(newPos.z > oldPos.z && newPos.z > 8 && newPos.z < 14) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 2, 18, 14, -3, skip); Depedendo da source pode ser:
     
    Por:
    else if(newPos.z > oldPos.z && newPos.z > 8 && newPos.z < 14) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -3, skip); Agora em map.h edite como quiser:
    static const int32_t maxViewportX = 11; //min: maxClientViewportX + 1 static const int32_t maxViewportY = 11; //min value: maxClientViewportY + 1 static const int32_t maxClientViewportX = 8; static const int32_t maxClientViewportY = 6; Observação:
     
     
    Agora em map.cpp do OTCLIENT
    Ache:
    void Map::resetAwareRange() { AwareRange range; range.left = 8; range.top = 6; range.bottom = 7; range.right = 9; setAwareRange(range); } Troque por:
    { AwareRange range; range.left = 8; //Valor que colocou em maxClientViewportX range.top = 6; //Valor que colocou em maxClientViewportY range.bottom = range.top+1; range.right = range.left+1; setAwareRange(range); } Créditos:
    Flatlander  - OTLAND - Criação
    Ceetros - Tradução
     
     
    Agora vamos deixar o OTCLIENT lindão.
     
     
     
     
     
    Troque tudo de modules/game_interface/interface.lua (na pasta do OTCLIENT)
    por:
    http://pastebin.com/tH7qyreW
    (para o tutorial não ficar muito grande botei no pastebin, já que o spoiler tá bugando)
    Creditos dessa parte: 
    Edubart (Criador do OTCLIENT)
    Ceetros
     
    Caso tenha ajudado, dê um rep+
     
  8. Obrigado
    Djonga recebeu reputação de Thiagodourado1 em PROBLEMA EM COLOCAR OTSERV ONLINE   
    vá na pasta do xampp, procure a pasta Apache, dentro dela abra a pasta conf e o arquivo httpd.conf usando um editor de texto.
     
    dentro do arquivo procure por listen, e deixe assim:
     
     
    no mesmo arquivo procure por ServerName localhost:80 e deixe assim:
     
     
    libere a porta 8090, reinicie o xampp e teste.
     
  9. Curtir
    Djonga deu reputação a Nazo em Storage por tempo   
    Testa agora:
    local t = { lvl = 150, Time = 15, entrada = { {x = 191, y = 425, z = 8}, }, saida = { {x = 124, y = 350, z = 9}, {x = 129, y = 350, z = 9} }, monstros = { {{x=299, y=399, z=9}, "Mega Blastoise"}, {{x=238, y=399, z=9}, "Mega Venusaur"}, {{x=206, y=403, z=9}, "Mega Absol"}, {{x=217, y=397, z=9}, "Elder Tangela"}, {{x=219, y=406, z=9}, "Elder Venusaur"}, {{x=229, y=409, z=9}, "Mega Ampharos"}, {{x=235, y=406, z=9}, "Mega Pidgeot"}, {{x=238, y=414, z=9}, "Elder Jynx"}, {{x=227, y=412, z=9}, "Elder Pidgeot"}, {{x=220, y=414, z=9}, "Elder Tentacruel"}, {{x=211, y=412, z=9}, "Mega Charizard X"}, {{x=205, y=418, z=9}, "Mega Charizard Y"}, {{x=215, y=418, z=9}, "Elder Charizard"}, {{x=223, y=420, z=9}, "Elder Pinsir"}, {{x=231, y=418, z=9}, "Elder Jynx"}, {{x=237, y=422, z=9}, "Mega Ampharos"}, {{x=202, y=426, z=9}, "Mega Blastoise"}, {{x=247, y=422, z=9}, "Underworld Rayquaza"} } } function VarAnihiPlayer(cid) if not isCreature(cid) then return LUA_ERROR end if isInRange(getPlayerPosition(cid), t.saida[1], t.saida[#t.saida]) then doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) end end function getPlayersInArea(fromPos, toPos) local players = {} for _, pid in ipairs(getPlayersOnline()) do if isInRange(getPlayerPosition(pid), fromPos, toPos) then table.insert(players, pid) end end return players end function onUse(cid, item, fromPosition, itemEx, toPosition) local check = {} if #getPlayersInArea(t.saida[1], t.saida[#t.saida]) > 0 then doPlayerSendCancel(cid, 'Wait, there are players doing the quest.') return true end if getPlayerStorageValue(cid, 17899) > os.time() then doPlayerSendCancel(cid, 'You need to wait 24hours to enter again.') return true end for _, k in ipairs(t.entrada) do local x = getTopCreature(k).uid if(x == 0 or not isPlayer(x) or getPlayerLevel(x) < t.lvl) then doPlayerSendCancel(cid, 'Need another player or somebody else has no level '..t.lvl..'.') return true end table.insert(check, x) end for _, summon in pairs(t.monstros) do local creature = getTopCreature(summon[1]).uid if(creature > 0 and not isPlayer(creature)) then doRemoveCreature(creature) end doCleanTile(summon[1]) doCreateMonster(summon[2], summon[1]) end for i, tid in ipairs(check) do doSendMagicEffect(t.entrada[i], CONST_ME_POFF) doTeleportThing(tid, t.saida[i], false) setPlayerStorageValue(cid, 17899, os.time()+86400) addEvent(VarAnihiPlayer, t.Time*60*1000, tid) doSendMagicEffect(t.saida[i], CONST_ME_ENERGYAREA) end return true end  
     
    O erro aparente era bem simples, se o momento atual do presente é o tempo "100", daqui um dia será "200", você quando salva o tempo "200" (que seria amanhã), ao checar a storage, tem que checar se "amanhã (200) é maior que o tempo atual", e sua checagem estava:
    if getPlayerStorageValue(cid, 17899) == 1 then Sendo que teria que ser assim:
    if getPlayerStorageValue(cid, 17899) > os.time() then -- se o tempo salvo na storage é maior que o tempo atual, o player ainda não pode passar pois não deu 24h  
  10. Curtir
    Djonga recebeu reputação de tavarb em [dxp] Trade center teleport   
    sim
  11. Gostei
    Djonga deu reputação a Kazuya9629 em erro ao compilar Dev-C+ +   
    ver se dentro da pasta do seu dev tem Packman.exe ver se ta instalando isso
  12. Obrigado
    Djonga deu reputação a marcot em [dxp] Trade center teleport   
    Acho que isso deve corrigir o erro que apareceu no terminal:
    local config = { storageID = 14586, tradeCenter = {pos = {x = 224, y = 307, z = 7}}, cpActionID = {23000, 23001, 23002, 23003, 23004, 23005, 23006, 23007, 23008, 23009}, tcActionID = 22334, } local cities = { pewter = {id = 1, pos = {x = 396, y = 1746, z = 9, stackpos=253}}, cerulean = {id = 2, pos = {x = 396, y = 1746, z = 9, stackpos=253}}, viridian = {id = 3, pos = {x = 396, y = 1746, z = 9, stackpos=253}}, celadon = {id = 4, pos = {x = 396, y = 1746, z = 9, stackpos=253}}, saffron = {id = 5, pos = {x = 396, y = 1746, z = 9, stackpos=253}}, lavender = {id = 6, pos = {x = 396, y = 1746, z = 9, stackpos=253}}, vermilion = {id = 7, pos = {x = 396, y = 1746, z = 9, stackpos=253}}, cinnabar = {id = 8, pos = {x = 396, y = 1746, z = 9, stackpos=253}}, fuchsia = {id = 9, pos = {x = 396, y = 1746, z = 9, stackpos=253}}, } function onStepIn(cid, item, pos) if isSummon(cid) then return false end teleportTo = config.tradeCenter.pos if isInArray (config.cpActionID, item.actionid) then if item.actionid == config.cpActionID[1] then setPlayerStorageValue(cid, config.storageID, cities.pewter.id) elseif item.actionid == config.cpActionID[2] then setPlayerStorageValue(cid, config.storageID, cities.cerulean.id) elseif item.actionid == config.cpActionID[3] then setPlayerStorageValue(cid, config.storageID, cities.viridian.id) elseif item.actionid == config.cpActionID[4] then setPlayerStorageValue(cid, config.storageID, cities.celadon.id) elseif item.actionid == config.cpActionID[5] then setPlayerStorageValue(cid, config.storageID, cities.saffron.id) elseif item.actionid == config.cpActionID[6] then setPlayerStorageValue(cid, config.storageID, cities.lavender.id) elseif item.actionid == config.cpActionID[7] then setPlayerStorageValue(cid, config.storageID, cities.vermilion.id) elseif item.actionid == config.cpActionID[8] then setPlayerStorageValue(cid, config.storageID, cities.cinnabar.id) elseif item.actionid == config.cpActionID[9] then setPlayerStorageValue(cid, config.storageID, cities.fuchsia.id) end elseif item.actionid == config.tcActionID then playerStatus = getPlayerStorageValue(cid, config.storageID) if playerStatus == cities.pewter.id then teleportTo = cities.pewter.pos elseif playerStatus == cities.cerulean.id then teleportTo = cities.cerulean.pos elseif playerStatus == cities.viridian.id then teleportTo = cities.viridian.pos elseif playerStatus == cities.celadon.id then teleportTo = cities.celadon.pos elseif playerStatus == cities.saffron.id then teleportTo = cities.saffron.pos elseif playerStatus == cities.lavender.id then teleportTo = cities.lavender.pos elseif playerStatus == cities.vermilion.id then teleportTo = cities.vermilion.pos elseif playerStatus == cities.cinnabar.id then teleportTo = cities.cinnabar.pos elseif playerStatus == cities.fuchsia.id then teleportTo = cities.fuchsia.pos else teleportTo = cities.cerulean.pos end end if #getCreatureSummons(cid) >= 1 then for i = 1, #getCreatureSummons(cid) do doTeleportThing(getCreatureSummons(cid), teleportTo, false) end end doTeleportThing(cid, teleportTo, false) return true end  
  13. Obrigado
    Djonga deu reputação a marcot em (Resolvido)[dxp] alguns pokémons com revive bugado   
    Só uma ultima tentativa,
    tenta trocar pra:
    if (item2.itemid == b.on and #getCreatureSummons(cid) < 1) or (item2.itemid == b.off and #getCreatureSummons(cid) < 1) or (item2.itemid == b.use and #getCreatureSummons(cid) < 1 and not isRiderOrFlyOrSurf(cid)) then  
     
    Saindo do lado mais técnico para tentar simplificar: num if você tem uma expressão assim como (1 + 2), mas com apenas verdadeiro e falso como possíveis resultados. Caso a expressão resulte em verdadeiro, o que está dentro do bloco do if será executado:
    if true then <bloco do if> else <bloco do else> end Caso o if não seja executado, o else será executado.
    A expressão do script se for traduzir ficaria algo assim:
    SE id do item for igual a b.on ou id do item igual a b.off ou (id do item igual a b.use e quantidade de summons do player menor que um e não estiver em ride/fly/surf faça
     
    if item2.itemid == b.on or item2.itemid == b.off or (item2.itemid == b.use and #getCreatureSummons(cid) < 1 and not isRiderOrFlyOrSurf(cid)) then
  14. Obrigado

Informação Importante

Confirmação de Termo