Ir para conteúdo

Nych

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Curtir
    Nych recebeu reputação de ArielZeRah em [8.6] CityWar - Evento   
    Este é um evento do tipo lastmanstanding, um evento de guerra que rolava na cidade.
    Foi feito pro tfs 0.4
     
    Informações sobre configuração está na lib.
     
    Em creaturescripts:
    Adicione no login. lua:
    -- Verificar se é primeira vez que loga, pois ao usar storage ele ja começa com -1, -- Então vamos zera-lo para que os frags/kills comecem do 0. if (getPlayerStorageValue(cid, 102089) ~= 1) then setPlayerStorageValue(cid, 102089, 1) setPlayerStorageValue(cid, configCityWar.storageEvent1, 0) setPlayerStorageValue(cid, configCityWar.storageEvent2, 0) end registerCreatureEvent(cid, "WarCityDeath") warCityDeath.lua:
    function onPrepareDeath(cid, lastHitKiller, mostDamageKiller) if isInArea(getCreaturePosition(cid), configCityWar.fromPos, configCityWar.toPos) then setPlayerStorageValue(cid, configCityWar.storageEvent2, getPlayerStorageValue(cid, configCityWar.storageEvent2)+1) setPlayerStorageValue(lastHitKiller, configCityWar.storageEvent1, getPlayerStorageValue(lastHitKiller, configCityWar.storageEvent1)+1) end return true end creaturescripts.xml
    <event type="preparedeath" name="WarCityDeath" event="script" value="warCityDeath.lua"/>  
    globalevents:
    function onTime(interval) OpenEventCityWar() return true end <globalevent name="CityWar" time="13:18" event="script" value="GlobalEventCityWar.lua"/>  
    lib:
    -- Funcionamento: Assim que iniciado o evento, aparecerá um teleport em uma posição pré-determinada na variavel "teleportPosition" que levará -- os jogadores que pretendem entrar no evento para a posição no mapa configurado em "teleportToPosition", nesse lugar será tipo uma sala de espera -- que todos os player vão esperar o tempo configurado em "timeTeleport", para que os portões/pedras configurados em "positionsTrapFlorest" sejam -- abertos e assim iniciando o evento! Não esquece de colocar pvp tool e no logout em toda zona do evento. configCityWar = { teleportId = 1387, -- id do teleport. storageEvent1 = 59682, -- storage no qual será guardada o número de kill do jogador no evento. storageEvent2 = 59683, -- storage no qual será guardada o número de death do jogador no evento. storageGlobal = 92831, -- verifica se evento está aberto ou feixado. teleportToPosition = {x = 97, y = 72, z = 7}, -- posição para qual o teleporte leva. teleportPosition = {x = 32347, y = 32213, z = 7, stackpos = 1}, -- posição que é criado o teleporte na cidade, não é necessario alterar o stackpos. timeOpen = 5, -- tempo em minutos que abrirá o teleporte após iniciar o evento. timeShow = 3, -- tempo em que fica mostrando na tela os tops frags do evento. timeTeleport = 30, -- tempo em minutos para o portal do evento ser fechado altomaticamente, 5 minutos antes do final do evento em si. fromPos = {x = 32366, y = 32213, z = 7}, -- area superior esquerda do mapa do evento. toPos = {x = 32370, y = 32217, z = 7}, -- area inferior direita do mapa do evento. } recompensaCityWar = { {itemid = 2160, quant = 5}, {itemid = 2316, quant = 1} -- pode adicionar quantos premios for necessario, mas a ultima linha deixa sem a virgula final. } function OpenEventCityWar() -- abri o evento. local posTp = configCityWar.teleportPosition for i=0, 255 do posTp.stackpos = i if (getThingfromPos(posTp).itemid == configCityWar.teleportId) then doRemoveItem(getThingfromPos(posTp).uid) end end setGlobalStorageValue(configCityWar.storageGlobal, 1) addEvent(OpenTeleport, 1000*60*configCityWar.timeOpen) doBroadcastMessage("O teleport para a City War iniciará em ".. configCityWar.timeOpen .." minutos!") end function OpenTeleport() -- abri teleporte inicial. doCreateTeleport(configCityWar.teleportId, configCityWar.teleportToPosition, configCityWar.teleportPosition) addEvent(printCityWar, 1000*60*configCityWar.timeShow) addEvent(CloseTeleportCityWar, 1000*60*configCityWar.timeTeleport) end function printCityWar() if (getStatusCityWar()) then showTopsCityWar() addEvent(printCityWar, 1000*60*configCityWar.timeShow) end end function CloseTeleportCityWar() -- fexa teleporte na cidade. local posTp = configCityWar.teleportPosition for i=0, 255 do posTp.stackpos = i if (getThingfromPos(posTp).itemid == configCityWar.teleportId) then doRemoveItem(getThingfromPos(posTp).uid) end end addEvent(CloseEventCityWar, 1000*60*5) doBroadcastMessage("O evento City War acabará em 5 minutos!") end function CloseEventCityWar() -- fecha o evento. setGlobalStorageValue(configCityWar.storageGlobal, 0) removePlayersCityWar() premiarTopsCityWar() zeraStoragesPlayers() doBroadcastMessage("O evento City War foi finalizado, agradecemos aos participantes!") end function removePlayersCityWar() -- remove os players do evento. local online = getPlayersOnline() for i=1, #online do if isInArea(getPlayerPosition(online[i]), configCityWar.fromPos, configCityWar.toPos) then doTeleportThing(online[i], getTownTemplePosition(getPlayerTown(online[i]))) end end end function premiarTopsCityWar() -- adiciona os premios para os ganhadores. for i=1, 5 do local S = string.explode(listaFrags[i], "-") if getPlayerByNameWildcard(S[2]) then for i=1, #recompensaCityWar do doPlayerAddItem(getPlayerByNameWildcard(S[2]), recompensaCityWar[i].itemid, recompensaCityWar[i].quant) end else local parcel = doCreateItemEx(9081, 1) for i=1, #recompensaCityWar do doAddContainerItem(parcel, recompensaCityWar[i].itemid, recompensaCityWar[i].quant) end doPlayerSendMailByName(S[2], parcel) end end end function showTopsCityWar() -- mostra na tela os top frags. local listaFrags = {} local online = getPlayersOnline() for i=1, #online do listaFrags[#listaFrags+1] = getPlayerStorageValue(online[i], configCityWar.storageEvent1) .."-".. getPlayerName(online[i]) .."-".. getPlayerStorageValue(online[i], configCityWar.storageEvent2) end local stringAux = "" for j=1, #listaFrags-1 do for i=1, #listaFrags-j do local listaPosition1 = string.explode(listaFrags[i], "-") local listaPosition2 = string.explode(listaFrags[i+1], "-") if (tonumber(listaPosition1[1]) < tonumber(listaPosition2[1])) then stringAux = listaFrags[i] listaFrags[i] = listaFrags[i+1] listaFrags[i+1] = stringAux end end end local textPrint = "Top City War fraggers: " for i=1, 5 do local listaPosition = string.explode(listaFrags[i], "-") if i~=5 then textPrint = textPrint.. listaPosition[2] .."[".. listaPosition[1] .."/".. listaPosition[3] .."], " else textPrint = textPrint.. listaPosition[2] .."[".. listaPosition[1] .."/".. listaPosition[3] .."]." end end doBroadcastMessage(textPrint) end function getTopsCityWar() -- retorna uma lista com os top frags. local listaFrags = {} local online = getPlayersOnline() for i=1, #online do listaFrags[#listaFrags+1] = getPlayerStorageValue(online[i], configCityWar.storageEvent1) .."-".. getPlayerName(online[i]) .."-".. getPlayerStorageValue(online[i], configCityWar.storageEvent2) end local stringAux = "" for j=1, #listaFrags-1 do for i=1, #listaFrags-j do local listaPosition1 = string.explode(listaFrags[i], "-") local listaPosition2 = string.explode(listaFrags[i+1], "-") if (tonumber(listaPosition1[1]) < tonumber(listaPosition2[1])) then stringAux = listaFrags[i] listaFrags[i] = listaFrags[i+1] listaFrags[i+1] = stringAux end end end return listaFrags end function getStatusCityWar() -- retorna se o evento esta aberto ou feixado. if (getGlobalStorageValue(configCityWar.storageGlobal) > 0) then return true end return false end function zeraStoragesPlayers() db.executeQuery("UPDATE `player_storage` SET `value` = 0 WHERE `key` = '".. configCityWar.storageEvent1 .."';") db.executeQuery("UPDATE `player_storage` SET `value` = 0 WHERE `key` = '".. configCityWar.storageEvent2 .."';") end  
    talkactions:
    function onSay(cid, words, param, channel) OpenEventCityWar() return true end <talkaction log="yes" words="/opencity" access="5" event="script" value="openCityWar.lua"/>  
  2. Curtir
    Nych recebeu reputação de Pedro. em O que está acontecendo com Open Tibia Brasil?   
    Virou forma de obter dinheiro até nos distros cara... Você vai no github, o cara fala que tal sistema funciona, dai não funciona. Ele manda uma lábia tipo "Então se quiser, você pode arrumar"... dai você vai na otland pesquisar sobre, você acha o mesmo cara vendendo o mesmo sistema, dizendo que está totalmente funcional.
    A comunidade aberta não é mais aberta, se você quer obter algo, ou você faz, ou você paga e ainda pagando, capaz de receber incompleto...
     
    Sobre servidores, pior ainda, você só vê gente postando baiak/global/poketibia, não vê mais quase ninguém tentando inovar, colocar mapa customizado, sistema novo... Isso só cria muita gente preguiçosa -  que acha que é só colocar o OT online e ganhar dinheiro - tanto que é só olhar a seção de suporte pra perceber que tem cada pergunta que se o cara tirasse 30 minutos pra ver com calma, resolveria.
     
    Eu to com um serverzinho RPG, mapa customizado, tentando usar o que posso e não cobro/peço donate, porque quero aprender mais sobre o TFS 1.x e suas variações, mas é complicado sem uma comunidade que lhe dê um norte. Mas sinceramente, tá difícil.
  3. Gostei
    Nych recebeu reputação de Cat em O que está acontecendo com Open Tibia Brasil?   
    Gostava mais quando o pessoal colocava tutorial ensinando a colocar do que entregar pronto nas sources, ao menos aprendia algo e não só pegava e já tentava usar.
     
    Sobre o mercado, interessante, não tinha visto ainda... Daí fui ver, achei alguns scripts interessantes, porém há um ou outro que parece apenas script pego na otland e modificado em algumas coisas, o cara simplesmente não fala qual o diferencial do script dele pra um bem parecido, free.
  4. Gostei
    Nych recebeu reputação de Cat em O que está acontecendo com Open Tibia Brasil?   
    Virou forma de obter dinheiro até nos distros cara... Você vai no github, o cara fala que tal sistema funciona, dai não funciona. Ele manda uma lábia tipo "Então se quiser, você pode arrumar"... dai você vai na otland pesquisar sobre, você acha o mesmo cara vendendo o mesmo sistema, dizendo que está totalmente funcional.
    A comunidade aberta não é mais aberta, se você quer obter algo, ou você faz, ou você paga e ainda pagando, capaz de receber incompleto...
     
    Sobre servidores, pior ainda, você só vê gente postando baiak/global/poketibia, não vê mais quase ninguém tentando inovar, colocar mapa customizado, sistema novo... Isso só cria muita gente preguiçosa -  que acha que é só colocar o OT online e ganhar dinheiro - tanto que é só olhar a seção de suporte pra perceber que tem cada pergunta que se o cara tirasse 30 minutos pra ver com calma, resolveria.
     
    Eu to com um serverzinho RPG, mapa customizado, tentando usar o que posso e não cobro/peço donate, porque quero aprender mais sobre o TFS 1.x e suas variações, mas é complicado sem uma comunidade que lhe dê um norte. Mas sinceramente, tá difícil.
  5. Gostei
    Nych recebeu reputação de KotZletY em [8.6] Battleboats - Evento   
    Bem, resolvi liberar tudo que eu achei no meu dropbox da época que usava tfs 0.4 (meados de 2011), aqui está um dos scripts:
    Não lembro quem é o dono ou quem me passou, se tiver algum crédito, deve estar no MOD
     
    Descrição: Todos os jogadores podem se juntar, cada jogador tem seu próprio barco. Depois de participar (digitar o comando ou entrar no teletransporte), o jogador deve enviar todo o equipamento para o depósito. Ele tem 2 minutos para fazê-lo, se não o fizer, vai ser teletratado fora do evento, e em seu lugar, será capaz de entrar em uma nova pessoa disposta. Todos os jogadores estiverem prontos, eles receberão uma mochila especial com o equipamento necessário para Battle Boats - 5x Bomb, 2x Emboscada e 3x Life. Todos os jogadores podem usar vários comandos: vá, pare, direita, esquerda, para cima, para baixo, rápido, lento.

    O objetivo é destruir o barco dos outros jogadores antes do seu.
     
     
    Battle_Boats.otbm
  6. Gostei
    Nych recebeu reputação de KotZletY em [8.6] CityWar - Evento   
    Este é um evento do tipo lastmanstanding, um evento de guerra que rolava na cidade.
    Foi feito pro tfs 0.4
     
    Informações sobre configuração está na lib.
     
    Em creaturescripts:
    Adicione no login. lua:
    -- Verificar se é primeira vez que loga, pois ao usar storage ele ja começa com -1, -- Então vamos zera-lo para que os frags/kills comecem do 0. if (getPlayerStorageValue(cid, 102089) ~= 1) then setPlayerStorageValue(cid, 102089, 1) setPlayerStorageValue(cid, configCityWar.storageEvent1, 0) setPlayerStorageValue(cid, configCityWar.storageEvent2, 0) end registerCreatureEvent(cid, "WarCityDeath") warCityDeath.lua:
    function onPrepareDeath(cid, lastHitKiller, mostDamageKiller) if isInArea(getCreaturePosition(cid), configCityWar.fromPos, configCityWar.toPos) then setPlayerStorageValue(cid, configCityWar.storageEvent2, getPlayerStorageValue(cid, configCityWar.storageEvent2)+1) setPlayerStorageValue(lastHitKiller, configCityWar.storageEvent1, getPlayerStorageValue(lastHitKiller, configCityWar.storageEvent1)+1) end return true end creaturescripts.xml
    <event type="preparedeath" name="WarCityDeath" event="script" value="warCityDeath.lua"/>  
    globalevents:
    function onTime(interval) OpenEventCityWar() return true end <globalevent name="CityWar" time="13:18" event="script" value="GlobalEventCityWar.lua"/>  
    lib:
    -- Funcionamento: Assim que iniciado o evento, aparecerá um teleport em uma posição pré-determinada na variavel "teleportPosition" que levará -- os jogadores que pretendem entrar no evento para a posição no mapa configurado em "teleportToPosition", nesse lugar será tipo uma sala de espera -- que todos os player vão esperar o tempo configurado em "timeTeleport", para que os portões/pedras configurados em "positionsTrapFlorest" sejam -- abertos e assim iniciando o evento! Não esquece de colocar pvp tool e no logout em toda zona do evento. configCityWar = { teleportId = 1387, -- id do teleport. storageEvent1 = 59682, -- storage no qual será guardada o número de kill do jogador no evento. storageEvent2 = 59683, -- storage no qual será guardada o número de death do jogador no evento. storageGlobal = 92831, -- verifica se evento está aberto ou feixado. teleportToPosition = {x = 97, y = 72, z = 7}, -- posição para qual o teleporte leva. teleportPosition = {x = 32347, y = 32213, z = 7, stackpos = 1}, -- posição que é criado o teleporte na cidade, não é necessario alterar o stackpos. timeOpen = 5, -- tempo em minutos que abrirá o teleporte após iniciar o evento. timeShow = 3, -- tempo em que fica mostrando na tela os tops frags do evento. timeTeleport = 30, -- tempo em minutos para o portal do evento ser fechado altomaticamente, 5 minutos antes do final do evento em si. fromPos = {x = 32366, y = 32213, z = 7}, -- area superior esquerda do mapa do evento. toPos = {x = 32370, y = 32217, z = 7}, -- area inferior direita do mapa do evento. } recompensaCityWar = { {itemid = 2160, quant = 5}, {itemid = 2316, quant = 1} -- pode adicionar quantos premios for necessario, mas a ultima linha deixa sem a virgula final. } function OpenEventCityWar() -- abri o evento. local posTp = configCityWar.teleportPosition for i=0, 255 do posTp.stackpos = i if (getThingfromPos(posTp).itemid == configCityWar.teleportId) then doRemoveItem(getThingfromPos(posTp).uid) end end setGlobalStorageValue(configCityWar.storageGlobal, 1) addEvent(OpenTeleport, 1000*60*configCityWar.timeOpen) doBroadcastMessage("O teleport para a City War iniciará em ".. configCityWar.timeOpen .." minutos!") end function OpenTeleport() -- abri teleporte inicial. doCreateTeleport(configCityWar.teleportId, configCityWar.teleportToPosition, configCityWar.teleportPosition) addEvent(printCityWar, 1000*60*configCityWar.timeShow) addEvent(CloseTeleportCityWar, 1000*60*configCityWar.timeTeleport) end function printCityWar() if (getStatusCityWar()) then showTopsCityWar() addEvent(printCityWar, 1000*60*configCityWar.timeShow) end end function CloseTeleportCityWar() -- fexa teleporte na cidade. local posTp = configCityWar.teleportPosition for i=0, 255 do posTp.stackpos = i if (getThingfromPos(posTp).itemid == configCityWar.teleportId) then doRemoveItem(getThingfromPos(posTp).uid) end end addEvent(CloseEventCityWar, 1000*60*5) doBroadcastMessage("O evento City War acabará em 5 minutos!") end function CloseEventCityWar() -- fecha o evento. setGlobalStorageValue(configCityWar.storageGlobal, 0) removePlayersCityWar() premiarTopsCityWar() zeraStoragesPlayers() doBroadcastMessage("O evento City War foi finalizado, agradecemos aos participantes!") end function removePlayersCityWar() -- remove os players do evento. local online = getPlayersOnline() for i=1, #online do if isInArea(getPlayerPosition(online[i]), configCityWar.fromPos, configCityWar.toPos) then doTeleportThing(online[i], getTownTemplePosition(getPlayerTown(online[i]))) end end end function premiarTopsCityWar() -- adiciona os premios para os ganhadores. for i=1, 5 do local S = string.explode(listaFrags[i], "-") if getPlayerByNameWildcard(S[2]) then for i=1, #recompensaCityWar do doPlayerAddItem(getPlayerByNameWildcard(S[2]), recompensaCityWar[i].itemid, recompensaCityWar[i].quant) end else local parcel = doCreateItemEx(9081, 1) for i=1, #recompensaCityWar do doAddContainerItem(parcel, recompensaCityWar[i].itemid, recompensaCityWar[i].quant) end doPlayerSendMailByName(S[2], parcel) end end end function showTopsCityWar() -- mostra na tela os top frags. local listaFrags = {} local online = getPlayersOnline() for i=1, #online do listaFrags[#listaFrags+1] = getPlayerStorageValue(online[i], configCityWar.storageEvent1) .."-".. getPlayerName(online[i]) .."-".. getPlayerStorageValue(online[i], configCityWar.storageEvent2) end local stringAux = "" for j=1, #listaFrags-1 do for i=1, #listaFrags-j do local listaPosition1 = string.explode(listaFrags[i], "-") local listaPosition2 = string.explode(listaFrags[i+1], "-") if (tonumber(listaPosition1[1]) < tonumber(listaPosition2[1])) then stringAux = listaFrags[i] listaFrags[i] = listaFrags[i+1] listaFrags[i+1] = stringAux end end end local textPrint = "Top City War fraggers: " for i=1, 5 do local listaPosition = string.explode(listaFrags[i], "-") if i~=5 then textPrint = textPrint.. listaPosition[2] .."[".. listaPosition[1] .."/".. listaPosition[3] .."], " else textPrint = textPrint.. listaPosition[2] .."[".. listaPosition[1] .."/".. listaPosition[3] .."]." end end doBroadcastMessage(textPrint) end function getTopsCityWar() -- retorna uma lista com os top frags. local listaFrags = {} local online = getPlayersOnline() for i=1, #online do listaFrags[#listaFrags+1] = getPlayerStorageValue(online[i], configCityWar.storageEvent1) .."-".. getPlayerName(online[i]) .."-".. getPlayerStorageValue(online[i], configCityWar.storageEvent2) end local stringAux = "" for j=1, #listaFrags-1 do for i=1, #listaFrags-j do local listaPosition1 = string.explode(listaFrags[i], "-") local listaPosition2 = string.explode(listaFrags[i+1], "-") if (tonumber(listaPosition1[1]) < tonumber(listaPosition2[1])) then stringAux = listaFrags[i] listaFrags[i] = listaFrags[i+1] listaFrags[i+1] = stringAux end end end return listaFrags end function getStatusCityWar() -- retorna se o evento esta aberto ou feixado. if (getGlobalStorageValue(configCityWar.storageGlobal) > 0) then return true end return false end function zeraStoragesPlayers() db.executeQuery("UPDATE `player_storage` SET `value` = 0 WHERE `key` = '".. configCityWar.storageEvent1 .."';") db.executeQuery("UPDATE `player_storage` SET `value` = 0 WHERE `key` = '".. configCityWar.storageEvent2 .."';") end  
    talkactions:
    function onSay(cid, words, param, channel) OpenEventCityWar() return true end <talkaction log="yes" words="/opencity" access="5" event="script" value="openCityWar.lua"/>  
  7. Gostei
    Nych recebeu reputação de luanluciano93 em [8.6] CityWar - Evento   
    Este é um evento do tipo lastmanstanding, um evento de guerra que rolava na cidade.
    Foi feito pro tfs 0.4
     
    Informações sobre configuração está na lib.
     
    Em creaturescripts:
    Adicione no login. lua:
    -- Verificar se é primeira vez que loga, pois ao usar storage ele ja começa com -1, -- Então vamos zera-lo para que os frags/kills comecem do 0. if (getPlayerStorageValue(cid, 102089) ~= 1) then setPlayerStorageValue(cid, 102089, 1) setPlayerStorageValue(cid, configCityWar.storageEvent1, 0) setPlayerStorageValue(cid, configCityWar.storageEvent2, 0) end registerCreatureEvent(cid, "WarCityDeath") warCityDeath.lua:
    function onPrepareDeath(cid, lastHitKiller, mostDamageKiller) if isInArea(getCreaturePosition(cid), configCityWar.fromPos, configCityWar.toPos) then setPlayerStorageValue(cid, configCityWar.storageEvent2, getPlayerStorageValue(cid, configCityWar.storageEvent2)+1) setPlayerStorageValue(lastHitKiller, configCityWar.storageEvent1, getPlayerStorageValue(lastHitKiller, configCityWar.storageEvent1)+1) end return true end creaturescripts.xml
    <event type="preparedeath" name="WarCityDeath" event="script" value="warCityDeath.lua"/>  
    globalevents:
    function onTime(interval) OpenEventCityWar() return true end <globalevent name="CityWar" time="13:18" event="script" value="GlobalEventCityWar.lua"/>  
    lib:
    -- Funcionamento: Assim que iniciado o evento, aparecerá um teleport em uma posição pré-determinada na variavel "teleportPosition" que levará -- os jogadores que pretendem entrar no evento para a posição no mapa configurado em "teleportToPosition", nesse lugar será tipo uma sala de espera -- que todos os player vão esperar o tempo configurado em "timeTeleport", para que os portões/pedras configurados em "positionsTrapFlorest" sejam -- abertos e assim iniciando o evento! Não esquece de colocar pvp tool e no logout em toda zona do evento. configCityWar = { teleportId = 1387, -- id do teleport. storageEvent1 = 59682, -- storage no qual será guardada o número de kill do jogador no evento. storageEvent2 = 59683, -- storage no qual será guardada o número de death do jogador no evento. storageGlobal = 92831, -- verifica se evento está aberto ou feixado. teleportToPosition = {x = 97, y = 72, z = 7}, -- posição para qual o teleporte leva. teleportPosition = {x = 32347, y = 32213, z = 7, stackpos = 1}, -- posição que é criado o teleporte na cidade, não é necessario alterar o stackpos. timeOpen = 5, -- tempo em minutos que abrirá o teleporte após iniciar o evento. timeShow = 3, -- tempo em que fica mostrando na tela os tops frags do evento. timeTeleport = 30, -- tempo em minutos para o portal do evento ser fechado altomaticamente, 5 minutos antes do final do evento em si. fromPos = {x = 32366, y = 32213, z = 7}, -- area superior esquerda do mapa do evento. toPos = {x = 32370, y = 32217, z = 7}, -- area inferior direita do mapa do evento. } recompensaCityWar = { {itemid = 2160, quant = 5}, {itemid = 2316, quant = 1} -- pode adicionar quantos premios for necessario, mas a ultima linha deixa sem a virgula final. } function OpenEventCityWar() -- abri o evento. local posTp = configCityWar.teleportPosition for i=0, 255 do posTp.stackpos = i if (getThingfromPos(posTp).itemid == configCityWar.teleportId) then doRemoveItem(getThingfromPos(posTp).uid) end end setGlobalStorageValue(configCityWar.storageGlobal, 1) addEvent(OpenTeleport, 1000*60*configCityWar.timeOpen) doBroadcastMessage("O teleport para a City War iniciará em ".. configCityWar.timeOpen .." minutos!") end function OpenTeleport() -- abri teleporte inicial. doCreateTeleport(configCityWar.teleportId, configCityWar.teleportToPosition, configCityWar.teleportPosition) addEvent(printCityWar, 1000*60*configCityWar.timeShow) addEvent(CloseTeleportCityWar, 1000*60*configCityWar.timeTeleport) end function printCityWar() if (getStatusCityWar()) then showTopsCityWar() addEvent(printCityWar, 1000*60*configCityWar.timeShow) end end function CloseTeleportCityWar() -- fexa teleporte na cidade. local posTp = configCityWar.teleportPosition for i=0, 255 do posTp.stackpos = i if (getThingfromPos(posTp).itemid == configCityWar.teleportId) then doRemoveItem(getThingfromPos(posTp).uid) end end addEvent(CloseEventCityWar, 1000*60*5) doBroadcastMessage("O evento City War acabará em 5 minutos!") end function CloseEventCityWar() -- fecha o evento. setGlobalStorageValue(configCityWar.storageGlobal, 0) removePlayersCityWar() premiarTopsCityWar() zeraStoragesPlayers() doBroadcastMessage("O evento City War foi finalizado, agradecemos aos participantes!") end function removePlayersCityWar() -- remove os players do evento. local online = getPlayersOnline() for i=1, #online do if isInArea(getPlayerPosition(online[i]), configCityWar.fromPos, configCityWar.toPos) then doTeleportThing(online[i], getTownTemplePosition(getPlayerTown(online[i]))) end end end function premiarTopsCityWar() -- adiciona os premios para os ganhadores. for i=1, 5 do local S = string.explode(listaFrags[i], "-") if getPlayerByNameWildcard(S[2]) then for i=1, #recompensaCityWar do doPlayerAddItem(getPlayerByNameWildcard(S[2]), recompensaCityWar[i].itemid, recompensaCityWar[i].quant) end else local parcel = doCreateItemEx(9081, 1) for i=1, #recompensaCityWar do doAddContainerItem(parcel, recompensaCityWar[i].itemid, recompensaCityWar[i].quant) end doPlayerSendMailByName(S[2], parcel) end end end function showTopsCityWar() -- mostra na tela os top frags. local listaFrags = {} local online = getPlayersOnline() for i=1, #online do listaFrags[#listaFrags+1] = getPlayerStorageValue(online[i], configCityWar.storageEvent1) .."-".. getPlayerName(online[i]) .."-".. getPlayerStorageValue(online[i], configCityWar.storageEvent2) end local stringAux = "" for j=1, #listaFrags-1 do for i=1, #listaFrags-j do local listaPosition1 = string.explode(listaFrags[i], "-") local listaPosition2 = string.explode(listaFrags[i+1], "-") if (tonumber(listaPosition1[1]) < tonumber(listaPosition2[1])) then stringAux = listaFrags[i] listaFrags[i] = listaFrags[i+1] listaFrags[i+1] = stringAux end end end local textPrint = "Top City War fraggers: " for i=1, 5 do local listaPosition = string.explode(listaFrags[i], "-") if i~=5 then textPrint = textPrint.. listaPosition[2] .."[".. listaPosition[1] .."/".. listaPosition[3] .."], " else textPrint = textPrint.. listaPosition[2] .."[".. listaPosition[1] .."/".. listaPosition[3] .."]." end end doBroadcastMessage(textPrint) end function getTopsCityWar() -- retorna uma lista com os top frags. local listaFrags = {} local online = getPlayersOnline() for i=1, #online do listaFrags[#listaFrags+1] = getPlayerStorageValue(online[i], configCityWar.storageEvent1) .."-".. getPlayerName(online[i]) .."-".. getPlayerStorageValue(online[i], configCityWar.storageEvent2) end local stringAux = "" for j=1, #listaFrags-1 do for i=1, #listaFrags-j do local listaPosition1 = string.explode(listaFrags[i], "-") local listaPosition2 = string.explode(listaFrags[i+1], "-") if (tonumber(listaPosition1[1]) < tonumber(listaPosition2[1])) then stringAux = listaFrags[i] listaFrags[i] = listaFrags[i+1] listaFrags[i+1] = stringAux end end end return listaFrags end function getStatusCityWar() -- retorna se o evento esta aberto ou feixado. if (getGlobalStorageValue(configCityWar.storageGlobal) > 0) then return true end return false end function zeraStoragesPlayers() db.executeQuery("UPDATE `player_storage` SET `value` = 0 WHERE `key` = '".. configCityWar.storageEvent1 .."';") db.executeQuery("UPDATE `player_storage` SET `value` = 0 WHERE `key` = '".. configCityWar.storageEvent2 .."';") end  
    talkactions:
    function onSay(cid, words, param, channel) OpenEventCityWar() return true end <talkaction log="yes" words="/opencity" access="5" event="script" value="openCityWar.lua"/>  
  8. Gostei
    Nych recebeu reputação de Movie em [8.6] CityWar - Evento   
    Este é um evento do tipo lastmanstanding, um evento de guerra que rolava na cidade.
    Foi feito pro tfs 0.4
     
    Informações sobre configuração está na lib.
     
    Em creaturescripts:
    Adicione no login. lua:
    -- Verificar se é primeira vez que loga, pois ao usar storage ele ja começa com -1, -- Então vamos zera-lo para que os frags/kills comecem do 0. if (getPlayerStorageValue(cid, 102089) ~= 1) then setPlayerStorageValue(cid, 102089, 1) setPlayerStorageValue(cid, configCityWar.storageEvent1, 0) setPlayerStorageValue(cid, configCityWar.storageEvent2, 0) end registerCreatureEvent(cid, "WarCityDeath") warCityDeath.lua:
    function onPrepareDeath(cid, lastHitKiller, mostDamageKiller) if isInArea(getCreaturePosition(cid), configCityWar.fromPos, configCityWar.toPos) then setPlayerStorageValue(cid, configCityWar.storageEvent2, getPlayerStorageValue(cid, configCityWar.storageEvent2)+1) setPlayerStorageValue(lastHitKiller, configCityWar.storageEvent1, getPlayerStorageValue(lastHitKiller, configCityWar.storageEvent1)+1) end return true end creaturescripts.xml
    <event type="preparedeath" name="WarCityDeath" event="script" value="warCityDeath.lua"/>  
    globalevents:
    function onTime(interval) OpenEventCityWar() return true end <globalevent name="CityWar" time="13:18" event="script" value="GlobalEventCityWar.lua"/>  
    lib:
    -- Funcionamento: Assim que iniciado o evento, aparecerá um teleport em uma posição pré-determinada na variavel "teleportPosition" que levará -- os jogadores que pretendem entrar no evento para a posição no mapa configurado em "teleportToPosition", nesse lugar será tipo uma sala de espera -- que todos os player vão esperar o tempo configurado em "timeTeleport", para que os portões/pedras configurados em "positionsTrapFlorest" sejam -- abertos e assim iniciando o evento! Não esquece de colocar pvp tool e no logout em toda zona do evento. configCityWar = { teleportId = 1387, -- id do teleport. storageEvent1 = 59682, -- storage no qual será guardada o número de kill do jogador no evento. storageEvent2 = 59683, -- storage no qual será guardada o número de death do jogador no evento. storageGlobal = 92831, -- verifica se evento está aberto ou feixado. teleportToPosition = {x = 97, y = 72, z = 7}, -- posição para qual o teleporte leva. teleportPosition = {x = 32347, y = 32213, z = 7, stackpos = 1}, -- posição que é criado o teleporte na cidade, não é necessario alterar o stackpos. timeOpen = 5, -- tempo em minutos que abrirá o teleporte após iniciar o evento. timeShow = 3, -- tempo em que fica mostrando na tela os tops frags do evento. timeTeleport = 30, -- tempo em minutos para o portal do evento ser fechado altomaticamente, 5 minutos antes do final do evento em si. fromPos = {x = 32366, y = 32213, z = 7}, -- area superior esquerda do mapa do evento. toPos = {x = 32370, y = 32217, z = 7}, -- area inferior direita do mapa do evento. } recompensaCityWar = { {itemid = 2160, quant = 5}, {itemid = 2316, quant = 1} -- pode adicionar quantos premios for necessario, mas a ultima linha deixa sem a virgula final. } function OpenEventCityWar() -- abri o evento. local posTp = configCityWar.teleportPosition for i=0, 255 do posTp.stackpos = i if (getThingfromPos(posTp).itemid == configCityWar.teleportId) then doRemoveItem(getThingfromPos(posTp).uid) end end setGlobalStorageValue(configCityWar.storageGlobal, 1) addEvent(OpenTeleport, 1000*60*configCityWar.timeOpen) doBroadcastMessage("O teleport para a City War iniciará em ".. configCityWar.timeOpen .." minutos!") end function OpenTeleport() -- abri teleporte inicial. doCreateTeleport(configCityWar.teleportId, configCityWar.teleportToPosition, configCityWar.teleportPosition) addEvent(printCityWar, 1000*60*configCityWar.timeShow) addEvent(CloseTeleportCityWar, 1000*60*configCityWar.timeTeleport) end function printCityWar() if (getStatusCityWar()) then showTopsCityWar() addEvent(printCityWar, 1000*60*configCityWar.timeShow) end end function CloseTeleportCityWar() -- fexa teleporte na cidade. local posTp = configCityWar.teleportPosition for i=0, 255 do posTp.stackpos = i if (getThingfromPos(posTp).itemid == configCityWar.teleportId) then doRemoveItem(getThingfromPos(posTp).uid) end end addEvent(CloseEventCityWar, 1000*60*5) doBroadcastMessage("O evento City War acabará em 5 minutos!") end function CloseEventCityWar() -- fecha o evento. setGlobalStorageValue(configCityWar.storageGlobal, 0) removePlayersCityWar() premiarTopsCityWar() zeraStoragesPlayers() doBroadcastMessage("O evento City War foi finalizado, agradecemos aos participantes!") end function removePlayersCityWar() -- remove os players do evento. local online = getPlayersOnline() for i=1, #online do if isInArea(getPlayerPosition(online[i]), configCityWar.fromPos, configCityWar.toPos) then doTeleportThing(online[i], getTownTemplePosition(getPlayerTown(online[i]))) end end end function premiarTopsCityWar() -- adiciona os premios para os ganhadores. for i=1, 5 do local S = string.explode(listaFrags[i], "-") if getPlayerByNameWildcard(S[2]) then for i=1, #recompensaCityWar do doPlayerAddItem(getPlayerByNameWildcard(S[2]), recompensaCityWar[i].itemid, recompensaCityWar[i].quant) end else local parcel = doCreateItemEx(9081, 1) for i=1, #recompensaCityWar do doAddContainerItem(parcel, recompensaCityWar[i].itemid, recompensaCityWar[i].quant) end doPlayerSendMailByName(S[2], parcel) end end end function showTopsCityWar() -- mostra na tela os top frags. local listaFrags = {} local online = getPlayersOnline() for i=1, #online do listaFrags[#listaFrags+1] = getPlayerStorageValue(online[i], configCityWar.storageEvent1) .."-".. getPlayerName(online[i]) .."-".. getPlayerStorageValue(online[i], configCityWar.storageEvent2) end local stringAux = "" for j=1, #listaFrags-1 do for i=1, #listaFrags-j do local listaPosition1 = string.explode(listaFrags[i], "-") local listaPosition2 = string.explode(listaFrags[i+1], "-") if (tonumber(listaPosition1[1]) < tonumber(listaPosition2[1])) then stringAux = listaFrags[i] listaFrags[i] = listaFrags[i+1] listaFrags[i+1] = stringAux end end end local textPrint = "Top City War fraggers: " for i=1, 5 do local listaPosition = string.explode(listaFrags[i], "-") if i~=5 then textPrint = textPrint.. listaPosition[2] .."[".. listaPosition[1] .."/".. listaPosition[3] .."], " else textPrint = textPrint.. listaPosition[2] .."[".. listaPosition[1] .."/".. listaPosition[3] .."]." end end doBroadcastMessage(textPrint) end function getTopsCityWar() -- retorna uma lista com os top frags. local listaFrags = {} local online = getPlayersOnline() for i=1, #online do listaFrags[#listaFrags+1] = getPlayerStorageValue(online[i], configCityWar.storageEvent1) .."-".. getPlayerName(online[i]) .."-".. getPlayerStorageValue(online[i], configCityWar.storageEvent2) end local stringAux = "" for j=1, #listaFrags-1 do for i=1, #listaFrags-j do local listaPosition1 = string.explode(listaFrags[i], "-") local listaPosition2 = string.explode(listaFrags[i+1], "-") if (tonumber(listaPosition1[1]) < tonumber(listaPosition2[1])) then stringAux = listaFrags[i] listaFrags[i] = listaFrags[i+1] listaFrags[i+1] = stringAux end end end return listaFrags end function getStatusCityWar() -- retorna se o evento esta aberto ou feixado. if (getGlobalStorageValue(configCityWar.storageGlobal) > 0) then return true end return false end function zeraStoragesPlayers() db.executeQuery("UPDATE `player_storage` SET `value` = 0 WHERE `key` = '".. configCityWar.storageEvent1 .."';") db.executeQuery("UPDATE `player_storage` SET `value` = 0 WHERE `key` = '".. configCityWar.storageEvent2 .."';") end  
    talkactions:
    function onSay(cid, words, param, channel) OpenEventCityWar() return true end <talkaction log="yes" words="/opencity" access="5" event="script" value="openCityWar.lua"/>  
  9. Gostei
    Nych deu reputação a palubo em Como criar uma nova skill   
    Fala, galera! Beleza?
     
    Sou novo aqui no TK e queria trazer algo para vocês. Dei uma procurada e não achei nada do tipo, então creio que esse tutorial possa ajudar algumas pessoas! 
    O que vou ensinar a vocês é como criar uma skill direto na source, o que permite que você utilize comandos como "getPlayerSkill", "doPlayerAddSkillTry" etc em seus scripts em Lua. Esse tutorial NÃO serve para criar skills de "combate", como sword, axe etc. Esse tipo de skill envolve vários outros parâmetros além do que mostrarei aqui. Quem sabe eu faça um tutorial sobre isso daqui um tempo. 

    Preview de uma skill que criei para meu projeto:

     
    Para este tutorial, eu usei:
     Sources do The Forgotten Server 0.3.7: Aqui serão feitas várias edições, criando a nova skill e tudo que é necessário para a skill funcionar corretamente.  Microsoft Visual Studio 2010 Professional: Utilizei para compilar o TFS com as novas edições. Se não souber compilar, procure em outros tópicos aqui do fórum. Não é meu objetivo aqui ensinar como compilar. É necessário compilar com o MVS? Não. Se você preferir, pode fazer com outros programas.  Notepad++: Usei porque acho um editor de texto simples, prático e funcional. Não gosto de editar os códigos no MVS. Porém sinta-se à vontade para usar o editor que quiser. haha  SQLiteStudio 2.1.4: Será necessário para fazer pequenas alterações para que seu banco de dados funcione corretamente. Se você utiliza MySQL, terá que fazer essas edições por outro programa.  Sources do OTClient: Como utilizo o OTClient em meu servidor, usarei ele para demonstrar como adicionar a barrinha à janela de Skill. Se você utiliza outro client, infelizmente, não poderei dar suporte, já que nunca editei outros clients.  Codeblocks: Usei para compilar o OTClient. Mas pode ser feito com o MVS também. A escolha é sua! Passo 1 - Editar a source do TFS:
     



     
    Passo 2 - Editar o OTClient:
     



     
    Passo 3 - Editar o TFS:
     



     
    Passo 4 - Editar a database:
     



     
    Pronto! Seu servidor já está configurado com a nova skill! Agora você poderá usar Lua para configurá-la! 
     
    Vou dar um exemplo MUITO simples de como isso poderia ser feito em Lua:
     



     
    Claro que essa action acima é algo muito simples, mas, tendo o servidor já configurado, acredito que essas modificações abram uma gama de possibilidades imensas a todos que querem desenvolver uma nova skill. Espero que tenham gostado e que o tutorial seja útil para alguém! haha
     
    Qualquer erro ou bug, me avisem!
     
    Atenciosamente,
    Auro Mota.

Informação Importante

Confirmação de Termo