drakylucas 159 Postado Abril 21, 2011 Share Postado Abril 21, 2011 (editado) Script testado em TFS 0.3.6 Crying Dansom Créditos: 100% Draky Lucas[eu] Qualquer erro me avise que arrumarei. Provavelmente funcionará em qualquer versão acima de 8.54, ja abaixo eu nao confirmo mais não custa testar Como funciona? o ADM digita !war open para ativar a war, e !war close na hora de terminar a war. A Ultima guild que puxar a alavanca antes de terminar a war é considerada a vencedora do evento. Vamos começar: Atualizado: corrigido erro pelo Demonbholder [dava só em alguns pois eram desatualizados] em data/lib/050-functions.lua ache a função isInArea, deletem-la e substituam-la por essa: function isInArea(arr, arr1, arr2) if (arr.x <= arr1.x and arr.x >= arr2.x) or (arr.x >= arr1.x and arr.x <= arr2.x) then if (arr.y <= arr1.y and arr.y >= arr2.y) or (arr.y >= arr1.y and arr.y <= arr2.y) then if (arr.z <= arr1.z and arr.z >= arr2.z) or (arr.z >= arr1.z and arr.z <= arr2.z) then return TRUE end end end return FALSE end em Data/actions/scripts/ crie um arquivo chamado castlewar-action.lua e nele coloque isto local storage = 1755 local emGuerra = 1756 function onUse(cid, item, frompos, item2, topos) if getPlayerGuildId(cid) == nil or getPlayerGuildId(cid) <= 0 or getPlayerGuildId(cid) == false then return doPlayerSendCancel(cid,"Voce precisa de uma guild para dominar o castelo!") end if getGlobalStorageValue(emGuerra) <= 0 then return doPlayerSendCancel(cid,"O Castelo nao está em guerra!") end if getPlayerGuildId(cid) == getGlobalStorageValue(storage) then return doPlayerSendCancel(cid,"Sua guild ja está dominando o castelo!") end setGlobalStorageValue(storage,getPlayerGuildId(cid)) doBroadcastMessage("A Guild ".. getPlayerGuildName(cid) .." dominou o castelo!",22) return true end Não mude nada a não ser que não saiba o que esteja fazendo! em Data/actions/actions.xml coloque isso: <action actionid="1755" script="castlewar-action.lua" /> em data/movements/scripts/ crie um arquivo chamado castlewar-movements.lua e coloque isso: local storage = 1755 local emGuerra = 1756 function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor) if getGlobalStorageValue(storage) == getPlayerGuildId(cid) then return true end if getGlobalStorageValue(emGuerra) == 1 then return true else doTeleportThing(cid,fromPosition,false) return doPlayerSendCancel(cid,"Por favor espere a batalha começar!") end return true end em data/movements/movements.xml coloque isso: <movevent type="StepIn" actionid="1756" event="script" value="castlewar-movements.lua"/> em data/talkactions/scripts/ crie um arquivo chamado castlewar-talk.lua e coloque isso: local storage = 1755 local emGuerra = 1756 local firstpos = {x = 582,y = 1290,z = 7} local secondpos = {x = 802,y = 1490,z = 0} function onSay(cid, words, param) if param == "open" then setGlobalStorageValue(emGuerra,1) doBroadcastMessage("A Guerra pelo castelo começou!",22) return true elseif param == "close" then for _, pid in ipairs(getPlayersOnline()) do if isInArea(getCreaturePosition(pid),firstpos,secondpos)then if getGlobalStorageValue(storage) ~= getPlayerGuildId(pid) then doTeleportThing(pid,getTownTemplePosition(getPlayerTown(pid))) doPlayerSendTextMessage(pid, MESSAGE_STATUS_CONSOLE_BLUE,"Desculpe mas sua guild não venceu essa guerra!") else doPlayerSendTextMessage(pid,MESSAGE_STATUS_CONSOLE_BLUE,"Sua guild conseguio dominar o castelo. Parabens por ajuda-la!") end end end setGlobalStorageValue(emGuerra,0) doBroadcastMessage("A Guerra pelo castelo terminou!",22) else return doPlayerSendCancel(cid,"Digite !war open[inicia a guerra] ou !war close[terminaa guerra]") end return true end local firstpos = {x = 582,y = 1290,z = 7} local secondpos = {x = 802,y = 1490,z = 0} ./\ edite essa parte com forme no tutorial das SS's e em data/talkactions/talkactions.xml adicione isso: <talkaction log="yes" words="!war" access="5" event="script" value="castlewar-talk.lua"/> Tutorial: MAPA Preencha todo o castelo com PVP TileZone, exceto a parte de caça para a guild dominante [que deverá ficar no subsolo do castelo] Depois siga o mapinha [nao zoapq fiz em 2 min pa demonstrar kpoekopkepo...] SS1: Castelo inteiro [nao zoa plz kkk] http://img714.imageshack.us/i/ss1ay.jpg/ Resto de instalações: http://img713.imageshack.us/i/alavanca.jpg/ http://img834.imageshack.us/i/entradars.jpg/ ----- .\/ essas SS nao sao na lib mais, agora é na TALKACTION http://img849.imageshack.us/i/secondpos.jpg/ http://img6.imageshack.us/i/firstpos.jpg/ .---- ./\ Podem postar em outros fórums, desde que fale que o criador fui eu [Draky Lucas] e que foi retirado do XTIBIA! EDITED: Agora esta como o Demonbholder deu a ideia [teleporta só quem nao vencer] Editado Maio 6, 2011 por DrakyLucas Link para o comentário Compartilhar em outros sites More sharing options...
coyotestark 24 Postado Abril 21, 2011 Share Postado Abril 21, 2011 carak me interessei muito por ele. espero que funfe em meu ot de wodbo, ja que a arena ta bugada. man, tem um problema cm isso em meu ot quando eu digo "xwar" coloquei assim pq "!" nao funciona em meu ot. belesa quando eu falo xwar ele diz "Digite !war open[inicia a guerra] ou !war close[terminaa guerra]" mas se eu colocer "xwar open" nao da nada e o nome aparece ocmo se eu estivese dizendo algo. como reparar isso? Link para o comentário Compartilhar em outros sites More sharing options...
drakylucas 159 Postado Abril 21, 2011 Autor Share Postado Abril 21, 2011 (editado) Edited: reinstala o sistema [só os scripts.. o mapa ta certo] e teste dinovo.. PS: Agora a posição firstpos e secondpos é na talkaction e não na lib.. pode deletar a lib se quiser =D qlqr duvida drakylucas@hotmail.com Editado Abril 21, 2011 por DrakyLucas Link para o comentário Compartilhar em outros sites More sharing options...
Nibelins 132 Postado Abril 21, 2011 Share Postado Abril 21, 2011 (editado) elseif param == "close" then for _, pid in ipairs(getPlayersOnline()) do if isInArea(getCreaturePosition(pid),firstpos,secondpos)then doPlayerSendTextMessage(pid, MESSAGE_STATUS_CONSOLE_BLUE,"A Guerra acabou, todos foram teleportados para fora!") end end gostaria de sabe pra que server essa função pois somente essa função não fuciona outra pergunta como o players qye esta dentro do castelo sera teleportado pra fora que nao entendi Editado Abril 21, 2011 por Nibelins Link para o comentário Compartilhar em outros sites More sharing options...
drakylucas 159 Postado Abril 21, 2011 Autor Share Postado Abril 21, 2011 (editado) Edit: Nibelins tipo vc ta com a versao da lib.. atualiza ele ae pa esse dai que teleporta etc....ve se tem algum outro erro =D for _, pid in ipairs(getPlayersOnline()) do if isInArea(getCreaturePosition(pid),firstpos,secondpos)then doTeleportThing(pid,getTownTemplePosition(getPlayerTown(pid)),false) doPlayerSendTextMessage(pid, MESSAGE_STATUS_CONSOLE_BLUE,"A Guerra acabou, todos foram teleportados para fora!") end end ficou assim ./\ ... isso pega o cid de todos os players online, o isInArea verifica se ta entre essas posições e se sim teleporta e manda msg po player =D Edit: aeee agora que vi esse foi meu 200º post!!!! =D Pessoal se querem falar comigo de noite em dias de semana fico no btkserver.servegame.com [war 24/7] ou fala pelo msn.. eu nao mantenho adicionado, aceito e deleto mais tu pode manda msg e eu responde mas eu nao vou falar com vcs atoa! =D flw e se tiver algum erro avisa Editado Abril 21, 2011 por DrakyLucas Link para o comentário Compartilhar em outros sites More sharing options...
Demonbholder 420 Postado Abril 21, 2011 Share Postado Abril 21, 2011 (editado) Hm, ótimo sistema, ficou interessante, parabéns e obrigado por compartilhar com o fórum. Uma dica, quando for checar quem esta na area no war close, poderia comparar o id da guild do jogardor com o globalStorage, ai só teleporta quem não for da guild que dominou o castelo. Exemplo: if isInArea(getCreaturePosition(pid),firstpos,secondpos) and getGlobalStorageValue(storage) ~= getPlayerGuildId(pid) then Só uma idéia, tu quem sabe, e mais uma vez, ótimo sistema. Editado Abril 21, 2011 por Demonbholder Link para o comentário Compartilhar em outros sites More sharing options...
Kydrai 146 Postado Abril 22, 2011 Share Postado Abril 22, 2011 Fico bom o sistema, parabéns. Se fizer o que o Demonbholder falou acho que fica ainda melhor. Link para o comentário Compartilhar em outros sites More sharing options...
Nibelins 132 Postado Abril 22, 2011 Share Postado Abril 22, 2011 sim hehe no meu ultimo poste esqueci de da os parabens ------------------------------------------------------ sobre meu problema fiz todas as modificações mudei todos os script deacordo sua atualização mais continuo com o problema script pega tudo perfeito menos teleporta os players que estao no castelo continua ficando dentro do castelo local storage = 1755 local emGuerra = 1756 local firstpos = {x = 1010,y = 997,z = 7} local secondpos = {x = 1020,y = 1007,z = 0} function onSay(cid, words, param) if param == "open" then setGlobalStorageValue(emGuerra,1) doBroadcastMessage("A Guerra pelo castelo começou!",22) return true elseif param == "close" then for _, pid in ipairs(getPlayersOnline()) do if isInArea(getCreaturePosition(pid),firstpos,secondpos)then doTeleportThing(pid,getTownTemplePosition(getPlayerTown(pid)),false) doPlayerSendTextMessage(pid, MESSAGE_STATUS_CONSOLE_BLUE,"A Guerra acabou, todos foram teleportados para fora!") end end setGlobalStorageValue(emGuerra,0) doBroadcastMessage("A Guerra pelo castelo terminou!",22) else return doPlayerSendCancel(cid,"Digite !war open[inicia a guerra] ou !war close[terminaa guerra]") end return true end fiz ate um castelo igual ao seu pra testa mais funciona tudo menos teleport dos players pra fora do castelo Link para o comentário Compartilhar em outros sites More sharing options...
drakylucas 159 Postado Abril 22, 2011 Autor Share Postado Abril 22, 2011 Nibelins, os players que serao teleportados tem que estar entre essas posições: local firstpos = {x = 1010,y = 997,z = 7} local secondpos = {x = 1020,y = 1007,z = 0} Ow demon/kydrai.. vo faze aquilo entao ja que acham melhor xD Link para o comentário Compartilhar em outros sites More sharing options...
LOrDoS 0 Postado Abril 25, 2011 Share Postado Abril 25, 2011 Mano da o seguinte erro [25/04/2011 20:17:32] [Error - TalkAction Interface] [25/04/2011 20:17:32] data/talkactions/scripts/castle.lua:onSay [25/04/2011 20:17:32] Description: [25/04/2011 20:17:32] data/lib/032-position.lua:2: attempt to index global 'position' (a nil value) [25/04/2011 20:17:32] stack traceback: [25/04/2011 20:17:32] data/lib/032-position.lua:2: in function 'isInArea' [25/04/2011 20:17:32] data/talkactions/scripts/castle.lua:12: in function <data/talkactions/scripts/castle.lua:5> Isso da na hora de !war close Tem como ajudar? Link para o comentário Compartilhar em outros sites More sharing options...
tinfer4 2 Postado Abril 26, 2011 Share Postado Abril 26, 2011 (editado) Só uma pequena sugestão,porque não fazer por mods? A configuração fica mais prática. Ótimo sistema meu camarada,tópico recomendado! Editado Abril 26, 2011 por Fault Link para o comentário Compartilhar em outros sites More sharing options...
Demonbholder 420 Postado Abril 26, 2011 Share Postado Abril 26, 2011 (editado) Hmm, o cara deu uma boa idéia, você poderia adicionar a versão mod, fica mais fácil e pratico para os que estão iniciando. Até mais. Edit: @LOrDoS Pelo que eu vi o problema é na sua função de isInArea, vou ver se consigo refaze-la e posto aqui. Vai em data/lib, procura onde ta a função isInArea e substitui por essa: function isInArea(position, firstpos, secondpos) local posx = firstpos.x > secondpos.x and secondpos.x or firstpos.x local posx2 = posx == firstpos.x and secondpos.x or firstpos.x local posy = firstpos.y > secondpos.y and secondpos.y or firstpos.y local posy2 = posy == firstpos.y and secondpos.y or firstpos.y local posz = firstpos.z > secondpos.z and secondpos.z or firstpos.z local posz2 = posz == firstpos.z and secondpos.z or firstpos.z local t = {} for pos = posx, posx2 do if pos == position.x then table.insert(t, TRUE) break end end for pos = posy, posy2 do if pos == position.y then table.insert(t, TRUE) break end end for pos = posz, posz2 do if pos == position.z then table.insert(t, TRUE) break end end return #t == 3 and TRUE or FALSE end Ou essa que ta menor: function isInArea(arr, arr1, arr2) if (arr.x <= arr1.x and arr.x >= arr2.x) or (arr.x >= arr1.x and arr.x <= arr2.x) then if (arr.y <= arr1.y and arr.y >= arr2.y) or (arr.y >= arr1.y and arr.y <= arr2.y) then if (arr.z <= arr1.z and arr.z >= arr2.z) or (arr.z >= arr1.z and arr.z <= arr2.z) then return TRUE end end end return FALSE end Eu fiz as duas, não se preocupem pois devem funcionar. Editado Maio 1, 2011 por Demonbholder Link para o comentário Compartilhar em outros sites More sharing options...
LOrDoS 0 Postado Abril 26, 2011 Share Postado Abril 26, 2011 Ihuuuu!! Deu certoo Manoo Vlww! Mais tive que fazer assim ! se alguem que tiver o mesmo problema que o meu, é so ir na pasta Lib e adicionar na pasta position e colocar oque o Demonbholder mando *-* Vlww ae hihi Uma coisa que eu tava testando e reparei, Exemplo fui com a minha guild e ganhei! o GM fecha o evento com o !war close, e a minha guild que ganho fica la dentro , Mais fica la dentro e eterno até o gm reabrir o evento de volta e outra guild clicar na alavanca, e ganhar e ai vai indo! Devia ter um comando que o gm usa-se depois que a guerra acabar e os player que ficaram la dentro que ganharam, o gm Usar os comando pra fechar o evento mesmo Que ai nen os vencedores podem ficar la dentro, Sei la é um palpite, DO mesmo modo Ta muito bom mesmo o script Amei *-* Hihih Vo por no meu novo ot que ta pra Entrar ;D Tem que ter criatividade pra essas coisas aopekoaekoae e saber oque fazer pra treta funcar! e Tu sabe *-* e ajuda o noob aki aueihauehauie Vlww Link para o comentário Compartilhar em outros sites More sharing options...
MatheusDiasLima 0 Postado Maio 1, 2011 Share Postado Maio 1, 2011 Muito útil. Já coloquei no meu server. Obrigado.. REP+ Link para o comentário Compartilhar em outros sites More sharing options...
mastercabuloso 0 Postado Maio 1, 2011 Share Postado Maio 1, 2011 Kara Tenho que adimitir tava Muito Bom Mais tem 1 Grande Erro Que é quando eu acabar a guerra Volta Pra fora Oque tuh boto n Fuciona Então Vai Uma Dica Para Os Kara Pra Muda O nome Quando der !war close Apareçer O Portão Está Fechado E Corram para O tp De SAida Do Castelo Para Não Serem Mortos. Foi Oque Eu Fiz Oia Tenta Ageita Isso. Fiko Muito Bom tudo Obg Por TRazer por Xtibia. By: MasterCabuloso Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados