ja vi parecido, mais tão bom igual ao seu....nunca!
- Fórum
- OTServ
- Recursos
- Scripting
- Mods, funções e outros
- Dinastias - Dopushcreature By Dokmos 30/01
Dinastias - Dopushcreature By Dokmos 30/01
Por Dokmos, 14 de dez. de 2008 em Mods, funções e outros
info
Grupo: Barão
Registrado: 15/12/07
Posts: 239
Reputação: +2

info
Grupo: Artesão
Registrado: 21/02/07
Posts: 137
Reputação: +1
Char no Tibia: GOD Grimrath

cara tu ta sinistro nos escripts mais um sinistraço parabens cara.
info
Grupo: Campones
Registrado: 26/07/08
Posts: 17
Reputação: 0
Char no Tibia: Daeron Remus

Dokmos, a sua função é perfeita para o meu servidor! *-*
porém... to com um probleminhão aki...
o meu global não reconhece uma ou duas funções utilizadas no 'doPushCreature', acho que são as 'getTileThingByPos' e 'queryAddTileThing', algo assim.
pode me passar essas do seu global, ou melhor ainda, me passar o seu global pra eu pegá-las?
obrigado desde já.
braço!
info
Grupo: Campones
Registrado: 21/03/08
Posts: 23
Reputação: 0
Char no Tibia: Lord Zmile

Aqui não ta dando certo não na spell.Ela simplismente não empurra só ataca oO
info
Grupo: Campones
Registrado: 29/11/07
Posts: 81
Reputação: +4
Char no Tibia: Dokmos

@TheTNT
O seu problema é a versão do seu servidor, essas funções já são inseridas nas sources dos servidores recentes. Por isso não tem como eu te passar os códigos.
@ShadowRock
Eu passei a estrutura da função, agora inserí-la em seu script é com vocês.
info
Grupo: Campones
Registrado: 26/07/08
Posts: 17
Reputação: 0
Char no Tibia: Daeron Remus

@Dokmos
diacho... não tem como arrumar isso, ou criar esta função para server 8.1? meu servidor não tem algumas das funções recentes. preciso arrumar um jeito de fazer com que o alvo seja empurrado em spells de target e de area. não tem outro modo? eu preciso muito disso T.T
braço!
info
Grupo: Campones
Registrado: 19/04/08
Posts: 53
Reputação: +1
Char no Tibia: Akilles Palyy

Hey , Dokmos , Queria saber se tinha como Ter uma Function para eu Por em uma "UE" ( Ultimate Explosion ) Que inves de impurrar para onde estou olhando , Empurrar para lonje de min , Se o montro estiver a minha esquerda , sera impurado para a Esquerda , Se estiver a direita , sera para a direita , e assim vai , como tbm para cima e baixo , OBS : nao importando apra onde estou olhando
info
Grupo: Campones
Registrado: 29/11/07
Posts: 81
Reputação: +4
Char no Tibia: Dokmos

Sim Slinix, tem uma função que criei para isso, em breve estarei atualizando o doPushCreature() e criarei um tópico com ela.
Ei dokmos vc poderia por o sistema de jump?? por favor, sempre kis saber como funcionava...



