Baxnie
Campones-
Total de itens
17 -
Registro em
-
Última visita
Baxnie's Achievements
-
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.
-
[Arquivado]Erro ao compilar no Fedora
tópico respondeu ao DominusIgnis de Baxnie em Noticias - Arquivo
E está em /usr/lib/boost* com as 3 libs requeridas? -
Pode sim, mas não aconselho, visto que terá problemas com o otitemeditor.
-
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.
-
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)
-
Como exemplo de uso, o modulo client_locales utiliza para enviar o locale escolhido para o servidor.
-
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())
-
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.
-
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.
-
Mas what??? Essa é a chave PÚBLICA! Pra que você iria escondê-la? A chave PRIVADA você coloca dentro do seu servidor.
-
Claro. local rsa = '123' -- Chave publica RSA g_game.setRsa(rsa) Coloca isso em um module seu, que é carregado depois de todos.
-
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.
-
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
-
Qual é a coisa mais importante em um código? E por que é a elegância?
tópico respondeu ao Skyen de Baxnie em Lixeira Pública
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.