Histórico de Curtidas
-
Isaque Teixeira recebeu reputação de samlecter em Aumentar limite de efeitosQuando vou copilar aparece isso!
*** No rule to make target `obj-console//const.o'. Stop.
EDIT.
E agora dando isso muitas vezes.
[Linker error] undefined reference to `Game::addMagicEffect(Position const&, unsigned char, bool)'
[Linker error] undefined reference to `Game::addMagicEffect(Position const&, unsigned char, bool)'
[Linker error] undefined reference to `Game::addMagicEffect(std::list<Creature*, std::allocator<Creature*> > const&, Position const&, unsigned char, bool)'
-
Isaque Teixeira deu reputação a Emersonssss em (Resolvido)Player não para de morrerlocal config = { [1] = {hp = 280, mp = 250, MinHP = 100, MinMP = 100}, -- [ID Vocation] = {hp = Qt./LvL, mp = {Qt./LvL, MinHP = Qt. Minima de HP, MinMP = Qt. Minima de MP} [2] = {hp = 280, mp = 250, MinHP = 100, MinMP = 100}, [3] = {hp = 280, mp = 250, MinHP = 100, MinMP = 100}, [4] = {hp = 280, mp = 250, MinHP = 100, MinMP = 100}, [5] = {hp = 280, mp = 250, MinHP = 100, MinMP = 100}, [6] = {hp = 280, mp = 250, MinHP = 100, MinMP = 100}, [7] = {hp = 280, mp = 250, MinHP = 100, MinMP = 100}, [8] = {hp = 280, mp = 250, MinHP = 100, MinMP = 100}, } function onLogin(cid) if getCreatureMaxHealth(cid) < hp*voc.MinHP then setCreatureMaxMana(cid, hp*voc.MinHP) end if getCreatureMaxMana(cid) < hp*voc.MinMP then setCreatureMaxMana(cid, hp*voc.MinMP) end hp = getPlayerLevel(cid) local voc = config[getPlayerVocation(cid)] if (getPlayerLevel(cid) >= 1) then -- if (getPlayerLevel(cid) >= LvL Min Para Ativar) then setCreatureMaxHealth(cid, hp*voc.hp) setCreatureMaxMana(cid, hp*voc.mp) end return true end
-
Isaque Teixeira deu reputação a Wend em [OLD/OTC] Aumentado o Limite de SpritesOiie Galerinha do TK
Clientes com versões anteriores à 9.60 têm um limite de sprites de 65.535. Parece muito, mas logo esse limite é atingido e ficamos impossibilitados de adicionar novos objetos para o servidor/cliente a não ser substituindo alguns sprites. Esse tutorial pretende ensinar como configurar as principais ferramentas para aumentar o limite. A versão utilizada no tutorial foi a 8.60.
Conhecimentos Necessários:
XML
Básico nas ferramentas utilizadas.
Ferramentas Utilizadas:
Object Builder (edita os arquivos dat e spr do cliente) >> Para baixar o programa clique no Nome dele *--*
iTemEditor (edita o arquivo otb, que contém os itens usados no servidor) >> Para baixar o programa clique no Nome dele *--*
OTclient 0.6.5.
Um programa para abrir arquivos LUA.
Remere's Map Editor.
Compilando os Arquivos Estendidos:
1. Abra seus arquivos "spr" e "dat" no Object Builder.
2. Compile os arquivos com a opção extended selecionada.
Obs: Uma vez compilado estendido, a opção extended deverá estar sempre selecionada tanto ao abrir, quanto ao compilar.
Configurando o ItemEditor:
1. Abra o itemEditor, vai em File/ Preferences
2. clique em Browse e escolha o local onde está seu Arquivos "Dat" e "Spr"
3. Marque a Opção Extender
Configurando OTClient:
1. Abra o arquivo things.lua encontrado em modules/game_things
2. Adicione esta linha de código na função load:
function load() local version = g_game.getClientVersion() g_game.enableFeature(GameSpritesU32) -- Linha Adicionada local datPath, sprPath 3.Adicione uma cópia dos arquivos dat e spr estendidos na pasta data/things.
Remere's Map Editor :
Infelizmente o RME não tem suporte pra arquivos estendidos.
A solução mais viável é adicionar uma versão 9.60 junto a versão do seu cliente e compilar os arquivos como 9.60 especialmente para o RME. A versão do RME deve ser 2.2 ou superior.
- Compile na sua versão para usar no cliente e no ItemEditor.
- Compile na versão 9.60 numa pasta separada para usar no RME.
Adicionando a versão:
1. Vá à pasta de instalação do RME e abra o arquivo clients.xml, encontrado na pasta data.
2. Procure a tag do seu cliente e adicione uma linha para versão 9.6
<client name="8.60" otb="8.60" visible="true" data_directory="860"> <otbm version="3"/> <extensions from="8.20 - 8.31"/> <data datversion="8.6" sprversion="7.0" dat="0x4C2C7993" spr="0x4C220594"/> <data datversion="8.6" sprversion="7.0" dat="0x4C6A4CBC" spr="0x4C63F145"/> <data datversion="9.6" sprversion="9.6" dat="0x4FFA74CC" spr="0x4FFA74F9"/> <!-- Versão Extendida --> </client> 3. Compile seus arquivos em uma pasta separada com a versão 9.60.
4. Na versão utilizada, configure o RME para a pasta onde se encontra os arquivos compilados como 9.60
Perguntas Frequentes:
P: Qual o novo limite de sprites após ser estendido?
R: 4.294.967.295
P: Depois que compilar estendido, pode ser usando no cliente da Cip?
R: Não! Seria preciso modificar o cliente para que consiga ler os arquivos.
P: Posso usar o dat editor para modificar os arquivos depois?
R: O ObjectBuilder é um dat/spr editor, mas se você quer usar outro editor, é pouco provável que funcione. Não custa tentar.
Créditos::
EdMignari e sua Equipe -
Isaque Teixeira deu reputação a Avuenja em Pronto para usar | OTCHoje vim trazer um tutorial de como remover o terminal, modules manager, e deixar o ip automático.
Vamos ao tutorial :
Parte Um
Removendo módulos indesejados
Dentro do diretório
\otclient-master\modules\client Você irá abrir o arquivo "client.otmod"
Dentro dele vai ter as seguintes linhas :
load-later: - client_styles - client_locales - client_topmenu - client_background - client_options - client_entergame - client_terminal - client_modulemanager - client_serverlist //- client_stats Essas linhas são os módulos que vão carregar quando o client for aberto, então é só tirar os que você não quer que abra.
Parte Dois
Como deixar o ip automático
Dentro do diretório
\otclient-master modules\client_entergame Você irá abrir o arquivo "entergame.lua"
Dentro da função "Init", você vai procurar por:
if g_app.isRunning() and not g_game.isOnline() then enterGame:show() end E embaixo dessa função você adiciona essa linha :
EnterGame.setUniqueServer('127.0.0.1', 7171, 854, 270, 210) Como configurar essa função:
EnterGame.setUniqueServer(Ip do server, Porta (7171), Versão do server, Largura da janela, Altura da Janela)
Créditos
BananaFight -
Isaque Teixeira deu reputação a xWhiteWolf em (Resolvido)Magia de Buff para :Life, Skill, e manautevosio:
--Spell Method by Night Wolf local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 39) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) local config = { tempo = 15, --- tempo que vai ficar recuperando mana (tempo total) mana = 15, -- quanto de mana ganha a cada intervalo intervalo = 1 --- intervalo que leva pra recuperar X de mana, } local condition = createConditionObject(CONDITION_FOOD) setConditionParam(condition, CONDITION_PARAM_TICKS, config.tempo*1000) setConditionParam(condition, CONDITION_PARAM_BUFF, true) setConditionParam(condition, CONDITION_PARAM_MANAGAIN, config.mana) setConditionParam(condition, CONDITION_PARAM_MANATICKS, config.intervalo*1000) setCombatCondition(combat, condition) function onCastSpell(cid, var) return doCombat(cid, combat, var) end exorisio
--Spell Method by Night Wolf local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 39) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) local config = { tempo = 60, --- tempo que vai durar a spell percent = 20 -- quanto % vai aumentar } local condition = createConditionObject(CONDITION_ATTRIBUTES) setConditionParam(condition, CONDITION_PARAM_TICKS, config.tempo*1000) setConditionParam(condition, CONDITION_PARAM_BUFF, true) setConditionParam(condition, CONDITION_PARAM_SKILL_CLUBPERCENT, 100+config.percent) setConditionParam(condition, CONDITION_PARAM_SKILL_SWORDPERCENT, 100+config.percent) setConditionParam(condition, CONDITION_PARAM_SKILL_AXEPERCENT, 100+config.percent) setConditionParam(condition, CONDITION_PARAM_SKILL_DISTANCEPERCENT, 100+config.percent) setCombatCondition(combat, condition) function onCastSpell(cid, var) return doCombat(cid, combat, var) end utamogransio
--Spell Method by Night Wolf local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 39) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) local config = { tempo = 60, --- tempo que vai durar a spell percent = 25 -- quanto % vai aumentar } local condition = createConditionObject(CONDITION_ATTRIBUTES) setConditionParam(condition, CONDITION_PARAM_TICKS, config.tempo*1000) setConditionParam(condition, CONDITION_PARAM_BUFF, true) setConditionParam(condition, CONDITION_PARAM_SKILL_SHIELDPERCENT, 100+config.percent) setCombatCondition(combat, condition) function onCastSpell(cid, var) return doCombat(cid, combat, var) end vitagransio
--Spell Method by Night Wolf local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 39) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) local config = { tempo = 60, --- tempo que vai durar a spell percent = 25 -- quanto % vai aumentar } local condition = createConditionObject(CONDITION_ATTRIBUTES) setConditionParam(condition, CONDITION_PARAM_TICKS, config.tempo*1000) setConditionParam(condition, CONDITION_PARAM_BUFF, true) setConditionParam(condition, CONDITION_PARAM_STAT_MAXHITPOINTSPERCENT, 100+config.percent) setCombatCondition(combat, condition) function onCastSpell(cid, var) return doCombat(cid, combat, var) end e no spells.xml
<instant name="Buff Mana" words="utevo sio" lvl="40" mana="100" maglv="90" prem="1" aggressive="0" needtarget="1" params="1" exhaustion="1500" needlearn="0" event="script" value="especiais/utevosio.lua"> </instant> <instant name="Buff Skills" words="exori sio" lvl="40" mana="100" maglv="90" prem="1" aggressive="0" needtarget="1" params="1" exhaustion="1500" needlearn="0" event="script" value="especiais/exorisio.lua"> </instant> <instant name="Buff Shield" words="utamo gran sio" lvl="40" mana="100" maglv="120" prem="1" aggressive="0" needtarget="1" params="1" exhaustion="1500" needlearn="0" event="script" value="especiais/utamogransio.lua"> </instant> <instant name="Buff Hit Points" words="vita gran sio" lvl="40" mana="100" maglv="120" prem="1" aggressive="0" needtarget="1" params="1" exhaustion="1500" needlearn="0" event="script" value="especiais/vitagransio.lua"> com base nisso vc cria as outras.. espero ter ajudado.
-
Isaque Teixeira deu reputação a xWhiteWolf em Anel de SauronFala galera do TK, criei esse anelzinho pra servers que procuram inovar..
bom, oque ele faz??
Simples, ele torna o usuário invisível.
aff, mas já existe o stealth ring que faz isso!
Sim mas dessa vez eu digo invisível mesmo, nenhum monstro ou players conseguirá te ver.
que lixo, assim qualquer player vai poder ficar invisível e passar no meio dos monstros e players.. vai estragar o server
Aí é que vc se engana porque o anel vem uma maldição, quem usar ele vai perdendo 3% de vida por segundo (ajustável) e só vai estragar o server se vc sair distribuindo o anel pra todos os players haha
O anel em si possui duas versões, na primeira ele retira 3% de vida por segundo, na segunda ele adiciona uma condição que te deixa perdendo uma quantidade fixa de vida, CONTUDO, na segunda versão aparece uma poça de sangue cada vez que toma o dano então dá pros players te pegarem caso vc coloque o anel e resolva fugir kkkkk
Vou chamar aqui de versão 1 e 2 respectivamente.
OBS: ISSO É EM MOVEMENTS!
1ª versão (sem sangue mas que tira 3% de vida por segundo):
local invisible = createConditionObject(CONDITION_GAMEMASTER, -1, false, GAMEMASTER_INVISIBLE) local outfit = createConditionObject(CONDITION_INVISIBLE, -1, false) local percent = 3 local tempo = 1 -- em segundos function onEquip(cid, item, slot) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "By using this ring you will become fully invisible and lose health over time because of it's curse.") function lifesteal(cid) steal = addEvent(lifesteal, 1000*tempo, cid) if isCreature(cid) then doSendAnimatedText(getCreaturePos(cid), "-"..math.floor((getCreatureMaxHealth(cid) * (percent/100))), 144, cid) doCreatureAddHealth(cid, -math.floor(getCreatureMaxHealth(cid) * (percent/100))) end end lifesteal(cid) doAddCondition(cid, invisible) doAddCondition(cid, outfit) doSendMagicEffect(getCreaturePos(cid), 12) return true end function onDeEquip(cid, item, slot) doTransformItem(item.uid, 2165) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You're no longer receiving the special bonus..") stopEvent(steal) doRemoveCondition(cid, CONDITION_INVISIBLE) doSendMagicEffect(getCreaturePos(cid), 12) doRemoveCondition(cid, CONDITION_GAMEMASTER, GAMEMASTER_INVISIBLE) return true end 2ª versão (a cada 1,5 segundos ele te tira um dano configurado e deixa uma poça de sangue embaixo de vc facilitando que te identifiquem mesmo estando invisivel):
local invisible = createConditionObject(CONDITION_GAMEMASTER, -1, false, GAMEMASTER_INVISIBLE) local outfit = createConditionObject(CONDITION_INVISIBLE, -1, false) local condition = createConditionObject(CONDITION_PHYSICAL) setConditionParam(condition, CONDITION_PARAM_DELAYED, TRUE) addDamageCondition(condition, -1, 1500, -500) function onEquip(cid, item, slot) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "By using this ring you will become fully invisible and lose health over time because of it's curse.") doAddCondition(cid, condition) doAddCondition(cid, invisible) doAddCondition(cid, outfit) doSendMagicEffect(getCreaturePos(cid), 12) return true end function onDeEquip(cid, item, slot) doTransformItem(item.uid, 2165) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You're no longer receiving the special bonus..") doRemoveCondition(cid, CONDITION_PHYSICAL) doRemoveCondition(cid, CONDITION_INVISIBLE) doSendMagicEffect(getCreaturePos(cid), 12) doRemoveCondition(cid, CONDITION_GAMEMASTER, GAMEMASTER_INVISIBLE) return true end Agora edite no items.xml o stealth ring pra que ele seja infinito:
<item id="2202" article="a" name="stealth ring"> <attribute key="weight" value="100" /> <attribute key="slotType" value="ring" /> <attribute key="transformDeEquipTo" value="2165" /> </item> e em movements.xml adicione essas linhas:
<movevent type="Equip" itemid="2202" slot="ring" event="script" value="stealth.lua"/> <movevent type="DeEquip" itemid="2202" slot="ring" event="script" value="stealth.lua"/> Editando:
Na primeira versão vc pode alterar as seguintes coisas que estão em colorido:
local invisible = createConditionObject(CONDITION_GAMEMASTER, -1, false, GAMEMASTER_INVISIBLE)
local outfit = createConditionObject(CONDITION_INVISIBLE, -1, false)
local percent = 3
local tempo = 1 -- em segundos
em vermelho é o tempo que dura a invisibilidade... -1 é infinito
em azul é a porcentagem de vida que perde por tempo
em verde é o tempo em que se perde vida.. nesse caso a cada 1 segundo perde 3%
Na segunda versão vc pode editar as mesmas coisas do primeiro só que o tempo e o dano pelo tempo estão na condition:
local condition = createConditionObject(CONDITION_PHYSICAL)
setConditionParam(condition, CONDITION_PARAM_DELAYED, TRUE)
addDamageCondition(condition, -1, 1500, -500)
em vermelho é o numero de vezes que vai tirar vida. Mais uma vez -1 significa infinito (infinito até remover o anel)
em azul é o dano que vc toma a cada tempo (lembre-se de deixar sempre um - na frente se não ele vai adicionar vida)
em verde é o tempo em que se perde vida.. nesse caso a cada 1 segundo e meio retira 500 de vida
Bom, é isso.. um script simples mas que vai ajudar muita gente pelo fato de usar conditions não tão comuns e de uma forma diferente haha
-
Isaque Teixeira deu reputação a xWhiteWolf em Volatile SpiderlingFala galera do TK, hoje eu venho mais uma vez trazer uma das magias mais incríveis que eu já vi até hoje (sério). A magia original foi feita em outro fórum mas para a versão 10.1... como eu vi que ninguém conseguiu adaptar pra versões inferiores eu decidi criar a minha própria volatile spiderling.
Confesso que no começo eu tive muita dificuldade em achar as funções certas mas depois de tentar ajudar o membro @234567890z no suporte eu tive uma epifania. Sem mais delongas eu vou explicar oque o script faz e em seguida ensinar a colocá-lo no seu server.
• Explicação: A magia foi feita baseada na personagem Elise do jogo League of Legends: você faz uma cria que anda até os oponentes e se explodem causando dano em area e deixando eles envenenados. Aqui tem um gif da magia funcionando
obs: note que esse gif não fui eu que fiz mas ele demonstra exatamente como a magia funciona.
• Instalação: Pra instalá-lo no seu servidor vai ser um pouco complicado pois ele requer diversas modificações... antes de mais nada, coloque essas linhas no seu spells.xml:
<instant name="Volatile Spiderling" words="utevo res tera" lvl="40" mana="20" prem="1" selftarget="1" exhaustion="2000" groups="1,2000" icon="88" needlearn="0" event="script" value="especiais/spiderling.lua"> <vocation id="3"/> <vocation id="7"/> </instant> <instant name="poison explosion" words="poison explosion" lvl="0" mana="0" prem="0" aggressive="1" exhaustion="3000" needlearn="1" event="script" value="especiais/newspider.lua"> </instant> Agora você vai ter que criar os dois arquivos na pasta spells\scripts\especiais.
Em newspider.lua coloque o seguinte:
agora em spiderling.lua coloque o seguinte: Agora feito isso vc vai precisar criar o monstro que usará essa spell.. vá em monster\monsters.xml e adicione a seguinte linha: <monster name="Clone Spider" file="arachnids/newspider.xml"/> agora crie o arquivo data\monsters\arachnids\newspider.xml e adicione o seguinte nele:
Agora eu vou ensinar vocês a editarem... não tem muito oque mudar, apenas se vc quiser alterar os danos da spell vá em newspider.lua e será possível editar os danos do poison e da explosão:
local damageTable = { {4, -3}, {9, -2}, {20, -1} } aqui você muda quantos danos serão e quanto cada um tirará.. no caso serão 4 hits de -3, depois 9 hits de -2 e por fim 20 hits de -1 até o poison parar. Lembrando que esses danos saem de 4 em 4 segundos. Se você quiser que eles sejam mais rápidos é só editar aqui:
addDamageCondition(poisonpowder, t[1], 4000, t[2]) (4000 significa 4 segundos).
Feito isso será possível editar também a area e o dano da explosão respectivamente em: Area:
Dano:
doAreaCombatHealth(cid, 1, getThingPos(cid), area, -1, -30, 20)
Em vermelho temos o dano mínimo, analogamente, em azul, temos o dano máximo.
Em verde é possível editar o efeito da explosão
Só lembrando que as edições que forem feitas no newspider.lua devem ser feitas no spider.lua para que a magia tenha graça.. se não o dano da explosão/poison ao explodir será diferente caso ela morrer antes. Em spiderling.lua vc pode editar a quantidade máxima de crias que um player pode ter... o normal está setado para 2 mas vc pode sentir-se livre pra colocar quantas queira.
local maxsummon = 2 (Só lembre-se que ao explodir uma aranha pode acertar outra então não é muito bom deixar um numero maior que 3);
Se você for daqueles bem chatinhos com a magia você ainda pode editar algumas coisas importantes tais como:
O efeito que sai quando ela explode por morte ou pela spell:
doSendMagicEffect(getThingPos(cid), 16) O tempo em que ela executa a spell, a chance da spell sair naquele tempo e quantos sqm de distancia a criatura alvo deve estar pra aranha se explodir:
<attack name="poison explosion" interval="1000" range="1" chance="50"/> interval = de quantos em quantos segundos ela executa a spell
range = distancia em sqm que o alvo deve estar pra que ela execute a spell
chance = chance de executar a spell a cada interval (nesse caso a cada 1 segundo tem 50% de chance dela soltar a magia)
Você ainda pode editar aqui em vermelho:
o tempo que leva pra criatura executar a magia.. Por padrão eu deixei 2 segundos, ou seja... eu sumono a aranha, ela vai até o alvo e a cada segundo q ela passa grudada no alvo (1 sqm de distancia) ela tem 50% de chance de ativar a spell e ficar parada no lugar durante 2 segundos até explodir. Se você quiser que ela leve menos tempo pra explodir é só baixar o 2000 (em milisegundos).. Se você quiser aumentar o dano e deixar ela parada por mais tempo até explodir pode editar a vontade aumentando os 2000.
• Bom, isso é tudo que dava pra eu explicar... é óbvio que dá pra editar muito mais coisa mas se você não é scripter e não tem muita idéia de como editar eu dei uma ensinada básica doque você está autorizado a mexer. Espero que vocês curtam a spell e deem aquele REP+ pra fortalecer kkkk
Eu não pretendia liberar essa spell visto que ela é extremamente complexa e nenhum servidor tem ela, mas, acho que seria muito babaca da minha parte ficar guardando um script tão bonito hahaha. Qualquer erro ou dúvida postem nos comentários que eu tento ajudar.
ah, mais uma coisa: Os créditos são 90% meus visto que eu fiz praticamente tudo.. 9% é pro cara que fez a magia original (se vcs derem uma procurada vcs vão ver que não tem quase nada a ver com a minha mas os créditos dele são por ele ter me dado a idéia) e 1% pro cara no suporte que me pediu ajuda numa spell do mesmo gênero e me fez correr atrás de uma forma de fazer essa magia pra versões inferiores a TFS 1.0
-
Isaque Teixeira deu reputação a xWhiteWolf em Volatile Spiderlingé uma spell realmente muito foda e muito útil em servidores de RPG... só fiquei meio triste porque dos 14 usuários que viram o tópico apenas dois curtiram :/ achei que ia fazer mais sucesso