Postado Agosto 22, 2022 2 anos tenho um script de exp potion, que da +50% de exp pra todos os players do rank 2 abaixo, e 25% pro top level script completo da exp potion: Spoiler function onUse(cid, item, frompos, item2, topos) local pausa = 10*60*1000 -- (1000 = 1 segundos) Tempo que o script durará local texto = "Você adicionou +50% da sua Experiencia \n \n Joadores TopLevel tem -50% do efeito total da expfood" -- Texto que irá receber ao usar a potion. local textofinal = "Acabou o potion de Experiencia." -- Texto que irá receber quando o efeito da potion acabar. local exp = getPlayerRates(cid)[SKILL__LEVEL] + 0.5 -- O quanto que você quer que dobre sua experiencia, por exemplo 2 é 2x as rates do seu server. local exp2 = getPlayerRates(cid)[SKILL__LEVEL] + 0.25 -- O quanto que você quer que dobre sua experiencia, por exemplo 2 é 2x as rates do seu server. local expfinal = 1 --Não mude, isso é para a experiencia voltar ao normal. local limitedeuso = 49015 local tempo = 10*60*1000 -- 1000 = 1s então 1000 vezes 60 vezes 30 = 30 minutos local textofinal1 = "Você já esta sob efeito da potion, se nao estiver, teste relogar!" local seuitem = 6541 -- seu item que dará double exp local efeito1 = 19 -- efeito que ficara com o char por meia hora local efeito2 = 14 -- efeito que acontecera no momento que usar a pot --fim da parte configuravel não mecha se nao tiver conhecimento de scripting local timeEffect = 61 -- tempo em segundos que o efeito vai apareceer no player, 31 = 30 segundos. sempre coloque 1 segundo a mais. local function effect(cid, seconds) if not isCreature(cid) then return LUA_ERROR end local t, pos = convertTime(0, seconds), getCreaturePosition(cid) doSendMagicEffect(pos, 19) doSendAnimatedText(pos, t.minutes > 0 and t.minutes..":"..t.seconds or t.seconds, math.random(150,150)) if seconds ~= 1 then addEvent(effect, 1000, cid,seconds-1) end end function getNameTopServer() local query, name = db.getResult("SELECT `name`, `level` FROM `players` WHERE `group_id` < 2 ORDER BY `level` DESC LIMIT 1"), "" if (query:getID() ~= -1) then name = query:getDataString("name") end return name end local function potion(cid) doPlayerSetExperienceRate(cid,expfinal) end if getPlayerLevel(cid) <= 129999 then doCreatureSay(cid, "[ERROR] Apenas players com lv. 120k mais, podem usar este item.", TALKTYPE_ORANGE_1) doSendMagicEffect(getThingPos(cid), CONST_ME_POFF) return true end if getTileInfo(getThingPos(cid)).optional or getTileInfo(getThingPos(cid)).protection then doSendMagicEffect(getPlayerPosition(cid), 2) return doCreatureSay(cid, "[Error] Voce nao pode usar exp foods em area Protection Zone", TALKTYPE_ORANGE_1) end if item.itemid == seuitem and (getPlayerStorageValue(cid, limitedeuso) - os.time() > 0) then doSendMagicEffect(getPlayerPosition(cid), 2) return doCreatureSay(cid, "[Error] Voce ja esta sob efeito da potion, se nao estiver tente relogar!", TALKTYPE_ORANGE_1) end if getNameTopServer() == getPlayerName(cid) and item.itemid == seuitem then doRemoveItem(item.uid,1) doPlayerSetExperienceRate(cid,exp2) doSendMagicEffect(frompos,efeito2) setPlayerStorageValue(cid, limitedeuso, os.time() + 420) doPlayerSendTextMessage(cid,22,texto) return true end if item.itemid == seuitem and getPlayerStorageValue(cid, 2311) <= 0 then doRemoveItem(item.uid,1) doPlayerSetExperienceRate(cid,exp) doSendMagicEffect(frompos,efeito2) setPlayerStorageValue(cid, limitedeuso, os.time() + 420) doPlayerSendTextMessage(cid,22,texto) elseif item.itemid == seuitem and getPlayerStorageValue(cid, 2311) == 1 then doRemoveItem(item.uid,1) doPlayerSetExperienceRate(cid,exp) doSendMagicEffect(frompos,efeito2) setPlayerStorageValue(cid, limitedeuso, os.time() + 480) doPlayerSendTextMessage(cid,22,texto) elseif item.itemid == seuitem and getPlayerStorageValue(cid, 2311) == 2 then doRemoveItem(item.uid,1) doPlayerSetExperienceRate(cid,exp) doSendMagicEffect(frompos,efeito2) setPlayerStorageValue(cid, limitedeuso, os.time() + 540) doPlayerSendTextMessage(cid,22,texto) elseif item.itemid == seuitem and getPlayerStorageValue(cid, 2311) == 3 then doRemoveItem(item.uid,1) doPlayerSetExperienceRate(cid,exp) doSendMagicEffect(frompos,efeito2) setPlayerStorageValue(cid, limitedeuso, os.time() + 600) doPlayerSendTextMessage(cid,22,texto) elseif item.itemid == seuitem and getPlayerStorageValue(cid, 2311) == 4 then doRemoveItem(item.uid,1) doPlayerSetExperienceRate(cid,exp) doSendMagicEffect(frompos,efeito2) setPlayerStorageValue(cid, limitedeuso, os.time() + 660) doPlayerSendTextMessage(cid,22,texto) elseif item.itemid == seuitem and getPlayerStorageValue(cid, 2311) >= 5 then doRemoveItem(item.uid,1) doPlayerSetExperienceRate(cid,exp) doSendMagicEffect(frompos,efeito2) setPlayerStorageValue(cid, limitedeuso, os.time() + 720) doPlayerSendTextMessage(cid,22,texto) end return true end ("SELECT `name`, `level` FROM `players` WHERE `group_id` < 2 ORDER BY `level` DESC LIMIT 1") a partir dessa linha, alguem sabe me dizer, como eu seleciono um player especifico, tipo TOP 2? ... TOP 3... do rank? essa function, puxa o player top level Spoiler function getNameTopServer() local query, name = db.getResult("SELECT `name`, `level` FROM `players` WHERE `group_id` < 2 ORDER BY `level` DESC LIMIT 1"), "" if (query:getID() ~= -1) then name = query:getDataString("name") end return name end Editado Agosto 22, 2022 2 anos por poko360 (veja o histórico de edições)
Postado Agosto 25, 2022 2 anos Em 22/08/2022 em 15:52, poko360 disse: a partir dessa linha, alguem sabe me dizer, como eu seleciono um player especifico, tipo TOP 2? ... TOP 3... do rank? transforma em table function getNameTopServer() -- eu alteraria pra getNameTopCinco local query, name = db.getResult("SELECT `name`, `level` FROM `players` WHERE `group_id` < 2 ORDER BY `level` DESC LIMIT 5"), {} if (query:getID() ~= -1) then for i=1, 5 do name[i] = query:getDataString("name") end end return name end ai faz um script pra ler os names de 1 a 5 tipo local name = getNameTopServer() local exp = {0.5, 0.25, 0.20, 0.15, 0.10} for j=1, 5 do if name[j] == getPlayerName(cid) and item.itemid == seuitem then doRemoveItem(item.uid,1) doPlayerSetExperienceRate(cid, exp[j]) doSendMagicEffect(frompos,efeito2) setPlayerStorageValue(cid, limitedeuso, os.time() + 420) doPlayerSendTextMessage(cid,22,texto) return true end end
Postado Agosto 25, 2022 2 anos Autor eu botei assim: Spoiler function onUse(cid, item, frompos, item2, topos) local pausa = 10*60*1000 -- (1000 = 1 segundos) Tempo que o script durará local texto = "Você adicionou +100% da sua Experiencia \n \n Joadores TopLevel tem -50% do efeito total da expfood " -- Texto que irá receber ao usar a potion. local textofinal = "Acabou o potion de Experiencia." -- Texto que irá receber quando o efeito da potion acabar. local expfinal = 1 --Não mude, isso é para a experiencia voltar ao normal. local limitedeuso = 49015 local tempo = 10*60*1000 -- 1000 = 1s então 1000 vezes 60 vezes 30 = 30 minutos local textofinal1 = "Você já esta sob efeito da potion, se nao estiver, teste relogar!" local seuitem = 2695 -- seu item que dará double exp local efeito1 = 19 -- efeito que ficara com o char por meia hora local efeito2 = 14 -- efeito que acontecera no momento que usar a pot --fim da parte configuravel não mecha se nao tiver conhecimento de scripting local timeEffect = 61 -- tempo em segundos que o efeito vai apareceer no player, 31 = 30 segundos. sempre coloque 1 segundo a mais. local function effect(cid, seconds) if not isCreature(cid) then return LUA_ERROR end local t, pos = convertTime(0, seconds), getCreaturePosition(cid) doSendMagicEffect(pos, 19) doSendAnimatedText(pos, t.minutes > 0 and t.minutes..":"..t.seconds or t.seconds, math.random(150,150)) if seconds ~= 1 then addEvent(effect, 1000, cid,seconds-1) end end function getNameTopServer() -- eu alteraria pra getNameTopCinco local query, name = db.getResult("SELECT `name`, `level` FROM `players` WHERE `group_id` < 2 ORDER BY `level` DESC LIMIT 5"), {} if (query:getID() ~= -1) then for i=1, 5 do name[i] = query:getDataString("name") end end return name end local function potion(cid) doPlayerSetExperienceRate(cid,expfinal) end if getPlayerLevel(cid) <= 219999 then doCreatureSay(cid, "[ERROR] Apenas players com lv. 220k mais, podem usar este item.", TALKTYPE_ORANGE_1) doSendMagicEffect(getThingPos(cid), CONST_ME_POFF) return true end if getTileInfo(getThingPos(cid)).optional or getTileInfo(getThingPos(cid)).protection then doSendMagicEffect(getPlayerPosition(cid), 2) return doCreatureSay(cid, "[Error] Voce nao pode usar exp foods em area Protection Zone", TALKTYPE_ORANGE_1) end if item.itemid == seuitem and (getPlayerStorageValue(cid, limitedeuso) - os.time() > 0) then doSendMagicEffect(getPlayerPosition(cid), 2) return doCreatureSay(cid, "[Error] Voce ja esta sob efeito da potion, se nao estiver tente relogar!", TALKTYPE_ORANGE_1) end local name = getNameTopServer() local exp = {5, 4, 3, 2, 1} for j=1, 5 do if name[j] == getPlayerName(cid) and item.itemid == seuitem then doRemoveItem(item.uid,1) doPlayerSetExperienceRate(cid, exp[j]) doSendMagicEffect(frompos,efeito2) setPlayerStorageValue(cid, limitedeuso, os.time() + 600) doPlayerSendTextMessage(cid,22,texto) return true end end return true end funcionou apenas pro TOP Level, quando fui botar o char no top 2,3... nao funfou Editado Agosto 25, 2022 2 anos por poko360 (veja o histórico de edições)
Postado Agosto 25, 2022 2 anos Solução tenta trocar a função do top pra essa: function getNameTopServer() -- eu alteraria pra getNameTopCinco local i = 1 local query, name = db.getResult("SELECT `name`, `level` FROM `players` WHERE `group_id` < 2 ORDER BY `level` DESC LIMIT 5"), {} if (query:getID() ~= -1) then while(true) do name[i] = query:getDataString("name") i = i + 1 if not(query:next()) then break end end end return name end e troca a outra por essa, vou colocar pra printar, me manda o que aparece no console quando tenta usar local name = getNameTopServer() local exp = {5, 4, 3, 2, 1} local NaoEstaCinco = 0 local expOutros = 1 for j=1, 5 do if name[j] == getPlayerName(cid) and item.itemid == seuitem then doRemoveItem(item.uid,1) doPlayerSetExperienceRate(cid, exp[j]) doSendMagicEffect(frompos,efeito2) setPlayerStorageValue(cid, limitedeuso, os.time() + 420) doPlayerSendTextMessage(cid,22,texto) NaoEstaCinco = 1 break return true end end if NaoEstaCinco == 0 then if item.itemid == seuitem then doRemoveItem(item.uid,1) doPlayerSetExperienceRate(cid, expOutros) doSendMagicEffect(frompos,efeito2) setPlayerStorageValue(cid, limitedeuso, os.time() + 420) doPlayerSendTextMessage(cid,22,texto) end end
Postado Agosto 25, 2022 2 anos Autor man funcionou perfeitamente, se eu colocar, so que vi um "problema", ele nao é em tempo real, tem que esperar o server salvar (ou o rank atualizar) pra ele jogar a xp correta: ai te pergunto: se eu colocar um doPlayerSave(cid) no script ao executar a potion, da bom? (n da lag etc...?) ou tens uma ideia melhor?
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.