Postado Maio 25, 2015 10 anos Boa tarde amigos, pra quem manja essa deve ser fácil, gostaria que alguém retirasse do script a condição de checar se 4 jogadores irão fazer a quest, pra que eu possa fazer a anihi quest solo, com 2, 3 ou os 4 jogadores no meu server. Ta aí o meu script. Obrigado. -- Annihilator by Shawak v2.1 -- CONFIG -- local room = { -- room with demons fromX = 33217, fromY = 31655, fromZ = 13, -------------- toX = 33224, toY = 31663, toZ = 13 } local monster_pos = { [1] = {pos = {33220, 31657, 13}, monster = "Demon"}, [2] = {pos = {33222, 31657, 13}, monster = "Demon"}, [3] = {pos = {33219, 31661, 13}, monster = "Demon"}, [4] = {pos = {33221, 31661, 13}, monster = "Demon"}, [5] = {pos = {33223, 31659, 13}, monster = "Demon"}, [6] = {pos = {33224, 31659, 13}, monster = "Demon"} } local players_pos = { {x = 33225, y =31671, z = 13, stackpos = 253}, {x = 33224, y =31671, z = 13, stackpos = 253}, {x = 33223, y =31671, z = 13, stackpos = 253}, {x = 33222, y =31671, z = 13, stackpos = 253} } 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 playersOnly = "yes" local questLevel = 100 ------------------------------------------------------ --- CONFIG END --------------------------------------- ------------------------------------------------------ function onUse(cid, item, fromPosition, itemEx, toPosition) local all_ready, monsters, player, level = 0, 0, {}, 0 if item.itemid == 1945 then for i = 1, #players_pos do table.insert(player, 0) end for i = 1, #players_pos do player = getThingfromPos(players_pos) if player.itemid > 0 then if string.lower(playersOnly) == "yes" then if isPlayer(player.uid) == TRUE then all_ready = all_ready+1 else monsters = monsters+1 end else all_ready = all_ready+1 end end end if all_ready == #players_pos then for i = 1, #players_pos do player = getThingfromPos(players_pos) if isPlayer(player.uid) == TRUE then if getPlayerLevel(player.uid) >= questLevel then level = level+1 end else level = level+1 end end if level == #players_pos then if string.lower(playersOnly) == "yes" and monsters == 0 or string.lower(playersOnly) == "no" then local door = getTileItemById({x=33225, y=31659, z=13}, 5109).uid if door > 0 then doTransformItem(door, 5108) end for _, area in pairs(monster_pos) do doSummonCreature(area.monster,{x=area.pos[1],y=area.pos[2],z=area.pos[3]}) end for i = 1, #players_pos do doSendMagicEffect(players_pos, CONST_ME_POFF) doTeleportThing(player.uid, new_player_pos, FALSE) doSendMagicEffect(new_player_pos, CONST_ME_ENERGYAREA) doTransformItem(item.uid,1946) end else doPlayerSendTextMessage(cid,19,"Only players can do this quest.") end else doPlayerSendTextMessage(cid,19,"All Players have to be level "..questLevel.." to do this quest.") end else doPlayerSendTextMessage(cid,19,"You need "..table.getn(players_pos).." players to do this quest.") end elseif item.itemid == 1946 then local player_room = 0 for x = room.fromX, room.toX do for y = room.fromY, room.toY do for z = room.fromZ, room.toZ do local pos = {x=x, y=y, z=z,stackpos = 253} local thing = getThingfromPos(pos) if thing.itemid > 0 then if isPlayer(thing.uid) == TRUE then player_room = player_room+1 end end end end end if player_room >= 1 then doPlayerSendTextMessage(cid,19,"There is already a team in the quest room.") elseif player_room == 0 then for x = room.fromX, room.toX do for y = room.fromY, room.toY do for z = room.fromZ, room.toZ do local pos = {x=x, y=y, z=z,stackpos = 253} local thing = getThingfromPos(pos) if thing.itemid > 0 then doRemoveCreature(thing.uid) end end end end doTransformItem(item.uid,1945) end end return TRUE end
Postado Maio 25, 2015 10 anos -- Annihilator by Shawak v2.1 -- CONFIG -- local room = { -- room with demons fromX = 33217, fromY = 31655, fromZ = 13, -------------- toX = 33224, toY = 31663, toZ = 13 } local monster_pos = { [1] = {pos = {33220, 31657, 13}, monster = "Demon"}, [2] = {pos = {33222, 31657, 13}, monster = "Demon"}, [3] = {pos = {33219, 31661, 13}, monster = "Demon"}, [4] = {pos = {33221, 31661, 13}, monster = "Demon"}, [5] = {pos = {33223, 31659, 13}, monster = "Demon"}, [6] = {pos = {33224, 31659, 13}, monster = "Demon"} } local players_pos = { {x = 33225, y =31671, z = 13, stackpos = 253}, {x = 33224, y =31671, z = 13, stackpos = 253}, {x = 33223, y =31671, z = 13, stackpos = 253}, {x = 33222, y =31671, z = 13, stackpos = 253} } 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 playersOnly = "yes" local questLevel = 100 ------------------------------------------------------ --- CONFIG END --------------------------------------- ------------------------------------------------------ function onUse(cid, item, fromPosition, itemEx, toPosition) local all_ready, monsters, player, level = 0, 0, {}, 0 if item.itemid == 1945 then for i = 1, #players_pos do table.insert(player, 0) end for i = 1, #players_pos do player[i] = getThingfromPos(players_pos[i]) if player[i].itemid > 0 then if string.lower(playersOnly) == "yes" then if isPlayer(player[i].uid) == TRUE then all_ready = all_ready+1 else monsters = monsters+1 end else all_ready = all_ready+1 end end end for i = 1, #players_pos do player[i] = getThingfromPos(players_pos[i]) if isPlayer(player[i].uid) == TRUE then if getPlayerLevel(player[i].uid) >= questLevel then level = level+1 end else level = level+1 end end if level == #players_pos then if string.lower(playersOnly) == "yes" and monsters == 0 or string.lower(playersOnly) == "no" then local door = getTileItemById({x=33225, y=31659, z=13}, 5109).uid if door > 0 then doTransformItem(door, 5108) end for _, area in pairs(monster_pos) do doSummonCreature(area.monster,{x=area.pos[1],y=area.pos[2],z=area.pos[3]}) end for i = 1, #players_pos do doSendMagicEffect(players_pos[i], CONST_ME_POFF) doTeleportThing(player[i].uid, new_player_pos[i], FALSE) doSendMagicEffect(new_player_pos[i], CONST_ME_ENERGYAREA) doTransformItem(item.uid,1946) end else doPlayerSendTextMessage(cid,19,"Only players can do this quest.") end else doPlayerSendTextMessage(cid,19,"All Players have to be level "..questLevel.." to do this quest.") end elseif item.itemid == 1946 then local player_room = 0 for x = room.fromX, room.toX do for y = room.fromY, room.toY do for z = room.fromZ, room.toZ do local pos = {x=x, y=y, z=z,stackpos = 253} local thing = getThingfromPos(pos) if thing.itemid > 0 then if isPlayer(thing.uid) == TRUE then player_room = player_room+1 end end end end end if player_room >= 1 then doPlayerSendTextMessage(cid,19,"There is already a team in the quest room.") elseif player_room == 0 then for x = room.fromX, room.toX do for y = room.fromY, room.toY do for z = room.fromZ, room.toZ do local pos = {x=x, y=y, z=z,stackpos = 253} local thing = getThingfromPos(pos) if thing.itemid > 0 then doRemoveCreature(thing.uid) end end end end doTransformItem(item.uid,1945) end end return TRUE end [*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*] DISCORD: vodkart#6090
Postado Maio 25, 2015 10 anos Autor @Vodkart, cara funcionou, porém fica dando esse erro nos sqm que não tem players 9:35:01.217] [Error - Action Interface] [19:35:01.217] data/actions/scripts/AnnihilatorQuest/annihilator.lua:onUse [19:35:01.227] Description: [19:35:01.227] (luaDoTeleportThing) Thing not found [19:35:01.227] [Error - Action Interface] [19:35:01.227] data/actions/scripts/AnnihilatorQuest/annihilator.lua:onUse [19:35:01.227] Description: [19:35:01.227] (luaDoTeleportThing) Thing not found [19:35:01.227] [Error - Action Interface] [19:35:01.227] data/actions/scripts/AnnihilatorQuest/annihilator.lua:onUse [19:35:01.227] Description: [19:35:01.227] (luaDoTeleportThing) Thing not found Editado Maio 25, 2015 10 anos por onix (veja o histórico de edições)
Postado Maio 25, 2015 10 anos Solução function HaveCreatureArena(area, remove, clean) -- função do Vodkart for x = area[1].x - 1, area[2].x + 1 do for y = area[1].y - 1, area[2].y + 1 do local pos = {x=x, y=y, z=area[1].z} local m = getTopCreature(pos).uid if remove ~= false and m ~= 0 and isMonster(m) then doRemoveCreature(m) end if clean ~= false then doCleanTile(pos, false) end end end end local t = { lvl = 100, area_from = {x = 33217, y = 31655, z = 13}, area_to = {x = 33224, y = 31663, z = 13}, entrada = { {x = 33225, y =31671, z = 13},-- pos players {x = 33224, y =31671, z = 13}, {x = 33223, y =31671, z = 13}, {x = 33222, y =31671, z = 13} }, saida = { {x = 33222, y = 31659, z = 13}, {x = 33221, y = 31659, z = 13}, {x = 33220, y = 31659, z = 13}, {x = 33219, y = 31659, z = 13} }, monstros = { {{x = 33220, y = 31657, z = 13}, "Demon"}, -- defina pos dos montros e nomes {{x = 33222, y = 31657, z = 13}, "Demon"}, {{x = 33219, y = 31661, z = 13}, "Demon"}, {{x = 33221, y = 31661, z = 13}, "Demon"}, {{x = 33223, y = 31659, z = 13}, "Demon"}, {{x = 33224, y = 31659, z = 13}, "Demon"} } } function onUse(cid, item, fromPosition, itemEx, toPosition) local player_room, check = 0, {} for _, pid in pairs(getPlayersOnline()) do if isInRange(getCreaturePosition(pid), t.area_from, t.area_to) then player_room = player_room + 1 end end if player_room > 0 then doPlayerSendCancel(cid, 'There is already a team in the quest room.') return true end for _, k in ipairs(t.entrada) do local x = getTopCreature(k).uid if(x ~= 0 and not isPlayer(x) or getPlayerLevel(x) < t.lvl) then doPlayerSendCancel(cid, 'alguém não possui level '..t.lvl..' ou mais.') return true end table.insert(check, x) end HaveCreatureArena({t.area_from, t.area_to}, true, true) -- remove monstros, itens for _, summon in pairs(t.monstros) do 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) doSendMagicEffect(t.saida[i], CONST_ME_ENERGYAREA) end doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945) return true end [*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*] DISCORD: vodkart#6090
Postado Maio 26, 2015 10 anos Autor Vodkart, obrigado por estar me ajudando, só que agora a alavanca não funciona mais, e da esse erro: o primeiro script que vc editou a quest ficou perfeita aos olhos do player, mas ficou aparecendo as mensagens de erro na distro para mim, pelo que entendi o script desamarrou os 4 tiles e teleportou quem estava la, mas o script não entendeu a possibilidade de alguns tiles ficarem sem players para teleportar, então o erro do primeiro script que vc editou era ao tentar teleportar os players para a quest e nao ter players la nos 3 tiles restantes e não ao tentar fazer a limpeza da sala da quest e não encontrar players nem monstros lá [23:3:09.068] [Error - Action Interface] [23:3:09.068] data/actions/scripts/AnnihilatorQuest/annihilator.lua:onUse [23:3:09.068] Description: [23:3:09.068] (internalGetPlayerInfo) Player not found when requesting player in fo #3 [23:3:09.068] [Error - Action Interface] [23:3:09.068] data/actions/scripts/AnnihilatorQuest/annihilator.lua:onUse [23:3:09.068] Description: [23:3:09.078] ...ata/actions/scripts/AnnihilatorQuest/annihilator.lua:49: attemp t to compare boolean with number [23:3:09.078] stack traceback: [23:3:09.078] ...ata/actions/scripts/AnnihilatorQuest/annihilator.lua:49: in f unction <...ata/actions/scripts/AnnihilatorQuest/annihilator.lua:36> Editado Maio 26, 2015 10 anos por onix (veja o histórico de edições)
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.