Ir para conteúdo

Oneshot

Marquês
  • Total de itens

    1347
  • Registro em

  • Última visita

  • Dias Ganhos

    36

Tudo que Oneshot postou

  1. @ManelksCouto Também gostei de te reportar @TkSamer local config = { premium = "yes", protectionLevel = 50, var = { [PLAYERLOSS_EXPERIENCE] = "yes", [PLAYERLOSS_MANA] = "no", [PLAYERLOSS_SKILLS] = "no", [PLAYERLOSS_CONTAINERS] = "no", [PLAYERLOSS_ITEMS] = "no" } } function onDeath(cid, corpse, deathList) if getPlayerLevel(cid) > config.protectionLevel then return true end if getBooleanFromString(config.premium) == true and not isPremium(cid) then return true end if getCreatureSkullType(cid) > 3 then return true end for type, enabled in pairs(config.var) do enabled = getBooleanFromString(enabled) if enabled == true then doPlayerSetLossPercent(cid, type, 0) end end return true end Ah, nem vi que o Vodkart postou. Eu gosto de refazer scripts, aí eu demoro.
  2. Só executar querys, ué. Por exemplo: UPDATE `players` SET `maxhealth` = 100, `health` = 100 WHERE `vocation` = 2; Abraços.
  3. É que eu coloquei para enviar apenas para os outros jogadores e não para o próprio jogador. local config = { storage = 66998, delay = 2 * 60, needMoney = 10000 } function onSay(cid, words, param, channel) if param == "" then doPlayerSendCancel(cid, words .." [message]") return true end if not doPlayerRemoveMoney(cid, config.needMoney) then doPlayerSendCancel(cid, "Sorry, you need ".. config.needMoney .." to use this command.") return true end if getCreatureStorage(cid, config.storage) > os.time() then doPlayerSendCancel(cid, "Sorry, you need to wait ".. getCreatureStorage(cid, config.storage) - os.time() .." seconds to use this command.") return true end local msg = getCreatureName(cid) .." [".. getPlayerLevel(cid) .."]".. param for _, pid in ipairs(getPlayersOnline()) do doPlayerSendTextMessage(pid, MESSAGE_STATUS_CONSOLE_ORANGE, msg) end doCreatureSetStorage(cid, config.storage, os.time() + config.delay) return true end Agora está tudo certo.
  4. OTClient é realmente foda.
  5. local config = { storage = 66998, delay = 2 * 60, needMoney = 10000 } function onSay(cid, words, param, channel) if param == "" then doPlayerSendCancel(cid, words .." [message]") return true end if not doPlayerRemoveMoney(cid, config.needMoney) then doPlayerSendCancel(cid, "Sorry, you need ".. config.needMoney .." to use this command.") return true end if getCreatureStorage(cid, config.storage) > os.time() then doPlayerSendCancel(cid, "Sorry, you need to wait ".. getCreatureStorage(cid, config.storage) - os.time() .." seconds to use this command.") return true end local msg = getCreatureName(cid) .." [".. getPlayerLevel(cid) .."]".. param for _, pid in ipairs(getPlayersOnline()) do if pid != cid then doPlayerSendTextMessage(pid, MESSAGE_STATUS_CONSOLE_ORANGE, msg) end end doCreatureSetStorage(cid, config.storage, os.time() + config.delay) return true end Toma.
  6. @Slicer Não, não tem nada a ver com o que você disse. A função que eu usei é justamente o que o script estava precisando, se você usar a função desse jeito: doPlayerSendMailByName(cid, 2160, 1) Isso não vai funcionar, pois a função não use IDs de itens como parâmetros, mas sim UIDs. Pois seus parâmetros nas sources são esses. doPlayerSendMailByName(cid, item[, town]) Ou seja o certo é criar um UID com a função doCreateItemEx e então usar ele no doPlayerSendMailByName. No mais, deixo claro que testei o script no The Forgotten Server 0.4.0 rev4394 e ele funcionou perfeitamente. Abraços.
  7. Isso não é um erro, é simplesmente o aviso de que 6 mods (que é um tipo de script que fica na pasta /mods do seu servidor) foram carregados. Sobre o fato de demorar para carregar, depende muito do processador e da RAM do computador usado.
  8. @knightkunn Em data/creaturescripts/scripts, crie um arquivo chamado sameipkill.lua e cole o conteúdo abaixo: function onKill(cid, target) if isPlayer(cid) and isPlayer(target) then local m = doConvertIntegerToIp(getPlayerIp(cid)) local n = doConvertIntegerToIp(getPlayerIp(target)) if m == n then local x, y = getPlayerExperience(cid), getExperienceForLevel(getPlayerLevel(cid) - 1) doPlayerAddExperience(cid, (y - x)) end end return true end No creaturescripts.xml, você deve colocar <event type="kill" name="SameIpKill" event="script" value="kill.lua"/> E no login.lua em data/creaturescripts/scripts, você deve colocar: registerCreatureEvent(cid, "SameIpKill") Antes de: return true O script faz com que o trapaceiro perca um nível toda vez que matar alguém de mesmo IP. Abraços.
  9. @SmiX O dono do tópico quer que quando o monstro use uma magia, ele fale algo, como se fosse um jogador invocando uma magia qualquer? Entendeu agora? @juliok80 Então, rapaz, não existe um método possível em Lua e nem opções no arquivo XML do monstro. Mas algumas edições nas sources podem simular algo parecido. Talvez eu faça algo e crie um tópico. Abraços.
  10. A função loadstring carrega a string fornecida na memória e executa ela como se fosse um script Lua.
  11. Sobre o tópico, acho que é a mesma coisa que aconteceu comigo, eu via muita gente sendo promovida a Moderação e Coordenação, enquanto eu criava teia no cargo de Colaboração. A diferença é que eu pedi a demissão. Tenho nada contra o Anyur, nem o conheço, mas se Critical, Vilden e até uma pessoa aí não gostavam dele, é algo que não dá para simplesmente relevar. Engraçado mesmo como ele sai e sempre volta para o cargo de Coordenação. Mas belê galera, aqui era um tópico de desabafo e não uma reunião de haters. Então chega rsrs.
  12. É a mesma que eu te passei por PM, lembra? /calc 2+2 /calc 2-2 /calc 2*2 /calc 2/2 /calc 2^2 /calc 2² /calc (2 + 2)² E por aí vai.
  13. Vou testar o script aqui e ver qual o erro. Abraços. @Edit Aqui funcionou perfeitamente
  14. function getInAOrder(t) table.sort(t, function(a, b) return string.byte(string.sub(a, 0, 1)) < string.byte(string.sub(b, 0, 1)) end) return t end Hehehe... No mais, ótima função mesmo, Max. Abração.
  15. Seu servidor não é The Forgotten Server 0.4, uma vez que essa versão não possui a função doSendMailByName, e possui a função getPlayerByNameWildcard, que achei estranho o seu servidor não ter. E quem disse que é para digitar os parâmetros sem vírgula?
  16. Reportado: O pedido ou dúvida do tópico foi atendido.
  17. Infelizmente não há como. Atributos como magic level, skills, dentre outros que precisam do movements.xml, não podem ser editados pelos comandos usados no sistema.
  18. function onSay(cid, words, param, channel) local ret = param .." = #return ".. param .."#" doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, string.gsub(ret, "%#(.-)%#", function(str) return loadstring(str) () end)) return true end Tá aí uma calculadora que faz todas as mesmas operações que a sua.
  19. function isValidName(name) return db.getResult("SELECT `id` FROM `players` WHERE `name` = ".. db.escapeString(name) ..";"):getID() ~= -1 end function onSay(cid, words, param, channel) if param == "" then doPlayerSendCancel(cid, "Parameters missing. ".. words .." [name], [item_name], [amount].") return true end local t = string.explode(param, ",") local depot = false local pid = getPlayerByName(t[1]) if not pid then pid = t[1] depot = true if not isValidName(t[1]) then doPlayerSendCancel("A player with this name doesn't exists.") return true end end local itemid = getItemIdByName(t[2], false) if not itemid then doPlayerSendCancel(cid, "A item with this name doesn't exists.") return true end local amount = tonumber(t[3]) or 1 if depot == true then local item = doCreateItemEx(itemid, amount) doPlayerSendMailByName(pid, item) else doPlayerAddItem(pid, itemid, amount) end doPlayerSendTextMessage(cid, 20, "Item delivered to the player: ".. t[1] ..".") return true end
  20. function isValidName(name) return db.getResult("SELECT `id` FROM `players` WHERE `name` = ".. db.escapeString(name) ..";"):getID() ~= -1 end function onSay(cid, words, param, channel) if param == "" then doPlayerSendCancel(cid, "Parameters missing. ".. words .." [name], [id], [amount].") return true end local t = string.explode(param, ",") local depot = false local pid = getPlayerByNameWilcard(t[1]) if not pid then pid = t[1] depot = true if not isValidName(t[1]) then doPlayerSendCancel("A player with this name doesn't exists.") return true end end local itemid = getItemIdByName(t[2], false) if not itemid then doPlayerSendCancel(cid, "A item with this name doesn't exists.") return true end local amount = tonumber(t[3]) or 1 if depot == true then local item = doCreateItemEx(itemid, amount) doPlayerSendMailByName(pid, item) else doPlayerAddItem(pid, itemid, amount) end doPlayerSendTextMessage(cid, 20, "Item delivered to the player: ".. t[1] ..".") return true end
  21. Consegui reduzir só 26 linhas da função do Dokmos. Preciso treinar mais x__x
  22. Nossa, essa função do Dokmos dá para reduzir MUITO. haha
  23. @Roksas Não é isso que o dono do tópico quer. Ele quer uma maneira de parar aqueles que usam Elfbot para acelerar os ataques ao máximo. @knightkunn void Player::doAttacking(uint32_t) { if(!lastAttack) lastAttack = OTSYS_TIME() - getAttackSpeed() - 1; else if((OTSYS_TIME() - lastAttack) < getAttackSpeed()) return; if(hasCondition(CONDITION_PACIFIED) && !hasCustomFlag(PlayerCustomFlag_IgnorePacification)) { lastAttack = OTSYS_TIME(); return; } Item* item = getWeapon(false); if(const Weapon* _weapon = g_weapons->getWeapon(item)) { if(_weapon->interruptSwing() && !canDoAction()) { SchedulerTask* task = createSchedulerTask(getNextActionTime(), boost::bind(&Game::checkCreatureAttack, &g_game, getID())); setNextActionTask(task); } else { if((!_weapon->hasExhaustion() || !hasCondition(CONDITION_EXHAUST)) && _weapon->useWeapon(this, item, attackedCreature)) lastAttack = OTSYS_TIME(); updateWeapon(); } } else if(Weapon::useFist(this, attackedCreature)) lastAttack = OTSYS_TIME(); } Isto acima, é um exemplo da parte responsável por administrar os ataques dos jogadores no código-fonte do servidor, é ela que controla o intervalo de tempo entre um ataque e outro. Uma maneira simples de parar o fast attack, é criar uma variável que controle os intervalos de tempo e identifique jogadores que estejam atacando muitas vezes em um curto intervalo. Sendo possível com isso, banir tais jogadores. Abraços.
  24. function hasItems(position, rangex, rangey, ...) local fromPosition = {x = position.x - rangex, y = position.y - rangey, z = position.z} local toPosition = {x = position.x + rangex, y = position.y + rangey, z = position.z} local items = {...} local match = false for x = fromPosition.x, toPosition.x do for y = fromPosition.y, toPosition.y do local p = {x = x, y = y, z = fromPosition.z} for _, item in ipairs(items) do local w = getTileItemById(p, item) if w.uid > 0 then match = true end end end end return match end Acabou de sair do forno. Utilização: hasItems(getThingPosition(cid), 1, 1, 2112, 2160, 2152, 2148) Irá procurar em uma área de 3X3 ao redor do jogador pelos quatro itens especificados na função, caso ache qualquer um dos quatro, irá retornar true.
  25. local combat1 = createCombatObject() setCombatParam(combat1, COMBAT_PARAM_CREATEITEM, 6139) local area1 = createCombatArea({ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 2, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 1} }) setCombatArea(combat1, area1) local combat2 = createCombatObject() setCombatParam(combat2, COMBAT_PARAM_CREATEITEM, 6140) local area2 = createCombatArea({ {0, 1, 1, 1, 0}, {0, 0, 0, 0, 0}, {0, 0, 2, 0, 0}, {0, 0, 0, 0, 0}, {1, 1, 1, 1, 0} }) setCombatArea(combat2, area2) local combat3 = createCombatObject() setCombatParam(combat3, COMBAT_PARAM_CREATEITEM, 6142) local area3 = createCombatArea({ {0, 0, 0, 0, 1}, {1, 0, 0, 0, 1}, {1, 0, 2, 0, 1}, {1, 0, 0, 0, 1}, {0, 0, 0, 0, 0} }) setCombatArea(combat3, area3) local combat4 = createCombatObject() setCombatParam(combat4, COMBAT_PARAM_CREATEITEM, 6141) local area4 = createCombatArea({ {1, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 2, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }) setCombatArea(combat4, area4) local function clean_wood(position) local fromPosition = {x = position.x - 5, y = position.y - 5, z = position.z} local toPosition = {x = position.x + 5, y = position.y + 5, z = position.z} for x = fromPosition.x, toPosition.x do for y = fromPosition.y, toPosition.y do local tile = {x = x, y = y, z = fromPosition.z} for itemid = 6139, 6142 do local wood = getTileItemById(tile, itemid) if wood.uid > 0 then doRemoveItem(wood.uid, 1) doSendMagicEffect(tile, CONST_ME_POFF) end end end end end function onCastSpell(cid, var) doCombat(cid, combat1, var) doCombat(cid, combat2, var) doCombat(cid, combat3, var) doCombat(cid, combat4, var) addEvent(clean_wood, 10 * 1000, getThingPosition(cid)) return true end
  • Quem Está Navegando   0 membros estão online

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