
sanf
Membro
-
Registro em
-
Última visita
Histórico de Curtidas
-
sanf deu reputação a xWhiteWolf em New Library v. 1.2Fala galera, hoje vim trazer pra vocês uma nova biblioteca de funções que eu venho desenvolvendo, pretendo ir atualizando esse tópico constantemente sempre adicionando funções novas e explicando a utilização delas. Algumas funções que eu coloquei aqui estão presentes na OTAL também, porém algumas eu fiz pequenas correções de forma que essa lib poderia facilmente substituir a OTAL sem grandes problemas (pelo menos se você utilizava apenas as funções básicas da otal)
Todas as funções que não tem -- nome do autor do lado dela foram feitas por mim, xWhiteWolf ou Night Wolf (NW). O restante delas são créditos dos devidos autores, apenas coloquei pois considero funções vitais no server de cada um. Crie um arquivo em data/lib chamado 075 - White Wolf Functions.lua e coloque o seguinte código dentro:
Agora eu vou explicar oque cada função faz porque de nada adianta lançar uma lib e não explicar oque ela faz não é mesmo? hahaha
Obs inicial: quando uma função tiver em seus parametros um [] significa que oque está dentro do colchetes não é um parâmetro obrigatório.
Como usar: doShowTimeByPos(cid, getCreaturePosition(cid), 20, 20)
Irá fazer uma contagem regressiva na posição que o player se encontra começando de 20 e mandando a mensagem na mesma cor da fala dos monstros.
Essa função é bem útil em actions/spells para fazer contagem de tempo em runas como a magic wall e ver quanto tempo falta pra magic wall sumir)
Obs: Espero que ajude bastante pessoas a entender sobre funções, eu utilizei cid como o principal uid das funções nos exemplos mas você pode muito bem utilizar outros uids, fica a critério seu.
Qualquer dúvida comentem abaixo que eu vou tentar ajudar da melhor maneira.
Ahhh, isso daí foi testado em 8.54 mas deve funcionar em quase todas as versões que tenham as funções básicas do TFS.
EDIT: Pessoal, agora é sério, essa lib tem fácil umas 600 linhas, das quais umas 500 eu devo ter codado sozinho (na mão, linha por linha). Eu tive todo o trabalho de testar cada uma delas e oque eu peço é o mínimo de gratidão e respeito. Se eu te ajudei clique em Gostei, se você tiver alguma dúvida eu to me colocando a disposição de responder qualquer coisa relacionada ao tópico, mesmo que você não saiba nem oque é uma lib apenas venha aqui e escreva sua dúvida.
EDIT 2: Duas novas funções adicionas, espero que gostem!
EDIT 3: Três novas funções adicionadas juntamente com suas respectivas explicações.
-
sanf deu reputação a DukeeH em Mudança no TFStem que compilar.
otserv.cpp, remover:
<< "> WARNING: This method is completely unsafe!" << std::endl << "> Please set encryptionType = \"sha1\" (or any other available method) in config.lua" << std::endl; boost::this_thread::sleep(boost::posix_time::seconds(30));
-
sanf deu reputação a DukeeH em Vocação para usar action!local function tameMonster(cid, item, itemEx, tame, run, broken) n = math.random(100) if n <= broken then doCreatureSay(cid, "O item quebrou! :@", TALKTYPE_ORANGE_1) doRemoveItem(item.uid) elseif n > broken and n <= (tame+broken) then doRemoveItem(item.uid) doCreatureSay(cid, "Montado com sucesso! :D", TALKTYPE_ORANGE_1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce domou com sucesso "..getCreatureName(itemEx.uid)..".") return true elseif n > (tame+broken) and n <= (tame+broken+run) then doCreatureSay(cid, "O monstro escapou", TALKTYPE_ORANGE_1) doRemoveCreature(itemEx.uid) else doCreatureSay(cid, "Tente denovo!! :(", TALKTYPE_ORANGE_1) end return false end local function inArray(table, value) for i,v in pairs(table) do if (v.name == string.lower(value)) then return i end end return 0 end local mounts = { {item = 13307, name = "wailing widow", id = 1, tame=60, run=20, broken=20}, {item = 13298, name = "terror bird", id = 2, tame=40, run=20, broken=40}, {item = 5907, name = "bear", id = 3, tame=90, run=5, broken=5}, {item = 13295, name = "black sheep", id = 4, tame=40, run=30, broken=30}, {item = 13293, name = "midnight panther", id = 5, tame=60, run=20, broken=20}, {item = 13538, name = "panda", id = 19, tame=50, run=25, broken=25}, {item = 13539, name = "enraged white deer", id = 18, tame=70, run=15, broken=15}, {item = 13294, name = "draptor", id = 6, tame=60, run=20, broken=20}, {item = 13537, name = "donkey", id =13, tame=40, run=30, broken=30}, {item = 13305, name = "crustacea gigantica", id = 7, tame=80, run=10, broken=10}, {item = 13536, name = "crystal wolf", id = 16, tame=60, run=20, broken=20}, {item = 13247, name = "boar", id = 10, tame=80, run=10, broken=10}, {item = 13498, name = "sandstone scorpion", id = 21, tame=70, run=10, broken=20}, {item = 13508, name = "slug", id = 14, tame=60, run=20, broken=20}, {item = 13535, name = "dromedary", id = 20, tame=60, run=20, broken=20}, {item = 13291, name = "undead cavebear", id = 12, tame=70, run=10, broken=20}, {item = 13939, name = "fire horse", id = 22, tame=60, run=20, broken=20}, {item = 13939, name = "gray horse", id = 29, tame=60, run=20, broken=20}, {item = 13939, name = "brown war horse", id = 17, tame=60, run=20, broken=20}, {item = 15546, name = "lady bug", id = 27, tame=70, run=10, broken=20}, {item = 15545, name = "manta", id = 28, tame=60, run=20, broken=20}, {item = 13938, name = "uniwheel", id = 15, tame=70, run=15, broken=15}, {item = 13292, name = "tin lizzard", id = 8, tame=70, run=15, broken=15}, {item = 15546, name = "lady bug", id = 27, tame=70, run=15, broken=15}, {item = 15545, name = "manta ray", id = 28, tame=70, run=15, broken=15}, {item = 18447, name = "ironblight", id = 30, tame=70, run=15, broken=15}, {item = 18448, name = "magma crawler", id = 31, tame=70, run=15, broken=15}, {item = 18449, name = "dragonling", id = 32, tame=70, run=15, broken=15}, {item = 18516, name = "gnarlhound", id = 33, tame=70, run=15, broken=15}, } function onUse(cid, item, fromPosition, itemEx, toPosition) if isCreature(itemEx.uid) then if isPaladin(cid) or isKnight(cid) then if inArray(mounts, getCreatureName(itemEx.uid)) > 0 then i = inArray(mounts, getCreatureName(itemEx.uid)) if item.itemid == mounts[i].item and not getPlayerMount(cid, mounts[i].id) then if tameMonster(cid, item, itemEx, mounts[i].tame, mounts[i].run, mounts[i].broken) then doSendMagicEffect(fromPosition, CONST_ME_MAGIC_BLUE) doRemoveCreature(itemEx.uid) doPlayerAddMount(cid, mounts[i].id) else doSendMagicEffect(toPosition, CONST_ME_POFF) end end end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, "Somente knights e paladins podem usar o item.") end end return true end
-
sanf deu reputação a NighteyeTV em Ajuda com função !!Aqui está amigo, não testei, mas acho que se souber configurar, dá certinho... Estou na escola agora, dps vejo direito caso tenha bugs...
Apenas usei um pouco da noção de programação, procuro entender mais o script, muitas vezes pessoas não dão nada na mão assim, ainda mais coisas simples.... Vlws
@sanf
-
sanf deu reputação a Reds em Alavanca que remove varias pedras!function onUse(cid, item, toPosition) rock1pos = {x=XXXX, y=YYYY, z=ZZ, stackpos=1} -- Posição da Pedra rock2pos = {x=XXXX, y=YYYY, z=ZZ, stackpos=1} rock3pos = {x=XXXX, y=YYYY, z=ZZ, stackpos=1} rock4pos = {x=XXXX, y=YYYY, z=ZZ, stackpos=1} rock5pos = {x=XXXX, y=YYYY, z=ZZ, stackpos=1} rock6pos = {x=XXXX, y=YYYY, z=ZZ, stackpos=1} rock7pos = {x=XXXX, y=YYYY, z=ZZ, stackpos=1} rock8pos = {x=XXXX, y=YYYY, z=ZZ, stackpos=1} rock9pos = {x=XXXX, y=YYYY, z=ZZ, stackpos=1} rock10pos = {x=XXXX, y=YYYY, z=ZZ, stackpos=1} getrock1 = getThingfromPos(rock1pos) UniID = 3331 -- UniqueID que vai ser adicionado na alavanca rockID = 1304 -- ID da pedra if item.uid == UniID and item.itemid == 1945 and getrock1.itemid == rockID then doRemoveItem(getrock1.uid, 1) doRemoveItem(getrock2.uid, 1) doRemoveItem(getrock3.uid, 1) doRemoveItem(getrock4.uid, 1) doRemoveItem(getrock5.uid, 1) doRemoveItem(getrock6.uid, 1) doRemoveItem(getrock7.uid, 1) doRemoveItem(getrock8.uid, 1) doRemoveItem(getrock9.uid, 1) doRemoveItem(getrock10.uid, 1) doTransformItem(item.uid, item.itemid+1) doSendMagicEffect(rock1pos, 2) elseif item.uid == UniID and item.itemid == 1946 then doCreateItem(rockID, 1, rock1pos) doCreateItem(rockID, 2, rock1pos) doCreateItem(rockID, 3, rock1pos) doCreateItem(rockID, 4, rock1pos) doCreateItem(rockID, 5, rock1pos) doCreateItem(rockID, 6, rock1pos) doCreateItem(rockID, 7, rock1pos) doCreateItem(rockID, 8, rock1pos) doCreateItem(rockID, 9, rock1pos) doCreateItem(rockID, 10, rock1pos) doTransformItem(item.uid,item.itemid-1) doSendMagicEffect(rock1pos, 13) end return TRUE end
<action uniqueid="3331" script="alavanca.lua"></action>
peguei o codigo do tibiaking e modifiquei, se mesmo assim só remover 3 pedras explica melhor que eu arrumo
-
sanf deu reputação a Reds em Ajuda com funçãoaddEvent(function()
doSendMagicEffect(rock1pos, 25)
end, 500)
addEvent(function()
doSendMagicEffect(rock1pos, 25)
end, 1000)
addEvent(function()
doSendMagicEffect(rock1pos, 25)
end, 1500)
e vai fazendo isso, aumentando de 500 em 500
-
sanf deu reputação a xWhiteWolf em Gran Castle Event (8.54+)Olá pessoa, hoje vim trazer pra vocês um script bem requisitado que inclusive é vendido por alguns scripters. Algumas versões "pioradas" dessse script podem ser encontradas em servidores cópias do Fox World porém nenhum desses scripts chegará aos pés desse daqui que foi arrumado por mim.
Eu não sou o criador do Script, eu peguei qualquer um na internet e só fui arrumando e adicionando coisas que as pessoas reclamavam que não tinha.
O cara que criou a versão que eu editei é esse daqui:
Não vou me prolongar e nem falar mal da versão do Roksas, apenas saibam que eu editei ela praticamente inteira e que agora está 100%.
Aqui tem um pequeno vídeo de como funciona o evento:
Explicação: Gran Castle é um evento para ser feito sozinho ou com a guild, há um limite configurável no script de membros que podem entrar da mesma guild. Em dias determinados é aberto o evento e os players podem entrar ao falar com o NPC Melkrapo. Uma vez dentro do castelo os players batalharão para subir os andares e chegar até a Gran Tower, um monstro lendário que dará glória para aqueles que o derrotarem. Será que você é capaz? Instale no seu server e descubra! Um evento para redefinir o conceito de PVP e onde o seu maior inimigo serão seus semelhantes.
Sem mais delongas vamos começar a instalar esse monstrinho.. porque ele é grande pra caralho.
Agora crie um arquivo em creaturescripts\scripts chamado Gran Tower.lua e adicione o seguinte:
em data\lib crie um arquivo chamado 046-Gran Tower.lua e adicione o seguinte dentro dele:
Agora voltando aos creaturescripts crie um arquivo em scripts chamado Gran Aura.lua e adicione:
E um arquivo chamado Barrier.lua na mesma pasta com o seguinte conteúdo:
Agora em globalevents\globalevents.xml adicione a seguinte linha:
<globalevent name="Gran Tower" interval="60" event="script" value="Gran Tower.lua"/> E adicione o script associado em globalevents\scripts com o nome de Gran Tower.lua:
Agora na pasta monster procure o seu monsters.xml e adicione essas duas linhas:
<monster name="Gran Tower" file="8.4/Gran Tower.xml"/> <monster name="Barrier" file="8.4/barrier.xml"/> Feito isso crie os monstros na pasta data\monster\8.4:
O primeiro se chama barrier.xml e deverá conter:
O segundo se chamará Gran Tower.xml e deverá conter:
Agora vamos para NPC, vá em data\npc e crie um arquivo chamado Melkrapo.xml com o seguinte conteúdo:
Agora em npc\scripts crie um arquivo chamado Melkrapo.lua e adicione o seguinte:
Agora partindo pra spells vá em data\spells e adicione no spells.xml essas linhas:
-
sanf deu reputação a xWhiteWolf em Pedido: spell ou talkaction com a mesma função do exiva!no github oficial do theforgotten server existe um pull request pra transformar exiva pra spell..
vai ser dificil de adaptar pra 0.4.. mas é um começo
https://github.com/otland/forgottenserver/pull/1505/commits/3268de1dc0aa5e2d40b2c4810615a02dae58623b
-
sanf deu reputação a xWhiteWolf em Passagem secreta diferenteEai pessoal, vim trazer hoje um sistema de passagem secreta que um amigo viu no Baiak-wars. Não sei qual server é esse e eu não jogo tibia então pra mim tanto faz mas ele gravou um vídeo, pediu um igual e obviamente eu não fiz um igual porque o sistema dos caras era muito ruim uhauheuhauheuhauheuhuhauhe
Enfim, comecei um script do 0 pra fazer exatamente oque ele queria e foi isso daqui que eu consegui:
Explicação: Você clica em algum item escondido pelo mapa e abre uma passagem secreta que vai durar X segundos (configurável), após esse tempo a passagem se fecha; Note que nessas imagens ele não tá escondido já que tem uma FUCKING ARVORE NO MEIO DE UM DESERTO mas você pode colocar uma tocha em cima de uma parede e colocar o actionid na tocha pra ativar e vai ficar super foda e com muito rpg
Ué, mas oque tem de diferente dos outros scripts?
Bem, ele é super fácil de configurar e ele dá a sensação de que o item foi arrastado :]
Bom, se isso não foi o bastante pra você entender então observe essas fotinhas
Tendo entendido tudo vamos à parte mais legal da coisa (SCRIPTAR!!!!)
Você vai precisar criar um arquivo em actions\scripts chamado hidden.lua com o seguinte conteúdo:
local positions = { [1] = {pos = {x=139, y=77, z=7}, id = 1718}, [2] = {pos = {x=140, y=77, z=7}, id = 1718}, [3] = {pos = {x=139, y=76, z=7}, id = 6855, toid = 6884}, [4] = {pos = {x=140, y=76, z=7}, id = 6855, toid = 6884}, } local createpos = { [1] = {pos = {x=138, y=77, z=7}, id = 1718}, [2] = {pos = {x=141, y=77, z=7}, id = 1718} } local tempo = 5 function onUse(cid, item, frompos, item2, topos) if getTileItemById(positions[1].pos, positions[1].id).uid < 100 then doPlayerSendCancel(cid, "Is already open.") return true end doCreatureSay(cid, "You have ".. tempo .." seconds.", 19) function criar_paredes() for i = 1, #positions do if i <= (#positions/2) then doCreateItem(positions[i].id, 1, positions[i].pos) local obst = getTileItemById(createpos[i].pos, createpos[i].id).uid doSendMagicEffect(createpos[i].pos, 2) doRemoveItem(obst, 1) elseif i > (#positions/2) then local obst = getTileItemById(positions[i].pos, positions[i].toid).uid doTransformItem(obst, positions[i].id) end end return true end for i = 1, #positions do local obst = getTileItemById(positions[i].pos, positions[i].id).uid if i <= (#positions/2) and obst ~= 0 then doRemoveItem(obst, 1) doSendMagicEffect(positions[i].pos, 2) doCreateItem(createpos[i].id, 1, createpos[i].pos) elseif i > (#positions/2) and obst ~=0 then doTransformItem(obst, positions[i].toid) end end addEvent(criar_paredes, tempo*1000) return true end Feito isso vc vai precisar declarar no actions.xml a forma que você quer utilizar o script
<action actionid="27004" script="hidden.lua"/> note que vc pode colocar algum itemid, actionid ou uniqueid de sua escolhe, só lembre de mudar no map editor dependendo da forma que vc escolher.
Agora eu vou ensinar vocês a configurarem o meu monstrinho *-*
aqui você tem o tempo que a passagem vai ficar aberta
aqui você vai editar o seguinte: na primeira são as posições dos itens e seus respectivos id's
posição das duas prateleiras e seus id's
posição das paredes, id dela e pra qual id ela vai ser transformada.
aqui você tem as posições que sua prateleira vai se mover e os id's dela.
Lembrando que você pode se sentir livre pra adicionar oque vc quiser e deixar do seu gosto, só lembrando que se vc quiser adicionar mais items ou diminuir itens é só alterar nas duas tabelas seguindo a mesma lógica. Metade pra prateleira, metade pra parede e uma tabela pra fazer as prateleiras se moverem.
Os créditos são 60% meus e 40% do @MaXwEllDeN por ter me dado um norte no começo do script.
Qualquer coisa comenta aí e dá aquele rep+ pra ajudar ;]
-
sanf deu reputação a Vodkart em [AJUDA] Teleportar jogador ao atingir certo levelfunction onAdvance(cid, skill, oldLevel, newLevel) local storage, lvl, pos = 789654, 141, {x=160,y=54,z=7} if skill == SKILL__LEVEL and newLevel >= lvl and getPlayerStorageValue(cid, storage) <= 0 then doTeleportThing(cid, pos) doPlayerSendTextMessage(cid,22,"Você foi teleportado por ter atingido o level 141.") setPlayerStorageValue(cid, storage, 1) end return true end
-
sanf deu reputação a xWhiteWolf em Frozen OrbEscreve local na frente de cada função e copia pros outros scripts que deve resolver.