
Histórico de Curtidas
-
Djonga recebeu reputação de Lucif3r em Xampp Errocheque 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!
-
Djonga deu reputação a Dom Matteo em [PDA] Bug consertado pokemon: alguns moves deixam o server lento quando pokemon usa em andares elevadosGente 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!)
-
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:
-
Djonga deu reputação a marcot em (Resolvido)pedido script held fusionNã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)
-
Djonga recebeu reputação de BangBang em Poke Systemposte o seu creaturescripts/player/pokedeath.lua
-
Djonga recebeu reputação de tavarb em (Resolvido)[AJUDA] Pokémon Iconlib/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
-
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+
-
Djonga recebeu reputação de Thiagodourado1 em PROBLEMA EM COLOCAR OTSERV ONLINEvá 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.
-
Djonga deu reputação a
Nazoem Storage por tempoTesta 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
-
Djonga recebeu reputação de tavarb em [dxp] Trade center teleportsim
-
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
-
Djonga deu reputação a marcot em [dxp] Trade center teleportAcho 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
-
Djonga deu reputação a marcot em (Resolvido)[dxp] alguns pokémons com revive bugadoSó 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 -
Djonga recebeu reputação de Mark Ackerman em (Resolvido)[PEDIDO] Bau que ganha item e manda o player em x positions