Incrível como sempre Bruno!
Parabéns pelo belo code, e mais uma vez, bem vindo de volta! ^^
info
Grupo: Herói
Registrado: 07/01/08
Posts: 2.3k
Reputação: +514
Gênero: Masculino
Char no Tibia: Tonynh

Incrível como sempre Bruno!
Parabéns pelo belo code, e mais uma vez, bem vindo de volta! ^^
info
Grupo: Herói
Registrado: 12/06/12
Posts: 2.2k
Reputação: +739
Gênero: Masculino
Char no Tibia: Supreme Player

Muito bom maninho. rep++.
Editado Setembro 18 por Gabrieltxu
Oneshot e seus grandes codigos, muito bom!!
Bem vindo de volta, o xtibia precisava de pessoas como você.
![]()
info
Grupo: Conde
Registrado: 14/02/13
Posts: 702
Reputação: +196
Gênero: Masculino

Tem certeza que funciona ?
no getStorage o primeiro argumento é um 'uint32', um numero, e você esta tentando mandar "hostile", Só isso já causaria um bug na hora da compilação.
Depois disso no creaturescript, só usando setTarget não é o suficiente para fazer com que um monstro como Rabbit ataque um player ou um summon.
E se mesmo assim funcionasse, Caso duas pessoas ataquem o mesmo monstro ele iria sempre setar o target no ultimo que atacou ele, ou seja, ia ficar mudando o target, Sem contar que se sair da tela da target lost, e ele voltaria a ser passivo, Você precisaria criar uma lista com todos as criaturas que atacaram o monstro e fazer ela atacar 1 por 1 caso ainda estejam na tela, e só parar quando estiverem mortos ou tiverem re-logado.
Editado Setembro 21 por BananaFight
Compile e teste, abraços ![]()
Você pode manjar de OTClient, mas eu manjo de OpenTibia, BananaLutador ![]()
Editado Setembro 21 por Oneshot
info
Grupo: Marquês
Registrado: 22/07/12
Posts: 1.1k
Reputação: +400
Gênero: Masculino
Char no Tibia: Luck Oake

Oneshot 1x0
BananaFight, getStorage é string nas versões 8.6++
Já em 8.54, por exemplo, é int.
E sim, o setTarget é suficiente, e o monstro não fica mudando de alvo. Tudo já foi testado e está funcionando sem problemas.
Editado Setembro 21 por LuckOake
info
Grupo: Conde
Registrado: 14/02/13
Posts: 702
Reputação: +196
Gênero: Masculino

Entendo, Você poderia ao menos mostrar o versão testada no tópico para evitar esse tipo de confusão ?
info
Grupo: Herói
Registrado: 22/04/11
Posts: 2.5k
Reputação: +293
Gênero: Masculino
Char no Tibia: Thyn Zare

Muito bom, como sempre Oneshot!
Não estou por dentro dos OTServers mais, principalmente derivados, então é uma novidade pra mim. Ótima ideia passar para nós! ![]()
info
Grupo: Conde
Registrado: 14/02/13
Posts: 702
Reputação: +196
Gênero: Masculino

Tentei compilar em uma rev 3887, foi sem problemas, Então instalei o creaturescripts e o onlogin no meu server 8.6, porem ainda sim o rabbit não me ataca.
PASSIVE_BEHAVIOR = {"Deer", "Rabbit"} -- Aqui ficam os monstros que não atacam, mesmo que atacados.
function onCombat(cid, target)
print("X")
if isMonster(target) then
print("Y")
if not isInArray(PASSIVE_BEHAVIOR, getCreatureName(target)) then
print("hostile")
doCreatureSetStorage(target, "hostile", 1)
end
print("Z")
doMonsterSetTarget(target, cid)
end
return true
end
Resultado
Quando ataca rabbit:
X Y Z
Quando ataca rat:
X Y hostile Z
Editado Setembro 22 por BananaFight
Mas no caso o array PASSIVE_BEHAVIOR são os monstros que não irão atacar mesmo que você ataque eles, BananaFight.
Todos os outros monstros que não estejam nesse array e tenham inicialmente flag hostile igual a 0, começam a atacar depois de atacados.
Eu tenho a leve impressão que você está tentando achar qualquer defeito pra falar "ó como você não sabe programar", desculpe, amigo, mas você não vai conseguir.
Todavia, irei baixar o Camtasia e gravar um vídeo.
Editado Setembro 22 por Oneshot
info
Grupo: Infante
Registrado: 06/03/13
Posts: 1.6k
Reputação: +319
Gênero: Masculino
Char no Tibia: Lord Sorte

