Ir para conteúdo

Oneshot

Marquês
  • Total de itens

    1347
  • Registro em

  • Última visita

  • Dias Ganhos

    36

Tudo que Oneshot postou

  1. Oneshot

    Pedido Npc Transport

    local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} local parameters = {} local teleports = { ["Random Void"] = {price = 100, position = {x = 0, y = 0, z = 7}} } function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function onCreatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid for name, info in pairs(teleports) do if msgcontains(msg, name) then selfSay("Você quer ir para {".. name .."}?", cid) talkState[talkUser] = 1 parameters[talkUser] = info break end end if talkState[talkUser] == 1 then if msgcontains(msg, "yes") then if doPlayerRemoveMoney(cid, parameters[talkUser].price) then doTeleportThing(cid, parameters[talkUser].position) selfSay("Boa viagem!", cid) else selfSay("Desculpe, você não possui ".. parameters[talkUser].price .." gp para viajar.", cid) talkState[talkUser] = 0 end elseif msgcontains(msg, "no") then selfSay("Tudo bem, volte quando mudar de ideia.", cid) talkState[talkUser] = 0 npcHandler:releaseFocus(cid) end end return true end local msg = "Olá, |PLAYERNAME|. Gostaria de viajar? Posso te levar para: " local i = 1 for name, info in pairs(teleports) do msg = msg .." {".. name .."}" .. (i == 1 and "" or ", ") i = i + 1 end npcHandler:setMessage(MESSAGE_GREET, msg) npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, onCreatureSayCallback) npcHandler:addModule(FocusModule:new()) Configure novos locais aqui: local teleports = { ["Random Void"] = {price = 100, position = {x = 0, y = 0, z = 7}} } Sempre colocando vírgula no final da linha, com exceção da última linha. local teleports = { ["Random Void"] = {price = 100, position = {x = 0, y = 0, z = 7}}, ["Terra do Exemplo"] = {price = 777, position = {x = 160, y = 54, z = 7}} }
  2. Oneshot

    Zombie Aleatorio

    Me lembra um pouco o modo Quarentena do Combat Arms, eu posso fazer, mas levaria um certo tempo.
  3. local config = { messages = {"AUSENTE!", "VOLTO JÁ!"}, delay = 10 } local function automessage(cid) if isCreature(cid) then if getCreatureStorage(cid, 101010) == 1 then doCreatureSay(cid, config.messages[math.random(1, #config.messages)], TALKTYPE_ORANGE_1) addEvent(automessage, config.delay * 1000, cid) end end return end function onSay(cid, words, param, channel) if getCreatureStorage(cid, 101010) == -1 then doCreatureSay(cid, config.messages[math.random(1, #config.messages)], TALKTYPE_ORANGE_1) addEvent(automessage, config.delay * 1000, cid) doPlayerSendCancel(cid, "Ausente Ativado") doCreatureSetStorage(cid, 101010, 1) else doPlayerSendCancel(cid, "Ausente Desativado") doCreatureSetStorage(cid, 101010, -1) end return true end
  4. Olá, KennyxD Quando você obter uma pedido/dúvida atendido na seção, reporte o tópico clicando em Denunciar e escreva uma mensagem para a moderação, assim ela ficará sabendo do estado do tópico e poderá mover para a seção correta. Sobre o pedido, já que você descobriu como fazer, poderia muito bem partilhar seu conhecimento para com toda comunidade. De qualquer jeito, conheço um modo feito nas sources. Em combat.cpp, procure por: MagicField::onStepInField Dentro do código, procure por e apague: if(isUnstepable() || isBlocking(creature)) { if(!creature->isGhost()) g_game.internalRemoveItem(creature, this, 1); return; } Compile e seja feliz. Reportado. Abraços
  5. function onSay(cid, words, param) if getCreatureStorage(cid, 15967) < os.time() then return doPlayerPopupFYI(cid, "Apenas VIPs podem recuperar stamina.") end if not doPlayerRemoveItem(cid, 5468, 1) then return doPlayerSendCancel(cid, "Você não possui ".. getItemNameById(5468) ..".") end doPlayerAddStamina(cid, 100000000) doSendMagicEffect(getThingPosition(cd), CONST_ME_HOLYAREA) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você será kickado em 10 segundos para regenerar sua stamina.") addEvent(doRemoveCreature, 10 * 1000, cid, true) return true end
  6. Oneshot

    Fields

    Acho que só com grandes alterações nas sources, pois não há ainda quaisquer parâmetros de configuração para alterar a AI do monstro nesse quesito.
  7. Oneshot

    Auto Mensage

    Eu criei o sistema para o jogador definir a própria mensagem, digitando !camelo mensagem. A tag que usei para testar foi: <talkaction words="!camelo" event="script" value="nome_do_arquivo.lua"/> Abraços.
  8. Oneshot

    Auto Mensage

    local config = { tile = 407, delay = 8 * 1000 } local function camelo(cid, msg) if not isCreature(cid) then return end if getTileInfo(getThingPosition(cid)).itemid ~= config.tile then return end doCreatureSay(cid, msg, TALKTYPE_ORANGE_1) addEvent(camelo, config.delay, cid, msg) end function onSay(cid, words, param, channel) if param == "" then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") return true end local position, thing = getThingPosition(cid) thing = getTileInfo(position) if(thing.itemid ~= config.tile) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You cannot use this command here.") end camelo(cid, param) return true end
  9. Oneshot

    Vip System

    function onStepIn(cid, item, position, fromPosition) if item.actionid == 13700 then local config = { msgDenied = "Você não e vip ,fale com Administrador do Server.", msgWelcome = "Seja Bem Vindo a Area vip." } local toPosition = {x = 0, y = 0, z = 7} if getPlayerStorageValue(cid, 13540) - os.time() <= 0 then doTeleportThing(cid, toPosition, true) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, config.msgDenied) doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE) return TRUE end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, config.msgWelcome) end return true end local toPosition = {x = 0, y = 0, z = 7}
  10. local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) local config = { price = 50000, delay = 5 * 60, control = {10555, 10556} } if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid -- Conversa Jogador/NPC if msgcontains(msg, "care") then local p = (config.price % 1000 == 0 and (config.price / 1000) or config.price) if getPlayerStorageValue(cid, config.control[1]) > os.time() then selfSay("Do you want me to take care of your egg for ".. p .." ".. (p == config.price and "" or "k") .."?", cid) else selfSay("Sorry, but I am already caring one of your eggs.", cid) talkState[talkUser] = 1 end elseif msgcontains(msg, "back") then if getPlayerStorageValue(cid, config.control[2]) == 1 then selfSay("Hello, do you came to pick up your egg?", cid) talkState[talkUser] = 2 else selfSay("Sorry, but I am not caring eggs from you.", cid) end elseif msgcontains(msg, "check") then local t = getPlayerStorageValue(cid, config.control[1]) if getPlayerStorageValue(cid, config.control[2]) == -1 then selfSay("Sorry, but I am not caring eggs from you.", cid) else if t < os.time() then selfSay("Yay, your egg has started to hatch, take it.", cid) setPlayerStorageValue(cid, config.control[1], -1) setPlayerStorageValue(cid, config.control[2], -1) else selfSay("I will be caring your egg for more ".. (math.floor((t - os.time()) / 60) > 0 and "".. math.floor((t - os.time()) / 60) .." minutes and" or "") .." ".. (t - os.time()) % 60 .." seconds.", cid) end end elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 1) then if(doPlayerRemoveItem(cid, 12304, 1) == true) then if doPlayerRemoveMoney(cid, config.price) then setPlayerStorageValue(cid, config.control[1], os.time()+config.delay) selfSay("Okay! Check back soon.", cid) else selfSay("Sorry, you don't have enough money. You need more ".. (config.price - getPlayerMoney(cid)) .." coins.", cid) end else selfSay("I am already taking care of a egg for you.", cid) end elseif msgcontains(msg, "no") then selfSay("Too pricey for you, heh?", cid) elseif talkState[talkUser] == 2 then local x = getPlayerStorageValue(cid, config.control) local t = getPlayerStorageValue(cid, config.control[1]) if msgcontains(msg, "yes") then if x > os.time() then doPlayerAddItem(cid, 4850, 1) doItemSetAttribute(item, "description", "A hatched egg.") selfSay("Take it!", cid) setPlayerStorageValue(cid, control[2], -1) setPlayerStorageValue(cid, control[1], -1) else selfSay("Sorry, but your egg need care for more ".. (math.floor((t - os.time()) / 60) > 0 and "".. math.floor((t - os.time()) / 60) .." minutes and" or "") .." ".. (t - os.time()) % 60 .." seconds.", cid) end end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
  11. O console está acusando a falta de um end para fechar a função onCreatureSayCallback. Verifique o script você mesmo, já que pedaços de script não irão me ajudar a consertar o erro.
  12. Oneshot

    Items.xml/otb

    Se não me engano você pode criar quantos quiser, lembro de um projeto que participei que foram criados ícones para um paínel de magias e os IDs chegaram a 13000 e tantos.
  13. Nada contra, mas, meio que uma imagem vale mais que mil palavras: Funciona e você está fazendo algo errado. Abração, cara \o
  14. Há só um modo viável de fazer isso, Um creaturescript executado no primeiro login do jogador ao servidor que verifica sua vocação e adiciona skills e maglevel configurados. local config = { [1] = { skills = { [0] = 10, [1] = 10, [2] = 10, [3] = 10, [4] = 10, [5] = 10, [6] = 10 }, maglevel = 0 }, [2] = { skills = { [0] = 10, [1] = 10, [2] = 10, [3] = 10, [4] = 10, [5] = 10, [6] = 10 }, maglevel = 0 }, [3] = { skills = { [0] = 10, [1] = 10, [2] = 10, [3] = 10, [4] = 10, [5] = 10, [6] = 10 }, maglevel = 0 }, [4] = { skills = { [0] = 10, [1] = 10, [2] = 10, [3] = 10, [4] = 10, [5] = 10, [6] = 10 }, maglevel = 0 } } function onLogin(cid) if getCreatureStorage(cid, 909090) ~= -1 then return true end if not config[getPlayerVocation(cid)] then return true end for skill, value in pairs(config[getPlayerVocation(cid)].skills) do doPlayerAddSkill(cid, skill, (value - getPlayerSkillLevel(cid, skill)), true) end doPlayerAddMagLevel(cid, (config[getPlayerVocation(cid)].maglevel - getPlayerMagLevel(cid, true))) doCreatureSetStorage(cid, 909090, 1) return true end Só configurar SKILL_FIRST = 0 SKILL_FIST = SKILL_FIRST SKILL_CLUB = 1 SKILL_SWORD = 2 SKILL_AXE = 3 SKILL_DISTANCE = 4 SKILL_SHIELD = 5 SKILL_FISHING = 6 Abraços.
  15. Oneshot

    Deletar Player

    Quando você diz SQL, você se refere ao SQLite, não é? Terminado na extensão .s3db? Se sim, basta abrir o seu editor SQLite, aquele com o ícone de uma pena azul serve e executar a seguinte query: DELETE FROM players WHERE lastlogin < strftime("%s", "now") - 20*24*60*60 Isso vai deletar personagens inativos por 20 dias. Se quiser adicionar também uma verificação de level: DELETE FROM players WHERE lastlogin < strftime("%s", "now") - 14*24*60*60 AND level < 30 Deletará personagens inativos por duas semanas e abaixo do level 30.
  16. function onStatsChange(cid, attacker, type, combat, value) local status = getCreatureStorage(cid, 999999) if(type == STATSCHANGE_HEALTHLOSS) then if(status < os.time()) then return true end return false end return true end Este é um simples rascunho de um creaturescript que anula qualquer dano no jogador se o valor de um certo storage ser maior que o os.time(). Ou seja em uma magia qualquer, você poderia fazer isso: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) function onCastSpell(cid, var) local status = getCreatureStorage(cid, 999999) if status > os.time() then return doPlayerSendCancel(cid, "O efeito da magia está ativo.") end doCreatureSetStorage(cid, 999999, os.time() + 15) doCombat(cid, combat, var) return true end A magia vai "setar" o storage 15 segundos maior que o os.time(), executado em conjunto com o creaturescript, durante 15 segundos o jogador irá anular qualquer dano. Abraços.
  17. Oneshot

    Vip System

    Existem vários sistemas VIP no fórum e absolutamente nenhum é do seu agrado? Então está na hora de aprender Lua e começar a programar as coisas que te agradam, não acha? Há varios sistemas VIP que cumprem com suas "exigências": Vip System By Account 1.0 Perfect Vip System 2.0 Esses dois possuem o sistema de tile apenas para VIPs e o comando de adicionar vip apenas para ADMs você mesmo pode fazer mudando o campo access na hora de configurar a talkaction. Abraços.
  18. Tem certeza? Colocou o uniqueid 13586 no piso?
  19. Estranho, dá algum erro no script? Você está usando o item de ID 8310 como você pediu?
  20. Copia denovo, e veja se foi consertado.
  21. local config = { affected = 10, -- how many players (deathAssits) from table deathList should this script be executed for? killStorageValue = 3943, deathStorageValue = 3944, -- commands for the texts (those inside of ||, example: |KILLS| to show skills): KILLS, KILLERNAME, TARGETNAME killMessage = { use = true, text = "You owned |TARGETNAME|!", messageClass = MESSAGE_STATUS_CONSOLE_RED }, broadcastMessage = { use = true, minLevel = false, -- false if you don't want any level req minLevelDiff = false, -- false if you don't want any level diff req (negative numbers allowed). text = "|KILLERNAME| [|KILLERLEVEL|] matou |TARGETNAME| [|TARGETLEVEL|]", messageClass = MESSAGE_STATUS_CONSOLE_BLUE }, killerAnimation = { use = true, text = "Frag!", -- Only 9 letters! No "commands" here. color = 144 }, targetAnimation = { use = true, text = "Owned!", -- Only 9 letters! No "commands" here. color = 180 } } function onDeath(cid, corpse, deathList) for i = 1, math.min(config.affected, getConfigInfo('deathAssistCount')) do local killer = deathList[i] if(isPlayer(killer) == TRUE) then local targetKills = math.max(0, getPlayerStorageValue(cid, config.killStorageValue)) + 1 local targetDeaths = math.max(0, getPlayerStorageValue(cid, config.deathStorageValue)) + 1 local killerKills = math.max(0, getPlayerStorageValue(killer, config.killStorageValue)) + 1 local killerDeaths = math.max(0, getPlayerStorageValue(killer, config.deathStorageValue)) + 1 setPlayerStorageValue(killer, config.killStorageValue, targetKills) setPlayerStorageValue(cid, config.deathStorageValue, targetDeaths) local killerLevel = getPlayerLevel(killer) local targetLevel = getPlayerLevel(cid) local levelDiff = targetLevel - killerLevel local values = { ["KILLERKILLS"] = killerKills, ["KILLERDEATHS"] = killerDeaths, ["KILLERNAME"] = getCreatureName(killer), ["KILLERLEVEL"] = killerLevel, ["TARGETKILLS"] = targetKills, ["TARGETDEATHS"] = targetDeaths, ["TARGETNAME"] = getCreatureName(cid), ["TARGETLEVEL"] = targetLevel } function formateString(str) return(str:gsub("|([A-Z]+)|", (function(a) return values[a] end))) end doPlayerAddMoney(killer, 500000) if(config.killMessage.use) then doPlayerSendTextMessage(killer, config.killMessage.messageClass, formateString(config.killMessage.text)) end if(config.broadcastMessage.use and (not config.broadcastMessage.minLevel or getPlayerLevel(cid) >= config.broadcastMessage.minLevel) and (not config.broadcastMessage.minLevelDiff or levelDiff >= config.broadcastMessage.minLevelDiff)) then broadcastMessage(formateString(config.broadcastMessage.text), config.broadcastMessage.messageClass) end if(config.killerAnimation.use) then doSendAnimatedText(getCreaturePosition(killer), config.killerAnimation.text, config.killerAnimation.color) end if(config.targetAnimation.use) then doSendAnimatedText(getCreaturePosition(cid), config.targetAnimation.text, config.targetAnimation.color) end end end return true end
  22. Que pena, amigo, estranho que tenho testado os scripts que posto nos tópicos da seção e todos funcionam. Bom, espero que alguém mais capacitado, possa te ajudar. Abraços.
  23. Sim, claro. local rewards = {{2160, 10}, {2157, 3}, 2470} local experience = 10000 function onUse(cid, item, fromPosition, itemEx, toPosition) local tmp, reward = rewards[math.random(1, #rewards)] reward = doCreateItemEx((type(tmp) == "number" and tmp or tmp[1]), (type(tmp) == "number" and 1 or tmp[2])) doPlayerAddItemEx(cid, reward) doPlayerAddExperience(cid, experience) doRemoveItem(item.uid, 1) doCreatureSay(cid, "Ganhei ".. ((type(tmp) == "number" and 1 or tmp[2])) .." ".. getItemNameById((type(tmp) == "number" and tmp or tmp[1])) .."!", TALKTYPE_ORANGE_1) return true end Sinta-se livre também para usar seu próprio script consertado: function onUse(cid, item) local random = math.random(1, 3) local position = {x=100, y=40, z=7} -- Pos local items = { [1] = {id=2160,quant=10,word="ganhei 100k "}, [2] = {id=2379,quant=1,word="ganhei uma dagier nb"}, [3] = {id=2392,quant=1,word="espada fogaréu créu"} } doPlayerAddItem(cid, items[random].id, items[random].quant) doPlayerAddExp(cid, 15000)-- Exp qe ira ganhar doTeleportThing(cid, position) doCreatureSay(cid, items[random].word, TALKTYPE_ORANGE_1) doRemoveItem(item.uid, 1) end
  24. Oneshot

    Vocation

    Tem certeza que você colocou as vocations novas no weapons.xml? É ele que controla o funcionamento das wands.
  25. Tente desse jeito: local rewards = {{2160, 10}, {2157, 3}, 2470} local experience = 10000 function onUse(cid, item, fromPosition, itemEx, toPosition) local tmp, reward = rewards[math.random(1, #rewards)] reward = doCreateItemEx((type(tmp) == "number" and tmp or tmp[1]), (type(tmp) == "number" and 1 or tmp[2])) doPlayerAddItemEx(cid, reward) doPlayerAddExperience(cid, experience) doRemoveItem(item.uid, 1) return true end Aí você configura os itens e a quantidade que você quer nessa linha: local rewards = {{2160, 10}, {2157, 3}, 2470} Por exemplo, aí dá aleatoriamente 10 crystal coin, 3 gold nuggets ou 1 golden legs. Só seguir o modelo.
  • Quem Está Navegando   0 membros estão online

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