Postado Maio 26, 2015 10 anos Este é um post popular. O Scripter King segue o mesmo propósito do Mapper King e Spriter King, espero que curtam e participem do tópico. REGRAS: • O Rei escolhe um tema para o duelo de Scripts. • Os membros que quiserem participar podem enviar o script pronto até 72 horas contadas depois da escolha do tema. • Os scripts devem ser enviados para: [email protected] (scripts fora do tema serão desclassificados e cada membro só pode enviar um script). • Os participantes podem votar, mas não no seu script. (caso isso aconteça o mesmo será desclassificado). • Se nenhum script for enviado em 72 horas, o rei deve escolher outro tema. • Após entregue a conquista de Scripter King ao vencedor, o mesmo deve escolher um novo tema em até 48 horas, caso contrário, a conquista é transferida ao segundo colocado. • Apenas o atual rei ficará com a conquista do Scripter King. • Após 15 votos, o membro que obter maior número de votos vira o rei. (caso houver empate, o próximo voto aos membros que empataram decidirá) • Uma vez votado, o membro não pode mudar o voto. • Cada script deve ser de autoria do participante. • Cada voto deve ser justificado. Histórico: 30/05/2015 - Snowsz Então para começar, eu me declaro o Atual rei, o primeiro da linhagem, e o primeiro tema é ... Peguei um tópico da seção de script que não esta resolvido. Aqui vai .. "Em um conjunto de players, um deles puxa uma alavanca, e são enviados para uma sala sem saída onde aparecerá um monstro, o time tem um determinado tempo para mata-lo, se o tempo acabar, eles são enviados para uma saída e o monstro some. Se matarem são enviados para uma saída depois de 1 minuto. O script deve ser feito para a versão 0.4 do TFS. Apenas um time por vez. " Divirtam-se STYLLER OT 2022
Postado Maio 29, 2015 10 anos Autor Primeiramente gostaria de deixar claro aqui a minha indignação com aqueles muitos que ficam reclamando que não tem eventos de scripting, e agora, quando tentamos fazer, não participam. Obrigado aos DOIS desafiantes que participaram ... bora para o duelo! São 3 scripts, lembrando que ao votar é preciso citar uma justificativa. Script 1: ACTION: -- area de configuração local config = { [1] = {pos_player = {x=156,y=51,z=5, stackpos=253},topos_player = {x=146,y=27,z=7},effect_player = 10}, [2] = {pos_player = {x=157,y=51,z=5, stackpos=253},topos_player = {x=147,y=27,z=7},effect_player = 10}, [3] = {pos_player = {x=158,y=51,z=5, stackpos=253},topos_player = {x=148,y=27,z=7},effect_player = 10}, [4] = {pos_player = {x=159,y=51,z=5, stackpos=253},topos_player = {x=149,y=27,z=7},effect_player = 10}, [5] = {pos_player = {x=160,y=51,z=5, stackpos=253},topos_player = {x=150,y=27,z=7},effect_player = 10}, --[6] = {pos_player = {x=161,y=51,z=5, stackpos=253},topos_player = {x=151,y=27,z=7},effect_player = 10}, --[7] = {pos_player = {x=162,y=51,z=5, stackpos=253},topos_player = {x=152,y=27,z=7},effect_player = 10}, --[8] = {pos_player = {x=163,y=51,z=5, stackpos=253},topos_player = {x=153,y=27,z=7},effect_player = 10}, --[9] = {pos_player = {x=164,y=51,z=5, stackpos=253},topos_player = {x=154,y=27,z=7},effect_player = 10}, --[10] = {pos_player = {x=165,y=51,z=5, stackpos=253},topos_player = {x=155,y=27,z=7},effect_player = 10}, --[11] = {pos_player = {x=166,y=51,z=5, stackpos=253},topos_player = {x=156,y=27,z=7},effect_player = 10}, --[12] = {pos_player = {x=167,y=51,z=5, stackpos=253},topos_player = {x=157,y=27,z=7},effect_player = 10}, --[13] = {pos_player = {x=168,y=51,z=5, stackpos=253},topos_player = {x=158,y=27,z=7},effect_player = 10}, --[14] = {pos_player = {x=169,y=51,z=5, stackpos=253},topos_player = {x=159,y=27,z=7},effect_player = 10}, --[15] = {pos_player = {x=170,y=51,z=5, stackpos=253},topos_player = {x=160,y=27,z=7},effect_player = 10}, } local monster = {name_monster = "Demon", pos_monster = {x=145,y=29,z=7},time_monster = 20, effect_monster = 10} -- tempo em segundos local retorno_players = {pos = {x=160,y=54,z=7},time_players = 5} -- tempo em segundos local evaluation_of_id_players = {} local reward = {2160,500} -- achei sem graça resovir colocar uma recopensa local check = 1 -- area de configuração function onUse(cid, item, frompos, item2, topos) if check ~= 1 then doPlayerSendCancel(cid,"já tem gente matando boss") return true end onCheckPlayers (cid) if counter == #config then for key,value in pairs(config) do doTransformItem(item.uid,item.itemid == 1945 and 1946 or 1945) all_players = getThingfromPos(value.pos_player) doTeleportThing(all_players.uid,value.topos_player) doSendMagicEffect(value.topos_player,value.effect_player) doPlayerSendTextMessage(getCreatureByName(getCreatureName(all_players.uid)),22,"você tem "..monster.time_monster.." segundos para matar boss") end bicho = doCreateMonster(monster.name_monster,monster.pos_monster) addEvent(removerMonster,monster.time_monster*1000,cid) check = 0 else doPlayerSendCancel(cid,"You need "..#config.." players in your team.") end return true end function onCheckPlayers (cid) counter = 0 for key,value in pairs(config) do all_players = getThingfromPos(value.pos_player) if all_players.itemid > 0 and isPlayer(all_players.uid) then counter = counter+all_players.itemid evaluation_of_id_players[counter] = getCreatureByName(getCreatureName(all_players.uid)) end end return true end function removerMonster(cid) if isCreature(bicho) then doSendMagicEffect(getThingPos(bicho),monster.effect_monster) doRemoveCreature(bicho) addEvent(telePlayers,(retorno_players.time_players/2)*1000,cid) for i = 1,#evaluation_of_id_players do if isPlayer (evaluation_of_id_players[i]) then doPlayerSendTextMessage(evaluation_of_id_players[i],22,"o seu tempo acabou tenta de novo você sera teletransportado em "..(retorno_players.time_players/2).." segundos") end end else for i = 1,#evaluation_of_id_players do if isPlayer (evaluation_of_id_players[i]) then doPlayerAddItem(evaluation_of_id_players[i],reward[1],reward[2]) doPlayerSendTextMessage(evaluation_of_id_players[i],22,"parabéns por ter matado boss você sera teletransportado em "..retorno_players.time_players.." segundos") addEvent(telePlayers,retorno_players.time_players*1000,cid) return true end end end return true end function telePlayers(cid) check = 1 for i = 1,#evaluation_of_id_players do if isPlayer(evaluation_of_id_players[i]) then doTeleportThing(evaluation_of_id_players[i],retorno_players.pos) doSendMagicEffect(retorno_players.pos,10) end end return true end Script 2: ACTION: local quest = { team_pos = { {{x = 0, y = 0, z = 0, stackpos = 253},{x = 0, y = 0, z = 0}}, {{x = 0, y = 0, z = 0, stackpos = 253},{x = 0, y = 0, z = 0}}, }, boss_config = {name = "Demon", pos = {x = 0, y = 0, z = 0}, minutes = 10,}, saida_pos = {x = 0, y = 0, z = 0}, gStorage = 99999, } local function exit(tabela) for i = 1, #tabela do if isPlayer(tabela[i]) then doTeleportThing(tabela[i], quest.saida_pos) doSendMagicEffect(quest.saida_pos, CONST_ME_ENERGYAREA) end end setGlobalStorageValue(quest.gStorage, 0) end local function verificarBoss(boss_uid, tabela, x) if x > 0 then if boss_uid > 0 then if x == 1 then doRemoveCreature(boss_uid) and exit(tabela) else addEvent(verificarBoss, 60000, boss_uid, tabela, x - 1) end else addEvent(exit, 60000, tabela) end end end function onUse(cid, item, fromPosition, itemEx, toPosition) if item.itemid == 1945 then if getGlobalStorageValue(quest.gStorage) < 1 then return doPlayerSendCancel(cid, "Ja tem um time dentro da quest, aguarde.") end local tabela = {} for i = 1, #quest.team_pos do local player = getThingfromPos(quest.team_pos[i][1]).uid if player > 0 and isPlayer(player) then table.insert(tabela, player) end end if #tabela == #quest.team_pos then for i = 1, #tabela do doTeleportThing(tabela[i], quest.team_pos[i][2]) doSendMagicEffect(quest.team_pos[i][2], CONST_ME_ENERGYAREA) local boss_uid = doSummonCreature(quest.boss_config.name, quest.boss_config.pos) addEvent(verificarBoss, 60000, boss_uid, tabela, quest.boss_config.minutes - 1) setGlobalStorageValue(quest.gStorage, 1) end else return doPlayerSendCancel(cid, "Voce precisa de "..#quest.team_pos.." jogadores para a quest.") end end doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945) return true end Script 3: LIB: --[[ • time, é o tempo máximo que pode ficar na sala. • timeOnWin, é o tempo que eles devem esperar ao matar os monstros configurados para serem teleportados. • globalStorage, é a storage usada para saber se já estão usando a sala. • resetGoPos, é o local para onde todos serão teleportados quando o tempo máximo acabar. • playerGoPos, é o local da sala para onde os players serão teleportados. • winGoPos, é o local para onde os ganhadores serão teleportados. • roomPoints: leftUpPoint(Canto superior esquerdo da sala, a posição dele), rightDownPoint(Canto inferior direito da sala, a posição dele). • monsters: monsterName(Nome do monstro que vai ser criado), createPos(Posição onde o monstro vai ser criado.) • players: playerPos(Onde o player deve estar para a alavanca poder ser acionada), a quantidade configurada será a quantidade necessária de players para entrar na sala. ]]-- SKDeathRoom = { time = 180, -- Time in this room, in seconds timeOnWin = 60, -- Time on win, to teleport all players. globalStorage = 4565, playerToPos = {x = 100, y = 100, z = 7}, resetGoPos = {x = 10, y = 10, z = 7}, winGoPos = {x = 20, y = 20, z = 7}, roomPoints = {leftUpPoint = {x = 1, y = 1, z = 7}, rightDownPoint = {x = 2, y = 2, z = 7}}, monsters = { {monsterName = "Demon", createPos = {x = 2, y = 2, z = 7}}, }, players = { {playerPos = {x = 1, y = 1, z = 7}}, } } function doResetSKRoom(toPos) local left, right = SKDeathRoom.roomPoints.leftUpPoint, SKDeathRoom.roomPoints.rightDownPoint for x = left.x, right.x do for y = left.y, right.y do for z = left.z, right.z do local creature = getTopCreature({x = x, y = y, z = z}).uid if isPlayer(creature) then doTeleportThing(creature, toPos, true, true) else doRemoveCreature(creature) end end end end setGlobalStorageValue(SKDeathRoom.globalStorage, 0) end ACTION: -- <action actionid="ALGUMID" event="script" value="ARQUIVO.lua"/> function onUse(cid, item, frompos, itemEx, topos) if getGlobalStorageValue(SKDeathRoom.globalStorage) <= 0 then local count = 0 for i, player in pairs(SKDeathRoom.players) do local creature = getTopCreature(player.playerPos).uid if isPlayer(creature) then count = count+1 end end if #count == #SKDeathRoom.players then for i, player in pairs(SKDeathRoom.players) do local creature = getTopCreature(player.playerPos).uid doTeleportThing(creature, SKDeathRoom.playerToPos, true, true) end for i, monster in pairs(SKDeathRoom.monsters) do local monster = doCreateMonster(monster.monsterName, monster.createPos) registerCreatureEvent(monster, "SKMonsterDeath") end addEvent(doResetSKRoom(SKDeathRoom.resetGoPos), SKDeathRoom.time*1000) setGlobalStorageValue(SKDeathRoom.globalStorage, 1) else return doPlayerSendCancel(cid, "You need "..#SKDeathRoom.players.." player"..(#SKDeathRoom.players > 1 and 's' or '').." to enter in this room.") end else return doPlayerSendCancel(cid, "Only one at a time, this room is occupied.") end return true end CREATURESCRIPT: -- <event type="death" name="SKMonsterDeath" event="script" value="ARQUIVO.lua"/> function onDeath(cid, corpse, deathList) setGlobalStorageValue(SKDeathRoom.globalStorage, 0) addEvent(doResetSKRoom(SKDeathRoom.winGoPos), SKDeathRoom.time*1000) return true end É isso pessoal, mudei o total de votos para 15, boa sorte aos desafiantes. Editado Maio 29, 2015 10 anos por luanluciano93 (veja o histórico de edições) STYLLER OT 2022
Postado Maio 29, 2015 10 anos Se não fosse pela função doResetSKRoom() do script 3, eu teria votado nele, não achei muito legal o metódo. Voto no script 2 pela lógica.
Postado Maio 29, 2015 10 anos O terceiro. Tanto o segundo quanto o primeiro não funcionam como deveriam.
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.