Ir para conteúdo

Baxnie

Campones
  • Total de itens

    17
  • Registro em

  • Última visita

1 Seguidor

Sobre Baxnie

Informações

  • Forma que conheci o xTibia
    Sites de Busca
  • Sou
    Programador

Últimos Visitantes

O bloco dos últimos visitantes está desativado e não está sendo visualizado por outros usuários.

Baxnie's Achievements

  1. valeuu, como conseguiu??
  2. Baxnie

    Bug no Trade

    Deve ter algum erro no protocolo 9.1. Nem todos foram bem testados. Da uma olhada no opcode 122 e vê como ele é no 9.1.
  3. E está em /usr/lib/boost* com as 3 libs requeridas?
  4. Pode sim, mas não aconselho, visto que terá problemas com o otitemeditor.
  5. Baxnie

    Rune AIM

    void Game::useWith(const ItemPtr& item, const ThingPtr& toThing) { if(!canPerformGameAction() || !item || !toThing) return; Position pos = item->getPosition(); if(!pos.isValid()) // virtual item pos = Position(0xFFFF, 0, 0); // means that is a item in inventory if(toThing->isCreature()) m_protocolGame->sendUseOnCreature(pos, item->getId(), item->getStackPos(), toThing->getId()); else m_protocolGame->sendUseItemWith(pos, item->getId(), item->getStackPos(), toThing->getPosition(), toThing->getId(), toThing->getStackPos()); } Caso seja criatura, ele envia outro pacote, ou seja, players com lag ainda conseguiriam acertar caso cliquem em uma criatura. Para atingir o que você quer, uma opção é tirar o sendUseOnCreature.
  6. Em modules/gamelib/protocolgame.lua existe essa função: function ProtocolGame.registerExtendedOpcode(opcode, callback) Um exemplo de como utiliza-la: local function test(protocol, opcode, buffer) print('received something from server!') end ProtocolGame.registerExtendedOpcode(100, test)
  7. Como exemplo de uso, o modulo client_locales utiliza para enviar o locale escolhido para o servidor.
  8. Acho que o efeito desejado é esse: -- Library function function inherit(self, ...) local objects = {...} for i=1,#objects do for key,value in pairs(objects[i]) do if not self[key] then self[key] = value end end end end -- Creature.lua file Creature = { name = 'Unknown', level = 0, } function Creature:setName(name) self.name = name end function Creature:getName() return self.name end -- Npc.lua file Npc = {} function Npc.create() local obj = {} setmetatable(obj, { __index = Npc }) return obj end function Npc:getName() return 'Npc: ' .. self.name end inherit(Npc, Creature) -- Monster.lua file Monster = {} function Monster.create() local obj = {} setmetatable(obj, { __index = Monster }) return obj end function Monster:getName() return 'Monster: ' .. self.name end inherit(Monster, Creature) -- Test.lua file -- Creature is an abstract class, we can't create it alone. --local creature = Creature.create() --print(creature:getName()) local npc = Npc.create() npc:setName('Dalvo') print(npc:getName()) local monster = Monster.create() monster:setName('Pato Donald') print(monster:getName())
  9. Se a velocidade da criatura é 0, então teleportar de fato é o comportamento certo. Então pegue o tfs 0.2 e deixe-o compatível com seus scripts. Após isto você começa a fazer as edições necessárias para deixar os scripts funcionando novamente e ai sim implemente o order como falei.
  10. Quanto a liberação de modulos, tenho certeza de que não é necessário mais que 1 semana (sendo muito exagerado) para criar uma cópia dele. O importante é o que está no seu servidor. Não adianta nada ter o modulo do cliente se ele não é compativel com seu servidor. Em relação ao "bug" do order. int32_t LuaInterface::luaDoMoveCreatureToPosition(lua_State* L) { //doMoveCreatureToPosition(cid, position[, minDist = 0, maxDist = minDist]) int maxDist = 0, minDist = 0; if(lua_gettop(L) > 3) maxDist = popNumber(L); if(lua_gettop(L) > 2) { minDist = popNumber(L); if(lua_gettop(L) < 3) maxDist = minDist; } PositionEx position; popPosition(L, position); ScriptEnviroment* env = getEnv(); if(Creature* creature = env->getCreatureByUID(popNumber(L))) { std::list<Direction> listDir; if(g_game.getPathToEx(creature, position, listDir, minDist, maxDist, true, true, 10)) { Dispatcher::getInstance().addTask(createTask(boost::bind(&Creature::startAutoWalk, creature, listDir))); lua_pushboolean(L, true); } else lua_pushboolean(L, false); } else { errorEx(L, getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } Declare esta função no luascript.cpp. E utilize-a no script de order. Eu cheguei a olhar o código do order postado no issues do otclient. Que vergonha.
  11. Baxnie

    Dúvida RSA

    Mas what??? Essa é a chave PÚBLICA! Pra que você iria escondê-la? A chave PRIVADA você coloca dentro do seu servidor.
  12. Baxnie

    Dúvida RSA

    Claro. local rsa = '123' -- Chave publica RSA g_game.setRsa(rsa) Coloca isso em um module seu, que é carregado depois de todos.
  13. Bem legal o tutorial. MainWindow e Button? Cuidado com as letras maiúsculas e minúsculas. Acho que uma imagem para ajudar na explicação dos anchors seria uma boa ideia. O pessoal costuma ter dificuldade em entendê-los. Nesse item; Passo 3 conhecendo as janelas; Ficaria bem legal colocar algumas imagens, mostrando o que é um MiniWindow, um Button, um Label, etc.
  14. Olá, eu fiz esta biblioteca para melhor gerenciar os eventos. A função mais útil e nova é a createCycleEvent. local EVENT_TYPE = { SINGLE = 1, CYCLE = 2, } -- private functions local function parseSingleEvent(event) event.f(unpack(event.args)) event.id = nil end local function parseCycleEvent(event) event.f(unpack(event.args)) event.id = addEvent(parseCycleEvent, event.time, event) end -- member functions Event = {} function Event:start() if not self.id then if self.type == EVENT_TYPE.SINGLE then self.id = addEvent(parseSingleEvent, self.time, self) self.finishTime = os.mtime() + self.time elseif self.type == EVENT_TYPE.CYCLE then parseCycleEvent(self) self.finishTime = -1 end end end function Event:restart(time) if self.id then self:stop() end self.time = time or self.time self:start() end function Event:stop() if self.id then stopEvent(self.id) self.id = nil end end function Event:trigger() if self.type == EVENT_TYPE.SINGLE then if self.id then self:stop() self.f(unpack(self.args)) end elseif self.type == EVENT_TYPE.CYCLE then print(debug.traceback('Can\'t trigger a cycle event.')) end end function Event:isFinished() return not self.id end -- public functions function createSingleEvent(f, time, ...) local event = {} event.f = f event.args = {...} event.time = time event.type = EVENT_TYPE.SINGLE setmetatable(event, { __index = Event }) event:start() return event end function createCycleEvent(f, time, ...) local event = {} event.f = f event.args = {...} event.time = time event.type = EVENT_TYPE.CYCLE setmetatable(event, { __index = Event }) event:start() return event end Como um simples exemplo, createCycleEvent pode ser usada para enviar um efeito em certa posição do mapa a cada 500 ms. g_testEvent = createCycleEvent(doSendMagicEffect, 500, {x=100,y=100,z=7}, CONST_ME_FIREAREA) -- pode ser parado quando usa um item function onUse() g_testEvent:stop() end -- pode alterar a velocidade ao usar outro item function onUse() g_testEvent:restart(100) end
  15. Agora sim gostei. Isso me lembrou algo que vi no ano passado. http://forums.######...l-em-scripting! Acho que agora você concorda que todos são nível novato. Até postei minha versão lá quando vi o tópico. Quanto a este tutorial, Use vírgula no último elemento de uma tabela vertical. Essa parte eu já estava pensando há algum tempo em usar. E com certeza irei, porque ja tive alguns problemas por esquecer de adicionar a vírgula no final. De resto está muito bom, uso praticamente tudo que está dito ai. Ah, eu uso o Sublime Text 2 http://www.sublimetext.com/ É muito bom, tem várias funções úteis.
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...