Boaa manow agr os cara vão ter vontade de fazer um servidor do zero deixando de tras o pda ![]()
info
Grupo: Infante
Registrado: 04/03/11
Posts: 1.6k
Reputação: +393
Char no Tibia: No Have

mesma que tenha limitações no sistema não é o motivo das criticas do banana.
Do mais.
É bem legal
info
Grupo: Conde
Registrado: 14/02/13
Posts: 702
Reputação: +196
Gênero: Masculino

Nossa, Porque diabos vocês pensam isso de mim, eu fiquei mega feliz quando vi este tópico, foi uma confusão minha que entendi errado o seu script, e OneShot, eu sou seu FAN, Nunca tentarei te atacar de qualquer modo, Levei até ban chingando o gustavo quando ele te deu ban.
Edit: Eu não entendo, mesmo tirando o rabbit da table, ele ainda não me ataca, mesmo printando todos os if.
Tentei printar o target dele
print(getCreatureTarget(target))
e retorna 0 sempre.
Editado Setembro 22 por BananaFight
info
Grupo: Marquês
Registrado: 05/07/09
Posts: 1.3k
Reputação: +732
Monstros Passivos
Muito bom dia, galera.
Sabe, eu estava estudando como funcionam os servidores de pokémons, aqueles que ainda estão começando, embriões de bons servidores, não grandes servidores como o Poke Brasil Online (PokeBro). O problema de todos esses servidores, é que todos são dependentes de sistemas criados pelo brun123 (se não me engano) dentro das sources, ou seja, esses servidores são dependentes do executável compilado do PDA, entre outros.
A pedido de um amigo, eu desenvolvi o sistema de monstros passivos. Sim aquele sistema que dá um upgrade na inteligência artificial das criaturas, onde algumas podem atacar o jogador assim que o ver, outras podem atacar apenas quando for atacadas.
É um sistema muito básico mesmo, eu fiz com C++ e Lua por puro comodismo, e pretendo deixar mais avançado apenas com C++ e uso de flags nos XMLs.
Se você quiser usar, sinta-se a vontade.
No seu arquivo monster.h, procure por:
bool isHostile() {return mType->isHostile;}Substitua por:
bool isHostile() const { std::string value; if(!getStorage("hostile", value)) return mType->isHostile; return booleanString(value); }No seu arquivo monster.cpp, procure por:
Dentro da função, procure por:
if(!isTarget(creature)) return false;Adicione abaixo:
No diretório creaturescripts/scripts, crie um novo arquivo com nome passive.lua e adicione:
PASSIVE_BEHAVIOR = {"Deer", "Rabbit"} -- Aqui ficam os monstros que não atacam, mesmo que atacados. function onCombat(cid, target) if isMonster(target) then if not isInArray(PASSIVE_BEHAVIOR, getCreatureName(target)) then doCreatureSetStorage(target, "hostile", 1) end doMonsterSetTarget(target, cid) end return true endNo mesmo diretório, abra o arquivo login.lua e adicione:
No diretório creaturescripts/, abra o arquivo creaturescripts.xml e adicione:
Agora é só compilar seu servidor, sem a pasta obj, ou seja, dê um Rebuild All e correr pro abraço com seu sistema de monstros passivos.
Abraços,
Oneshot.