
rizen
Membro
-
Registro em
-
Última visita
Histórico de Curtidas
-
rizen recebeu reputação de Nerivalhs em Fist Fighting/AttackspeedDesculpa reviver o topico mas não pega em TFS 0.3.6.
Sempre dá um erro.
Alguém que tenha TFS 0.3.6 conseguiu?
-
rizen deu reputação a BrunoMaia em Old Tibia tirando limite de 255 efeitosFoi testado no TheForgottenServer 0.3.6 no Tibia 8.54
Como o client já está modificado, precisamos modificar a parte do servidor que envia os dados para o client.
Vamos modificar dois métodos, addMagicEffect e sendMagicEffect.
Entre na sua source 0.3.6
Encontre o arquivo protocolgamer.cpp
Você vai encontrar esse código
void ProtocolGame::AddMagicEffect(NetworkMessage_ptr msg,const Position& pos, uint8_t type) { msg->AddByte(0x83); msg->AddPosition(pos); msg->AddByte(type + 1); } Percebeu esse parametro uint8_t type?
Vamos modificar para uint16_t type.
Mas isso não vai adiantar nada se o msg->AddByte(type + 1) continuar desse jeito...
Modifique ele para msg->AddU16(type + 1).
O código modificado deve ficar desse jeito
void ProtocolGame::AddMagicEffect(NetworkMessage_ptr msg,const Position& pos, uint16_t type) { msg->AddByte(0x83); msg->AddPosition(pos); msg->AddU16(type + 1); } Você já deve ter pegado a lógica...
Onde tiver um método addMagicEffect com o parametro uint8_t type, tem que trocar por uint16_t type, o mesmo serve para sendMagicEffect.
Mas como sei que tem pessoas que não gostam de trabalhar um pouco, vamos continuar com os arquivos para modificar.
No mesmo arquivo procure por esse código
void ProtocolGame::sendMagicEffect(const Position& pos, uint8_t type) { if(type > MAGIC_EFFECT_LAST || !canSee(pos)) return; NetworkMessage_ptr msg = getOutputBuffer(); if(msg) { TRACK_MESSAGE(msg); AddMagicEffect(msg, pos, type); } } Temos alguém conhecido nos parametros, o uint8_t type, já sabemos o que devemos fazer, modifique ele para uint16_t type,
Código deve está desse jeito
void ProtocolGame::sendMagicEffect(const Position& pos, uint16_t type) { if(type > MAGIC_EFFECT_LAST || !canSee(pos)) return; NetworkMessage_ptr msg = getOutputBuffer(); if(msg) { TRACK_MESSAGE(msg); AddMagicEffect(msg, pos, type); } } As alterações desse arquivos terminaram, salva as alterações.
Vamos para outro arquivo, o protocolgamer.h
Procure por esse código
void AddMagicEffect(NetworkMessage_ptr msg, const Position& pos, uint8_t type); Novamente troque o uint8_t type por uint16_t type
Código devera ficar desse jeito
void AddMagicEffect(NetworkMessage_ptr msg, const Position& pos, uint16_t type); Procure por esse código
void sendMagicEffect(const Position& pos, uint8_t type); Troque o uint8_t type por uint16_t type
Código devera ficar desse jeito
void sendMagicEffect(const Position& pos, uint16_t type); Salve as alterações e vamos para o outro arquivo, está cançado de modificar os códigos? é assim mesmo, se quer alguma coisa tem que se esforçar por ela.
Vamos para o arquivo game.cpp
Procure por esses códigos
void Game::addMagicEffect(const Position& pos, uint8_t effect, bool ghostMode /* = false */) { if(ghostMode) return; const SpectatorVec& list = getSpectators(pos); addMagicEffect(list, pos, effect); } void Game::addMagicEffect(const SpectatorVec& list, const Position& pos, uint8_t effect, bool ghostMode/* = false*/) { if(ghostMode) return; Player* player = NULL; for(SpectatorVec::const_iterator it = list.begin(); it != list.end(); ++it) { if((player = (*it)->getPlayer())) player->sendMagicEffect(pos, effect); } } Troque os parametros uint8_t effect por uint16_t effect
Dexando-os assim
void Game::addMagicEffect(const Position& pos, uint16_t effect, bool ghostMode /* = false */) { if(ghostMode) return; const SpectatorVec& list = getSpectators(pos); addMagicEffect(list, pos, effect); } void Game::addMagicEffect(const SpectatorVec& list, const Position& pos, uint16_t effect, bool ghostMode/* = false*/) { if(ghostMode) return; Player* player = NULL; for(SpectatorVec::const_iterator it = list.begin(); it != list.end(); ++it) { if((player = (*it)->getPlayer())) player->sendMagicEffect(pos, effect); } } Salve as alterações e vamos para o outro arquivo, game.h
Procure por esse códigos, está ficando repetitivo, mas é assim mesmo
void addMagicEffect(const Position& pos, uint8_t effect, bool ghostMode = false); void addMagicEffect(const SpectatorVec& list, const Position& pos, uint8_t effect, bool ghostMode = false); Troque o uint8_t effect por uint16_t effect
Código tem que ficar desse jeito
void addMagicEffect(const Position& pos, uint16_t effect, bool ghostMode = false); void addMagicEffect(const SpectatorVec& list, const Position& pos, uint16_t effect, bool ghostMode = false); Essa foi rápido, salve as alterações e vamos para o outro arquivo, player.h
Procure por esse código
void sendMagicEffect(const Position& pos, uint8_t type) const Troque por esse código
void sendMagicEffect(const Position& pos, uint16_t type) const Salve as alterações, esse foi o último arquivo
Agora compile!
Uma coisa que você deve saber, se você tentar entrar com o client que não esteja esperando valores do tipo uint16 e algum efeito for executado, vai da um erro no client, não da para jogar...
Vamos baixar o client modificado.
Download cliente com as seguintes configurações.
Port: 7171
IP: 127.0.0.1
Version: 8.54
Clique aqui para baixar esse cliente
Virus total desse client
Download cliente com as seguintes configurações.
Port: 7272
IP: 127.0.0.1
Version: 8.54
Clique aqui para baixar esse cliente
Virus total desse client
Modificações dos clientes foram feitos por mim.
Reporte qualquer bug que ocorrer.
Esse tutorial ensina como tirar o limite de 255 efeitos do tibia, se você não tiver mais de 255 efeitos colocados em sua source, então coloque para testar, não precisa colocar agora, e se você quiser pode colocar depois e já deixar seu client preparado para suporta mais de 255 efeitos.
Tutorial para adicionar efeitos na sua source.
Não deixe de agradecer...
-
rizen deu reputação a Dwarfer em Town somente pra Premium@rizen
Em creaturescripts/scripts crie um arquivo.lua:
local freeTownIDS = {1,2,3,4,5} -- ids das cidades free account local defaultTownID = 3 -- id da cidade para qual o player será teleportado function onLogin(cid) if not isPremium(cid) and (not isInArray(freeTownIDS, getPlayerTown(cid))) then doPlayerSetTown(cid, defaultTownID) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Your premium has expired.") end return true end Em creaturescripts.xml, adicione a tag:
<event type="login" name="checkPremiumTown" event="script" value="NOMEDOARQUIVO.lua"/>
-
-
Troca essa linha:
double shareExperience = (experience / (double)(memberList.size() + 1));
por
double shareExperience = experience;
E apaga essas duas linhas que estão abaixo:
if(experience > (double)g_config.getNumber(ConfigManager::EXTRA_PARTY_LIMIT)) shareExperience += (experience * (double)(g_config.getNumber(ConfigManager::EXTRA_PARTY_PERCENT) / 100));
Compila de novo e vê se dá certo
-
-
rizen deu reputação a Rodrigotort em [Talk] Global StorageBom Estava Aqui Fazendo um Script ....
E queria uma Forma Rapida de Saber se tinha X Global Storage no Servidor ...
Não Sei Muito de Script , Nem sei se tinha Alguma Forma ... Mais Criei essa Pequena Talkaction ...
Para Vereficar se tem X Global Storage ...
Espero Que Ajude Alguem ...
1º - em data/talkactions/ talkactions.xml -- adicione está tag
2º Em data/ talkactions/ scripts crie um arquivo.lua e coloque isto dentro :
Pronto Agora Para Usar Basta Dizer -> /storageglobal e a global storage que voçê quer ver se tem no Servidor .. Ex -> /storageglobal 5555 Tambem é possivel Adicionar ou Remover as Globais Storages do Servidor ... Para Remover basta Dizer -> /storageglobal a global storage e -1 Ex -> /storageglobal 5555 , -1 Para Adcionar é só Dizer -> /storageglobal a global storage e 1 ( ou Valor que voçê usa no Seu Sistema ) Ex -> /storageglobal 5555 , 1 Simples Não?... Bom é Isso , Até ... -
rizen deu reputação a gabrielzika em Matar monstro e queimar o corpo@rizen veja se é isso que você quer ...
actions/scripts
aomatar.lua
function onUse(cid, item, fromPos, itemEx, toPos) local corpseID = 1740 -- id do corpse local tpId = 1387 -- id do magic forcefield local pos2 = {x=2534, y=790, z=6} -- posição onde o tp vai aparecer local toPos2 = {x=2530, y=794, z=6} -- posição para onde vai quem entrar no tp local time = 15 -- tempo que o teleport fica aberto local effFire = 35 -- Efeito de Fogo function removeTp(tp) local t = getTileItemById(pos2, tpId) if t then doRemoveItem(t.uid, 1) doSendMagicEffect(pos2, CONST_ME_POFF) end end if(isInArray(corpseID, itemEx.itemid)) then doCreateTeleport(tpId, toPos2, pos2) addEvent(removeTp, time*1000, tp) doSendMagicEffect(toPos, effFire) doRemoveItem(getTileItemById(toPos, corpseID).uid) return true end return true end
actions.xml
<action itemid="2341" event="script" value="aomatar.lua" allowfaruse="1" blockwalls="1"/>
Coloca para o Monstro Renascer a cada 30 Segundos quando for Morto... ( Pelo Remeres... )
Em items.xml no Corpse do Monstro deixa o duration assim:
<attribute key="duration" value="30" />
-
rizen deu reputação a gabrielzika em Monstros nao atacarem summon@rizen Ve se isso funciona
function onAttack(cid, target, attacker, type, combat, value) if isPlayer(target) and #getCreatureSummons(target) >= 1 then doMonsterSetTarget(cid, target) end return true end
Créditos: @L3K0T
-
rizen deu reputação a Noninhouh em Monstros nao atacarem summonAcredito que possa ser pela falta da função isSummon...
No arquivo /server/data/lib/050-function.lua, adicione essa função:
function isSummon(cid) return getCreatureMaster(cid) end
-
rizen deu reputação a L3K0T em Monstro Focando 1° no Summon depois no Player.Fala galera, hoje estarei ensinando você como fazer os monstro (selvagens) focar primeiro no summons, depois no player, sem mexer na source, hoje estarei mostrando em scripts e é o mesmo que uso em meu servidor, então testado!
vai em data/creaturescripts/scripts copia uma arquivo .lua e renomeia pra ataque.lua e coloca isso lá dentro.
function onAttack(cid, target, attacker, type, combat, value) if isPlayer(target) and #getCreatureSummons(target) >= 1 then doMonsterSetTarget(cid, getCreatureSummons(target)[1]) end return true end agora no creaturescripts.xml coloca a tag
<event type="attack" name="BlockHit6" event="script" value="ataque.lua"/> como usar ? é muito simples agora você vai em todos monstros selvagens e vai add lá em baixo.
<script> <event name="BlockHit6"></event> </script> sempre antes do
</monster>
ADICIONA NO LOGIN.LUA
registerCreatureEvent(cid, "BlockHit6")
agora é só alegria parceiro espero ter ajudado! :*
-
rizen deu reputação a antharaz em Alavanca que sumona monstro@rizen
Perdão, esqueci de falar que você tem que mudar o XML do monstro. Abra o XML do monstro que aparece e antes de </monster> coloque:
-
rizen deu reputação a antharaz em Alavanca que sumona monstro@rizen
Será sempre o mesmo monstro nas 5 posições?
--EDIT
Siga as instruções abaixo:
Coloque o código abaixo no final do arquivo 000-constant.lua e configure:
Tag do creaturescripts.xml:
Script parede.lua do creaturescripts:
A tag da action você já deve ter, então logo abaixo há o script da action:
Abra o XML do monstro que aparece e antes de </monster> coloque:
-
rizen deu reputação a KotZletY em [Narutibia] Jinchuuriki System - Distro 0.4Salve rápázyádá, recentemente estava de rolê pelo tk, e vi um tópico com o seguinte pedido: "Jinchuuriki System", pra que não conhece irei da um breve resumo.
Para quem conhece o anime naruto sabe sobre as bijuus, e que elas foram seladas em shinobis destinados a carregar tamanha responsabilidade devido a cada biju ter um poder destruidor, como por exemplo a bijuu raposa de nove caldas(Kyuubi), selada dentro do personagem principal chamado de Naruto Uzumaki, a Kyuubi quando dominada, dá ao usuário uma grotesca quantidade de chakra, assim como jutsus e muito mais, cada bijuu tem sua especialidade, jutsus de defesa, assim como a própia defesa e resistência do usuário a tais jutsus, mas claro para você ter a bijuu, é necessário que você sele-a dentro de você, através de um dos jutsus proibidos, como o Shiki Fuujin usado por Minato o 4º Hokage e também pai de naruto, ao usar o selo ele consome a alma de quem usa levando-o a morte após o termino do jutsu, minato como hokage não poderia deixar a kyuubi destruir a vila, então ele invoca o Selo Consumidor do Demônio Morto(Shiki Fuujin) conhecido também como Selo Ceifeiro da Morte, e sela a kyuubi dentro de seu própio filho salvando a vila e morrendo como herói, e naruto desde então passa a ser o Jinchuuriki da raposa de nove caldas.
Tendo uma ideia básica de como funciona, vamos a explicação do sistema, que não é diferente.
Ao usar um jutsu(spell) de selo em algum bijuu(monstro), você terá ele selado dentro de você e obterá os jutsus de acordo com cada bijuu, mas para isso, a vida(hp) da bijuu deve está menor que 20%(configurável), e então você durante 2(configurável) dias, terá ele selado dentro de você e poderá usar os jutsus, ao acabar esse tempo você irá perdelo, assim como os jutsus.
Sistema criado e testado na versão 8.60 usando uma distro na versão 0.4, mesmo assim pode funcionar em versões inferiores!!
Siga os passos corretamente que é sucesso.
Vá em data/lib e crie um arquivo chamado JinchuurikiSystem.lua e coloque o seguinte code dentro:
A tabela está de acordo com a ordem de bijuus existente desde o bijuu de 1 calda, até a biju de nove caldas, então você irá mexer somente em qual ou quais jutsus(spells) cada bijuu irá usar, mais precisamente aqui:
spells = {""} entre aspas coloque a quantidade que seja de jutsus(spell), como por exemplo:
Tk no Jutsu 1- Tk no jutsu 2, separados por virgula, assim:
spells = {"Tk no jutsu 1", "Tk no jutsu 2"} Lembrando que o nome das spells não é a que fica em words, é que fica em name na xml, por exemplo:
eu tenho um jutsu chamado kai, quem joga narutibia sabe pra que serve, para usar ela, usamos o nome que está em words, e a que fica em name, será que vai ser mostrada quando for usar, entretanto a função que faz o player aprender a spell, segui pelo nome:
<instant name="Kai!" words="kai" note que contém uma exclamação no nome da spell, então vai ter que ir exclamação e tudo junto, ficando assim:
spells = {"Tk no jutsu 1", "Tk no jutsu 2", "Kai!"} e então quando o player for usar a spell pelo words kai, a spell será usada.
Agora vá em data/spells/scripts crie um arquivo chamado selojin.lua e coloque o seguinte code dentro:
Agora vá em data/spells/scripts crie um arquivo chamado buff bijuu.lua e coloque o seguinte code dentro:
a tag que você irá colocar na spells.xml para esse jutsu(spell) será a seguinte:
<instant name="Shiki Fuujin" words="shiki fuujin" lvl="1" mana="1" prem="0" exhaustion="10" enabled="1" needtarget="1" event="script" value="selojin.lua"> </instant> <instant name="Buff Jin" words="buff jin" lvl="1" mana="0" prem="0" selftarget="1" exhaustion="1000" enabled="1" event="script" value="buff bijuu.lua"> </instant>
Agora vá em data/talkactions/scripts e crie um arquivo chamado jincheck.lua e coloque o seguinte code dentro:
Nota: esse comando serve para você checar quanto tempo você tem de Jinchuuriki, e qual bijuu está selado dentro de você.
A tag da talkactions.xml para esse jutsu(spell) é a seguinte:
<talkaction words="!jincheck" event="script" value="jincheck.lua"/>
Agora vá em data/globalevents/scripts e crie um arquivo chamado jincheck.lua e coloque o seguinte code dentro:
Nota: esse script checa a cada um minuto, os players online na qual o tempo de Jinchuuriki já expirou, e então remove, para assim ele não continuar com os jutsus.
A tag do globalevents.xml desse script é a seguinte:
<globalevent name="JinSystem" interval="60000" script="jincheck.lua"/>
Agora pra finalizar vá em data/creaturescripts/scripts e crie um arquivo chamado jinsystem.lua e adicione o seguinte code:
e a tag do creaturescripts.xml desse script é a seguinte:
<!-- Jinchuuriki System --> <event type="look" name="JinSystemLook" event="script" value="jinsystem.lua"/> <event type="death" name="JinSystemDeath" event="script" value="jinsystem.lua"/> <event type="login" name="JinSystemLogin" event="script" value="jinsystem.lua"/> <event type="logout" name="JinSystemLogout" event="script" value="jinsystem.lua"/>
Nota: na spells.xml que não precisam ter uma vocação especifica para ser usada e devem conter a tag:
needlearn="1" contendo essa tag, a spell não irá aparecer para nenhum player e não poderá ser usado até que o player sele a bijuu, após ser aprendida quando o player sela a bijuu, irá aparecer no comando !jutsus que em servidores normais é o spellbook e o !spells, em quanto o player não selar, ele não ver e nem pode usar.
bijuu_outfit é o id da looktype que o player vai ganhar ao usar o buff(se você tem outro buff ou speel que faça o mesmo, remova-o ou então remova a função doSetCreatureOutfit da minha buff, assim não gerando conflito e ficando o outfit que deseja).
skill_p é a quantidade de pontos que ao usar o buff da bijuu, vai add no player.
time_buff é quanto tempo o buff vai ficar no player valendo também para a looktype.
effBuff é o id do efeito que vai sair em cima do player quando ele usar o buff.
Pronto, basta configura a spells que cada bijuu(monstro), e pronto.
Acho que não preciso explicar como configurar, no própio script deixei umas observações.
É totalmente proibido levar meu sistema para outro blog, site ou fórum, fiz esse sistema exclusivamente para membros da comunidade do TibiaKing.
Quaisquer erros, sugestões, críticas(construtivas), fiquem a vontade, caso tenha alguma duvida sobre tal parte do script, ou não entendeu alguma parte de como configurar, basta comentar que estarei dando suporte.
Script feito por mim.
Abraços, bom uso, e boa noite! xD
-
rizen deu reputação a LeoTK em [Suporte] Spr e dat não abre usando object builderEu percebi baixei o client para extender e tirar foto mostrando para você como extender e realmente não abre dessa forma fica difícil trabalhar bom tem uma maneira mas é muito trabalhosa que seria o caso você criar uma spr e dat nova usando o object builder e passar todas as sprites para essa nova spr e dat porém é trabalhoso fazer isso eu tentei usar as signature do client mas da um erro no object builder pode ser que alguém saiba como fazer isso bom já que o problema é com o spr e dat do client vou mover o seu tópico para suporte de client tenho certeza que alguém vai conseguir ajudar você
@rizen
tópico movido e titulo alterado para você ter uma ajuda mais eficiente
-
rizen 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.
-
rizen deu reputação a Eremin em [Pedido] Spell "Izanagi"Bom, Vo passa o que eu uso no meu server e você ve se da ai..
Crie um arquivo nos creaturescripts com isto dentro
ainda em creaturescripts em login.lua coloquei isto antes do ultimo return true
agora em creaturescripts.xml adicione esta tag
<event type="statschange" name="reborn" script="izanagi.lua"/>
agora na pasta spells, cri um arquivo .lua e coloque isso
coloquei esta tag no spells.xml
<instant name="izanagi" words="izanagi" prem="0" selftarget="1" aggressive="0" lvl="150" mana="1000" exhaustion="1000" event="script" value="nome do seu arquivo.lua">
-
rizen deu reputação a xWhiteWolf em Swap (Henge no Jutsu)Hoje vim trazer uma spell que eu considero muito legal que eu tenho no meu servidor ja faz alguns meses e esqueci completamente de postar haha
Trata-se de nada mais nada menos que uma troca entre dois personagens, eles trocam de posição e de outfit confundindo lindamente os adversários.
Não tenho gif da spell e nem imagem pq to com uma baita preguiça e daqui a 8 minutos eu tenho que ir pra faculdade então testem aí porque é bem legal essa spell. Ps: só funciona em players.
Instalando: Crie um arquivo chamado swap em data\spells\scripts\especiais que seja com extensão .lua e coloque isso dentro dele:
e no spells.xml:
<instant name="Swap" words="swap" lvl="23" mana="25" range="1" needtarget="1" params="1" exhaustion="3000" blockwalls="1" needlearn="0" event="script" value="especiais/swap.lua"> </instant>
Para usá-la basta dizer swap "nome do player e tem que estar à 1 sqm de distancia dele. Você irá trocar de posição com ele e ambos trocarão de outfit, confundindo os outros players.
-
rizen deu reputação a xWhiteWolf em Buraco NegroPronto:
Você vai ter que fazer uma pequena alteração no seu spells.xml, deixando ele assim:
<instant name="Dark Hole" words="buraco negro" lvl="160" direction="1" mana="500" prem="1" exhaustion="2000" needlearn="0" event="script" value="especiais/buraco negro.lua"> <vocation id="6"/> <vocation id="7"/> <vocation id="5"/> </instant> com esse direction = "1"
e o script vc deve deixar assim:
-
rizen deu reputação a MaTTch em (Resolvido)Spell de empurrarAé, esqueci kk
Aqui:
local configSpell = { pushSqms = 3, -- quantos sqm vai empurrar exhaustStorage = 55230, -- se quiser pode mudar exhaustTime = 5 -- exhausted em segundos } local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 20) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -6.3, 0, -7.3, 0) local function isWalkable(pos, creature, pz, proj) if(getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0) then return false end if(getTilePzInfo(pos) and not pz) then return false end local n = not proj and 3 or 2 for i = 0, 255 do pos.stackpos = i local tile = getTileThingByPos(pos) if(tile.itemid ~= 0 and not isCreature(tile.uid)) then if(hasProperty(tile.uid, n) or hasProperty(tile.uid, 7)) then return false end end end if(getTopCreature(pos).uid ~= 0 and not creature) then return false end return true end local function doPushCreature(target, times) if(isCreature(target) and times > 0) then local pos = getCreatureLookPosition(target) if(isWalkable(pos)) then doTeleportThing(target, pos) doSendMagicEffect(getThingPos(target), 2) addEvent(doPushCreature, 1, target, times-1) end end end local function doSpell(cid, target, var) local pos = getThingPos(target) local config = { [NORTH] = {SOUTH, {x=pos.x, y=pos.y+1, z=pos.z}}, [EAST] = {WEST, {x=pos.x-1, y=pos.y, z=pos.z}}, [SOUTH] = {NORTH, {x=pos.x, y=pos.y-1, z=pos.z}}, [WEST] = {EAST, {x=pos.x+1, y=pos.y, z=pos.z}} } local a, b = config[getCreatureLookDirection(target)], getCreatureLookPosition(target) if(isWalkable(a[2]) and isWalkable(b)) then doPushCreature(target, configSpell.pushSqms) doTeleportThing(cid, a[2], false) doCreatureSetLookDirection(cid, getCreatureLookDirection(target)) doCombat(cid, combat, var) else doPlayerSendCancel(cid, "Position blocked.") return false end return true end function onCastSpell(cid, var) if(isPlayer(cid) and exhaustion.check(cid, configSpell.exhaustStorage)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wait "..exhaustion.get(cid, configSpell.exhaustStorage).." second"..(exhaustion.get(cid, configSpell.exhaustStorage) > 1 and "s" or "")..".") return false end exhaustion.set(cid, configSpell.exhaustStorage, configSpell.exhaustTime) return doSpell(cid, getCreatureTarget(cid), var) end -
rizen deu reputação a Garou em Erro de scriptRegistrou no creaturescripts.xml e colocou a função registerCreatureEvent no login.lua?
-
rizen deu reputação a Sanieg em Erro de scriptOk, mais você esta usando algumas das outfits que estão configuradas para ele mudar =V ?
-
rizen deu reputação a xBen em Erro de script@rizen ta aí se ajudei rep +
local outfits = { [348] = 385, [349] = 390, } function onAttack(cid, target) doCreatureSetLookDirection(cid, getDirectionTo(getPlayerPosition(cid), getPlayerPosition(target))) if getDistanceBetween(getPlayerPosition(cid), getPlayerPosition(target)) > 1 then return true end local tmp = getCreatureOutfit(cid) if outfits[tmp.lookType] then tmp.lookType = outfits[tmp.lookType] doSetCreatureOutfit(cid, tmp, 900) end return true end @vinicius xxgamexx
isso não existe
if getDistanceBetween(getPlayerPosition(cid), getPlayerPosition(target)) > 1 then do doCreatureSetLookDirection(cid, getDirectionTo(getPlayerPosition(cid), getPlayerPosition(target))) end