-
Total de itens
1347 -
Registro em
-
Última visita
-
Dias Ganhos
36
Tudo que Oneshot postou
-
@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.
-
Só executar querys, ué. Por exemplo: UPDATE `players` SET `maxhealth` = 100, `health` = 100 WHERE `vocation` = 2; Abraços.
-
É 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.
-
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.
-
dúvida Comando Adicionar Quant. Item Ao Player
pergunta respondeu ao piratadoidao de Oneshot em Scripts
@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. -
dúvida [Encerrado] Erro ao ligar o servidor
tópico respondeu ao Wiiskhp de Oneshot em Tópicos Sem Resposta
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. -
pedido Script Para quando matar o player de mesmo ip perde level
pergunta respondeu ao knightkunn de Oneshot em Scripts
@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. -
@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.
-
A função loadstring carrega a string fornecida na memória e executa ela como se fosse um script Lua.
-
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.
-
É 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.
-
dúvida Comando Adicionar Quant. Item Ao Player
pergunta respondeu ao piratadoidao de Oneshot em Scripts
Vou testar o script aqui e ver qual o erro. Abraços. @Edit Aqui funcionou perfeitamente -
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.
-
dúvida Comando Adicionar Quant. Item Ao Player
pergunta respondeu ao piratadoidao de Oneshot em Scripts
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? -
Reportado: O pedido ou dúvida do tópico foi atendido.
-
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.
-
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.
-
dúvida Comando Adicionar Quant. Item Ao Player
pergunta respondeu ao piratadoidao de Oneshot em Scripts
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 -
dúvida Comando Adicionar Quant. Item Ao Player
pergunta respondeu ao piratadoidao de Oneshot em Scripts
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 -
Consegui reduzir só 26 linhas da função do Dokmos. Preciso treinar mais x__x
-
Nossa, essa função do Dokmos dá para reduzir MUITO. haha
-
pedido Tem algum programa que identifique fast atk?
pergunta respondeu ao knightkunn de Oneshot em Scripts
@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. -
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.
-
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.