Postado Maio 22, 2014 11 anos Estou voltando ao mundo do Open Tibia (na área de desenvolvimento) e estou testando meu potencial em scriptings quando me fiz ausente tinha um conhecimento bom já não tão grande mas quebrava um galho agora voltei e percebi que regredi bastante. Enfim, eu estava pegando uns scripts pra dar uma estudada e me deparei com uma coisa louca e gostaria muito que vocês experientes me ajudassem com isso. Peguei esse script da annihilator lever e está muito louco bem diferente do antigo postarei os dois e gostaria de saber qual a diferença entre os dois e se pudessem me explicar as vantagens e as condições usada no novo pq me embananei todo olhando esse script. Script Novo (que não entendi nada, o que aconteceu com a famosa function onUse(cid, item, frompos, item2, topos)) : local players_area = { {x = 33225, y = 31671, z = 13}, {x = 33222, y = 31671, z = 13} } local new_player_pos = { {x = 33222, y = 31659, z = 13}, {x = 33221, y = 31659, z = 13}, {x = 33220, y = 31659, z = 13}, {x = 33219, y = 31659, z = 13} } local demonPos = { {x = 33219, y = 31657, z = 13}, {x = 33221, y = 31657, z = 13}, {x = 33223, y = 31659, z = 13}, {x = 33224, y = 31659, z = 13}, {x = 33220, y = 31661, z = 13}, {x = 33222, y = 31661, z = 13} } function getPlayerCountInArea(toPos, fromPos) local count = 0 local cid = {} for x = fromPos.x, toPos.x do for y = fromPos.y, toPos.y do for z = toPos.z, toPos.z do local creature = getTopCreature({x = x, y = y, z = z, stackpos = 255}).uid if(creature > 0) then if(isPlayer(creature)) then table.insert(cid, creature) count = count + 1 if(getPlayerLevel(creature) < 100) then return "All players must be above level 100." end elseif(isMonster(creature)) then return "Players are allowed only." end end end end end if(count < 4) then return "You need 4 players." else for i = 1,4 do Player(cid[5-i]):teleportTo(new_player_pos[i]) Player(cid[5-i]):getPosition():sendMagicEffect(CONST_ME_TELEPORT) end end return true end function SummonDemon(Pos) local count = 0 local cid = {} for x = Pos[1].x, Pos[4].x do for y = Pos[1].y, Pos[6].y do for z = Pos[1].z, Pos[6].z do local creature = getTopCreature({x = x, y = y, z = z, stackpos = 255}).uid if(creature > 0) then if(isPlayer(creature)) then return "A team is already inside the quest room." elseif(isMonster(creature)) then table.insert(cid, creature) count = count + 1 end end end end end for i = 1, #cid do doRemoveCreature(cid[i]) end for i = 1, #Pos do doSummonCreature("Demon", Pos[i]) end return getPlayerCountInArea(players_area[1], players_area[2]) end function onUse(cid, item) if(item.itemid == 1946) then local condition = SummonDemon(demonPos) if(condition ~= true) then doPlayerSendCancel(cid, condition) end else Item(item.uid):transform(1946) end return true end Script Antigo (do qual tenho total conhecimento sobre o que acontece ou não e por que)-- Alavanca Annihilator Quest -- by Nottinghster function onUse(cid, item, frompos, item2, topos) if item.uid == 7000 and item.itemid == 1945 then player1pos = {x=1109, y=1204, z=11, stackpos=253} player1 = getThingfromPos(player1pos) player2pos = {x=1110, y=1204, z=11, stackpos=253} player2 = getThingfromPos(player2pos) player3pos = {x=1111, y=1204, z=11, stackpos=253} player3 = getThingfromPos(player3pos) player4pos = {x=1112, y=1204, z=11, stackpos=253} player4 = getThingfromPos(player4pos) if player1.itemid > 0 and player2.itemid > 0 and player3.itemid > 0 and player4.itemid > 0 then queststatus1 = getPlayerStorageValue(player1.uid,7000) queststatus2 = getPlayerStorageValue(player2.uid,7000) queststatus3 = getPlayerStorageValue(player3.uid,7000) queststatus4 = getPlayerStorageValue(player4.uid,7000) if queststatus1 == -1 and queststatus2 == -1 and queststatus3 == -1 and queststatus4 == -1 then nplayer1pos = {x=1128, y=1181, z=11} nplayer2pos = {x=1129, y=1181, z=11} nplayer3pos = {x=1130, y=1181, z=11} nplayer4pos = {x=1131, y=1181, z=11} doSendMagicEffect(player1pos,2) doSendMagicEffect(player2pos,2) doSendMagicEffect(player3pos,2) doSendMagicEffect(player4pos,2) doTeleportThing(player1.uid,nplayer1pos) doTeleportThing(player2.uid,nplayer2pos) doTeleportThing(player3.uid,nplayer3pos) doTeleportThing(player4.uid,nplayer4pos) doSendMagicEffect(nplayer1pos,10) doSendMagicEffect(nplayer2pos,10) doSendMagicEffect(nplayer3pos,10) doSendMagicEffect(nplayer4pos,10) doTransformItem(item.uid,item.itemid+1) else doPlayerSendCancel(cid,"Alguém em seu time já fez esta quest.") end else doPlayerSendCancel(cid,"Você precisa de um grupo de 4 pessoas para esta quest.") end elseif item.uid == 7000 and item.itemid == 1946 then if getPlayerAccess(cid) > 0 then doTransformItem(item.uid,item.itemid-1) else doPlayerSendCancel(cid,"Desculpe, não é possível.") end else return FALSE end return TRUE end Editado Maio 22, 2014 11 anos por Beyond Sky (veja o histórico de edições) Medalhas:1, 2
Postado Maio 22, 2014 11 anos Solução bom, a galera tá usando mais loops [for, while] (digamos que tá na moda) e tão preferindo fazer funções. O script novo é basicamente isso, e sem contar tb que ele é pro TFS novo (1.0) nessa nova versão você pode inserir uma função dentro de outra usando ":" como nesse exemplo aqui for i = 1,4 do Player(cid[5-i]):teleportTo(new_player_pos[i]) para i = 1,4 fazer: Player(cid[5-i]): teleportar para (NovaPosiçãoDePlayer) Ele vai começar com i = 1, daí teremos Player de numero 4 vai ser teleportado para a posição de numero 1 da table de new_player_pos dps o player de numero 3 vai ser teleportado pra pos de numero 2... e assim até i = 4. O resto é meio q entendível percebendo essa lógica das tables.. #Table retorna o numero de elementos que essa Table possui; No caso local players_area é uma table de 2 elementos. local players_area = { {x = 33225, y = 31671, z = 13}, --- PRIMEIRO ELEMENTO {x = 33222, y = 31671, z = 13} ---- SEGUNDO } já a new _player_pos possui 4 elementos, um pra cada player local new_player_pos = { {x = 33222, y = 31659, z = 13}, {x = 33221, y = 31659, z = 13}, {x = 33220, y = 31659, z = 13}, {x = 33219, y = 31659, z = 13} } Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá! "Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda (obg ao @Beeny por fazer essa linda sign <3)
Postado Maio 22, 2014 11 anos Autor Muito obrigado parceiro já começou a dar um clareada na mente vou dar umas estudadas sobre iteração e loop, muito obrigado tópico resolvido. Medalhas:1, 2
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.