info
Grupo: Campones
Registrado: 29/11/07
Posts: 81
Reputação: +4
Char no Tibia: Dokmos
Function doPushCreature(uid, direction[, distance[, speed]])
by Dokmos
-----------------------------------------------
Características
Função atualizada 30/01!
A fórmula foi optimizada com um sistema menor, mais simples e avançado!
Bom, esse é um script que modifiquei com funções loop e tabelas, além de alguns sistemas adicionais. A função basicamente empurra uma determinada criatura para uma direção, caso essa direção não possa ser ocupada (paredes, criaturas, buracos) ela empurra para a direção mais próxima que está desocupada, ou então não empurra.
Por exemplo, vamos empurrar um rato para o norte, se a posição ao norte estiver livre o rato vai para o norte, caso não esteja verifica-se aleatoriamente se a posição nordeste ou noroeste está livre, e se também não estiver verifica-se novamente aleatoriamente se o leste ou oeste do rato está livre, se neste último caso também não for possível ele não empurra o rato.
A finalidade disto é deixar a função mais dinâmica e real, além do sistema adicional de empurrar mais de 1 sqm e com o tempo desejado.
-----------------------------------------------
Instalação
Adicione essa função dentro do data\global.lua, você também pode colocá-la em outros libs, mas o global.lua já servirá para todas funções como spells, talkactions, actions, etc.
Obs: Alguas versões de OT o global.lua está no data\lib\constant.lua
function doPushCreature(uid, direction, distance, speed) -- Desenvolvido por Dokmos 30/01/2009 -- Apoio Dinastias local pos = getThingPos(uid) local PARAM = {{1}, {500}} local DIRECTION = { {{0,0},{6,7},{1,3}}, {{1,1},{5,7},{0,2}}, {{2,2},{4,5},{1,3}}, {{3,3},{4,6},{0,2}}, {{4,4},{2,3}}, {{5,5}, {1,2}}, {{6,6},{0,1}}, {{7,7},{0,3}} } table.insert(PARAM[1], distance) table.insert(PARAM[2], speed) for dvar = 1, #DIRECTION[direction+1] do rand = math.random(2) d = DIRECTION[direction+1][dvar][rand] dir = {x = (math.fmod(d,2)*(-(d-2))+math.floor(d/4)*math.fmod(d,2)*d-math.floor(d/4)), y = (((d-1)*(d-1-(d-1)*math.abs(d-2))*(1-math.floor(d/4)))-(math.floor(d/4)*(math.floor(d/6)*2-1)))} newtile = {x = (pos.x+dir.x), y = (pos.y+dir.y), z = pos.z} if (getTileThingByPos(newtile).uid ~= 0) and (hasProperty(getTileThingByPos(newtile).uid,3) == FALSE) and (queryTileAddThing(uid,newtile) == 1) then break end rand = (math.fmod(rand,2)+1) d = DIRECTION[direction+1][dvar][rand] dir = {x = (math.fmod(d,2)*(-(d-2))+math.floor(d/4)*math.fmod(d,2)*d-math.floor(d/4)), y = (((d-1)*(d-1-(d-1)*math.abs(d-2))*(1-math.floor(d/4)))-(math.floor(d/4)*(math.floor(d/6)*2-1)))} newtile = {x = (pos.x+dir.x), y = (pos.y+dir.y), z = pos.z} if (getTileThingByPos(newtile).uid ~= 0) and (hasProperty(getTileThingByPos(newtile).uid,3) == FALSE) and (queryTileAddThing(uid,newtile) == 1) then break end if (dvar == #DIRECTION[direction+1]) then newtile = pos end end doTeleportThing(uid, newtile, TRUE) if (PARAM[1][#PARAM[1]] > 1) then addEvent(doPushCreature, PARAM[2][#PARAM[2]], uid, direction, (distance-1), speed) end end-----------------------------------------------
Funcionamento
Quando utilizar fica a seu critério, vou mostrar um exemplo básico de empurrar alguma criatura no target.
Este exemplo acima de uma talkaction verifica se existe alguma criatura no target e caso tenha, empurra a criatura para a direção que o jogador está olhando.
Agora, vou mostrar um exemplo de uma spell modificada que utiliza o sistema de getPosfromArea, caso você não o tenha instalado em seu ot, veja neste tópico Function getPosfromArea by Dokmos
Após ambos instalados vamos ao script de exemplo:
local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYAREA) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1.4, 0, -1.9, 0) local arr = { {1, 1, 1}, {1, 1, 1}, {1, 1, 1}, {0, 1, 0}, {0, 3, 0} } local area = createCombatArea(arr) setCombatArea(combat, area) function onCastSpell(cid, var) pos = getPosfromArea(cid,arr) n = 0 while n < #pos do n = n+1 thing = {x=pos[n].x,y=pos[n].y,z=pos[n].z,stackpos=253} if isCreature(getThingfromPos(thing).uid) == TRUE then doPushCreature(getThingfromPos(thing).uid,getPlayerLookDir(cid)) end end return doCombat(cid, combat, var) endA spell acima é o energy wave modificado, agora além de causar danos ela também empurra, fiz ela só para mostrar um exemplo a vocês de como configurar seus scripts de spells que utilizam área, caso seu script já tenha a criatura é só colocá-lo no doPushCreature e divirta-se!
Obs: Lembrando que o sistema de empurrar a criatura mais de 1 sqm e com tempo definido é opcional, caso você não coloque a distância nem o tempo, não tem problema, ele será definido como padrão 1 sqm.
Espero que consigam aproveitar a função em seus scripts, qualquer bug ou erro postem aqui para eu dar uma verificada, e a configuração em seus scripts fica por conta de vocês.
:positive:
Atenciosamente,
Dokmos
Editado Janeiro 30 por Dokmos