-
Total de itens
121 -
Registro em
-
Última visita
-
Dias Ganhos
19
Tudo que PoRaI postou
-
Como tinha dito em outro tópico, estou aqui postando, até pq eu acabei que fiz pra usar em um servidor meu também, rs. De qualquer forma, esse é um código para reposicionar o nome quando uma criatura está com X outfit de forma fácil pelo arquivo OTML. É necessário editar as sources do otclient e compila-lo. No arquivo thingtype.cpp, adicione abaixo de: if(node2->tag() == "opacity") m_opacity = node2->value<float>(); isso: else if(node2->tag() == "name-displacement") m_name_displacement = node2->value<Point>(); No arquivo thingtype.h, adicione acima de: float getOpacity() { return m_opacity; } adicione isso: Point getNameDisplacement() { return m_name_displacement; } acima de: float m_opacity; adicione isso: Point m_name_displacement; No arquivo creatures.cpp, troque isso: // calculate main rects Rect backgroundRect = Rect(point.x-(13.5), point.y, 27, 4); backgroundRect.bind(parentRect); Size nameSize = m_nameCache.getTextSize(); Rect textRect = Rect(point.x - nameSize.width() / 2.0, point.y-12, nameSize); textRect.bind(parentRect); por isso: // calculate main rects const ThingTypePtr& thingType = getThingType(); Rect backgroundRect = Rect(point.x - (13.5) + thingType->getNameDisplacement().x, point.y + thingType->getNameDisplacement().y, 27, 4); backgroundRect.bind(parentRect); Size nameSize = m_nameCache.getTextSize(); Rect textRect = Rect(point.x - (nameSize.width() / 2.0) + thingType->getNameDisplacement().x, point.y - 12 + thingType->getNameDisplacement().y, nameSize); textRect.bind(parentRect); Pronto. Para configurar, basta editar o arquivo .otml do seu otclient, exemplo: creatures 10 name-displacement: 2 -12 11 name-displacement: 5 10 12 name-displacement: -4 3 No caso, alterei a outfit 10 para um displacement no eixo X + 2 e no eixo Y - 12, a outfit 11 para um displacement no eixo X + 5 e no eixo Y + 10 e a outfit 12 para um displacement no eixo X - 4 e no eixo Y + 3. O código foi testado e está funcionando perfeitamente.
-
[Encerrado] Aulas de .lua focado em NPC
tópico respondeu ao peterson18 de PoRaI em Tópicos Sem Resposta
Vai testando ué, só testando que você vai descobrir se funciona ou não. Copia um NPC e testa. Teu pc não vai explodir tentando. -
[Encerrado] Aulas de .lua focado em NPC
tópico respondeu ao peterson18 de PoRaI em Tópicos Sem Resposta
E qual o problema? Copia um script pronto ou substitui ele e testa. De qualquer forma, um exemplo: Crie um arquivo em actions/scripts/test.lua com isso: function onUse(cid, item, fromPosition, itemEx, toPosition) print("Hello World") end Em actions/actions.xml adicione a linha em algum lugar: <action itemid="2402" event="script" value="test.lua" /> 2402 é o Item, quando você der use nele, vai executar o código. Recomendo por um item que não seja multiuse (que não seja item de Use With). Se deu tudo certo, quando você der use no item, vai aparecer no terminal do seu servidor a mensagem "Hello World". -
[Encerrado] Aulas de .lua focado em NPC
tópico respondeu ao peterson18 de PoRaI em Tópicos Sem Resposta
Você pelo visto nem abriu né? Você não precisa ler. Principalmente nesse manual, eu nunca o li. Ninguém aprende a programar lendo um livro (no máximo em linguagens de baixo nível), as pessoas aprendem com prática/experiência. É só você ir procurando oq você precisa. Você precisa no minimo entender: "COMO PROGRAMAR" o resto são apenas funções que você testa ou vai no manual que ele explica melhor oq cada uma faz, afinal, É UM MANUAL DE COMO PROGRAMAR EM LUA, não um livro de historinha. Os "LONGOS" textos desse manual são apenas explicações do que cada coisa faz na teoria, se você não entender na prática. -
[Encerrado] Aulas de .lua focado em NPC
tópico respondeu ao peterson18 de PoRaI em Tópicos Sem Resposta
Antes de tudo: Lua é Lua, ponto. A única coisa que pode mudar é a versão do Lua. Recomendo você estudar a linguagem. https://www.lua.org/manual/5.2/pt/ Esse é o maior tutorial disponível na internet, rs. Se você quiser aprender a programar, é só ler isso e depois usar Lua com as funções do Tibia. Todas as funções que você pode usar estão no arquivo luascript.cpp da sua source. No caso do sistema de NPC, se você quiser entender ele a fundo, você precisa ler o código dele que foi parcialmente escrito em Lua na pasta data/npcs/lib. -
[Resolvido] C++ tostring(frase)):match("Ignora(.*)") como fazer?
pergunta respondeu ao nociam de PoRaI em Resolvidos
std::regex pattern("Shiny (.*)"); std::cmatch result; if(std::regex_match(getName().c_str(), result, pattern)) { std::cout << result[1] << std::endl; } -
versão?
-
boost.lua
-
[Encerrado] bad argument #1 to (string)
tópico respondeu ao Deadpool de PoRaI em Tópicos Sem Resposta
Certeza que esse é o erro na linha 513? Tá falando que a string é nula. -
Como é algo simples, não muda nada. Na minha opinião, por na source só dificulta pra dar manutenção. A vantagem de programar em C++ puro é que no geral, em códigos complexos, o desempenho será melhor dependendo da maneira que você programa utilizando os ponteiros, variáveis, loops e afins. Códigos complexos que digo é tipo: se imagine criando um algoritmo A* em Lua puro para o servidor, você não vai conseguir a não ser que carregue todo o mapa e passe ele através de uma função Lua. -- Correção só pra que não entenda errado: não é que você não vai conseguir carregar o mapa usando Lua puro, mas em questão de desempenho, o C++ é muito mais rápido.
-
[Resolvido] Fazer GM fala em Color Red no channel HELP
pergunta respondeu ao Senior Dalfdack de PoRaI em Resolvidos
Quando um GM etc fala no Help não fica colorido? Além disso, me passe o arquivo: XML/groups.xml -
0.4: local pokemons = {"Zapdos", "Moltres", "Articuno","Entei","Lugia","Ho-oh"} function onKill(cid, target, lastHit) if isInArray(pokemons, getCreatureName(target)) then for _, pid in pairs(getPlayersOnline()) do doPlayerSendTextMessage(pid, MESSAGE_TYPES["blue"], "O jogador "..getCreatureName(cid).." derrotou o passáro lendario "..getCreatureName(target).."!") end end return true end 1.2: local pokemons = {"Zapdos", "Moltres", "Articuno","Entei","Lugia","Ho-oh"} function onKill(creature, target) if isInArray(pokemons, target:getName()) then for _, player in pairs(Game.getPlayers()) do player:sendTextMessage(MESSAGE_TYPES["blue"], "O jogador "..player:getName().." derrotou o passáro lendario "..target:getName().."!") end end return true end Caso dê algum erro de MESSAGE_TYPES (provavelmente na 1.2), adicione ao final do arquivo constant, na pasta data/lib do seu servidor, isso: local MESSAGE_TYPES = { ["advance"] = MESSAGE_EVENT_ADVANCE, ["event"] = MESSAGE_EVENT_DEFAULT, ["white"] = MESSAGE_EVENT_DEFAULT, ["orange"] = MESSAGE_STATUS_CONSOLE_ORANGE, ["info"] = MESSAGE_INFO_DESCR, ["green"] = MESSAGE_INFO_DESCR, ["small"] = MESSAGE_STATUS_SMALL, ["blue"] = MESSAGE_STATUS_CONSOLE_BLUE, ["red"] = MESSAGE_STATUS_CONSOLE_RED, ["warning"] = MESSAGE_STATUS_WARNING, ["status"] = MESSAGE_STATUS_DEFAULT } Qualquer alteração, basta trocar no script "blue" para qualquer outro valor dessa tabela.
-
atualizei ambos os scripts, testa aí e me fala.
-
Ah sim, nem tinha analisado o código, só o gif, rs. Pensei que você tava arrastando ele pra testar, awoejawei. Enfim, a função internalMoveCreature é usada para mover criaturas (quase igual a função internalTeleport) sem usar o algoritmo de Path Finding. Em C++: int LuaScriptInterface::luaGamePlayerMovePokemon(lua_State* L) { // Game.playerMovePokemon(pokemon, toPosition) Creature* pokemon = getCreature(L, 1); const Position& position = getPosition(L, 2); if (pokemon->getMonster()) { std::forward_list<Direction> dirList; if(pokemon->getPathTo(position, dirList, 0, 0, true, true)) pokemon->startAutoWalk(dirList); } return 1; } Lua: (Esse código ta mais elaborado do que o C++) local pokemonsMoveTo = {} function Player:movePokemonByList(pokemon, dirList, index) if self and pokemon and #dirList >= index then local speed = pokemon:getSpeed() * 3 pokemon:move(dirList[index], 16) index = index + 1 pokemonsMoveTo[self:getId()] = addEvent(function() self:movePokemonByList(pokemon, dirList, index) end, speed) end end function Player:movePokemon(pos) local pokemon = self:getSummons() if #pokemon == 0 then return false end if pokemonsMoveTo[self:getId()] then stopEvent(pokemonsMoveTo[self:getId()]) pokemonsMoveTo[self:getId()] = nil end local dirList = pokemon[1]:getPathTo(pos, 0, 0, true, true) self:movePokemonByList(pokemon[1], dirList, 1) return true end
-
Alguma configuração do config.lua ou na source para teleportar summons para perto quando tiver longe em X sqms.
-
Funcionou ou não? aweuihaewu. Qualquer coisa, adiciona no discord que é mais fácil: Porai#4377 E ai eu posto o problema resolvido.
-
pokemon moves.lua
-
Testa ai pokemon moves.lua
-
Você precisa fazer uma action pra isso e não colocar o item dentro do bau. Uma Action pra quando clicar, adicionar o item no player e não no container.
-
[Resolvido] Alguem saberia me ajudar nesse bug?
pergunta respondeu ao murilolima121 de PoRaI em Resolvidos
Blacklist pro erro sumir só recompilando a source pq ela não tá mais no ar. -
Oq exatamente quer fazer? Não é mais fácil spawnar por posição?
-
Qual tipo de servidor vale a pena investir?
tópico respondeu ao Shiroe de PoRaI em Notícias e Debates
Siga o seu coração. -
Posta o arquivo login.lua do seu servidor.
-
Coloca a versão quando for postar coisas do gênero. 1.0. local TELEPORTED_CREATURES = {} local TELEPORT_LOW_HEALTH = { {name = "Demon", to = {x=1,y=1,z=7}, percent=80}, {name = "Demon", to = {x=1,y=1,z=7}, percent=60}, {name = "Demon", to = {x=1,y=1,z=7}, percent=40}, } function onHealthChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin) if creature:isMonster() then for n, m in pairs(TELEPORT_LOW_HEALTH) do if m.name == creature:getName() and creature:getHealth() <= (creature:getMaxHealth() / 100) * m.percent then local mid = creature:getId() if not TELEPORTED_CREATURES[mid] or Position(TELEPORTED_CREATURES[mid]) ~= Position(m.to) then TELEPORTED_CREATURES[mid] = m.to creature:teleportTo(m.to, false) break end end end end return primaryDamage, primaryType, -secondaryDamage, secondaryType end 0.3.6pl1. local TELEPORTED_CREATURES = {} local TELEPORT_LOW_HEALTH = { {name = "Demon", to = {x=1,y=1,z=7}, percent=80}, {name = "Demon", to = {x=1,y=1,z=7}, percent=60}, {name = "Demon", to = {x=1,y=1,z=7}, percent=40}, } function onStatsChange(cid, attacker, type, combat, value) if isMonster(cid) then for n, m in pairs(TELEPORT_LOW_HEALTH) do if m.name == getCreatureName(cid) and getCreatureHealth(cid) <= (getCreatureMaxHealth(cid) / 100) * m.percent then local pos = m.to.x..","..m.to.y..","..m.to.z if not TELEPORTED_CREATURES[cid] or TELEPORTED_CREATURES[cid] ~= pos then TELEPORTED_CREATURES[cid] = pos doTeleportThing(cid, m.to, false) break end end end end return true end São creaturescripts. Basta configurar o script no creaturescripts.xml e colocar no xml da criatura: <script> <event name="nome_do_evento_q_vc_configurou"/> </script>
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.