Ir para conteúdo

Yan Oliveira

Moderador
  • Total de itens

    2221
  • Registro em

  • Última visita

  • Dias Ganhos

    60

Tudo que Yan Oliveira postou

  1. Yan Oliveira

    script mount

    Como assim direcionado para as montarias, você fala abrir a janela com as outfits da montaria?
  2. Exatamente, é como o @nociam disse, você precisa informar o seu pedido, fora que ainda está na área errada se for postar os scripts, pois, como já é um script criado e precisa ser corrigido, a área certa seria em Suporte > Scripts https://www.xtibia.com/forum/forum/1253-scripts/. Agora, se quer procurar ou contratar alguém, também está na seção errada, a seção correta seria em Notícias e Debates e na área de Formação de Equipes https://www.xtibia.com/forum/forum/610-formação-de-equipes/
  3. Mas, assim que o player clicar no item e virar um monstro, e depois clicar no monstro para virar item, ele vai virar o item na posição que o monstro estiver? Ou quando o item virar monstro ele não vai andar? Está um pouco ambíguo seu pedido, porque, e se o player matar o monstro, como pretende trabalhar essa questão? Ou, se o monstro matar o player? Tem que ver melhor como você quer, porque esses tipo de interação é chatinho por essas questão das possibilidades que citei acima, fora que o player vai poder clicar quantas vezes quiser? Vai ser uma quest? Veja que tem muitas condições que tem que ser trabalhadas. Não é um script difícil de fazer, mas, eu acho que não vale a pena o monstro voltar a ser um item, não sei como pensou essa quest/interação, mas não acho que é algo viável.
  4. Vai em Data/Actions/Scripts e cria o arquivo quest_estatua.lua (ou um nome da quest que você definiu), em seguida adicione o script dentro: local id_statue = 5525 -- ID DA ESTÁTUA local id_vocation = 5 -- ID DA VOCATION local storage_quest = 48987 -- STORAGE DA QUEST PARA VER SE JÁ FOI FEITA local area_teleport = {x= 1000, y= 1000, z= 7} -- COORDENADA QUE SERÁ TELEPORTADO ------------------------------------ CÓDIGO ------------------------------------ function onUse(cid, item, fromPos, itemTarget, toPos) if item.itemid == id_statue then -- VERIFICA SE O ITEM QUE CLICA É A ESTÁTUA if getPlayerStorageValue(cid, storage_quest) < 1 then -- VERIFICA SE JÁ FEZ if getPlayerVocation(cid) ~= id_vocation then -- VERIFICA SE JÁ TEM A VOCATION doPlayerSetVocation(cid, id_vocation) -- ADICIONA VOCATION AO PLAYER doTeleportThing(cid, area_teleport) -- TELEPORTE doSendMagicEffect(cid, 18) -- EFEITO doPlayerSendTextMessage(cid, 19, "Now you are a " ..getPlayerVocationName(cid).. ".") -- MENSAGEM DO RECEBIMENTO DA VOCATION setPlayerStorageValue(cid, storage_quest, 1) -- SETA A STORAGE PARA NÃO FAZER NOVAMENTE A QUEST return true else doPlayerSendCancel(cid, "You already have this vocation.") doPlayerSendTextMessage(cid, 27, "You already are a " ..getPlayerVocationName(cid).. ".") return true end else doPlayerSendTextMessage(cid, 27, "You have already done this quest.") return true end end end Agora abre o actions.xml e adicione a tag: <action itemid="5525" event="script" value="quest_estatua.lua"/> * Lembre-se de colocar o id da estátua corretamente na tag itemid do xml e na variável id_statue do script.lua. Veja também se essa storage já não está sendo usada. Deixei todas as variáveis comentadas no script, só colocar os id correto e a coordenada do teleport correta. Testa e me fala se der algum problema.
  5. Qual a base do seu servidor? É Tibia ou Derivado?
  6. Qual base que é?
  7. Yan Oliveira

    Pokemon Inicial

    Qual a base que você está usando?
  8. Yan Oliveira

    Pokemon Inicial

    O arquivo firstitems.xml da pasta mods é para dar os itens do inventário, como bag, pokedex, order e etc. Já o arquivo do pokémon inicial não tem haver com firstitems, pois ele é itens para começar o jogo como potion, revive, pokemon e etc, além do teleport. Mas os itens do inventário dependendo a base já é definido no login.lua da pasta creaturescripts. No caso desse erro, está falando que seu servidor não tem a função getCatchMode(), provavelmente copiou de outra base o script e não pegou a função. Mas quando você cria a conta você recebe os itens do inventário? Se recebe, então não vai precisar do firstitems da pasta mods (na verdade nem recomendo ter script de itens iniciais do inventário por lá, é melhor pela pasta creaturescripts mesmo). Mas na minha opinião, não é bom pegar o pokémon falando com npc, no meu ponto de vista é a pior maneira para escolher o pokémon inicial (mas só minha opinião). Respondendo as perguntas que te fiz fica fácil de ajudar.
  9. Faz um teste, e mostra uma print do que aparecer no chat: local exhaustionMinutes = 1 -- exausted em minutos local storageUse = 32324 -- storage usado no exausted. function onSay(cid, words, param) if words =="!resetar" then if(exhaustion.check(cid, storageUse) == TRUE) then if (exhaustion.get(cid, storageUse) >= 10) then doPlayerSendCancel(cid, "Você só pode usar após [" .. math.floor(exhaustion.get(cid, storageUse) / 80 + 1) .."] Minutos.") end if (exhaustion.get(cid, storageUse) <= 10) then doPlayerSendCancel(cid, "Você só pode usar após [" .. exhaustion.get(cid, storageUse).."] segundos.") end return TRUE end exhaustion.set(cid, storageUse, exhaustionMinutes*10) --[ Condições de Reset ] -- local coNdConf = { needPz = true, -- Precisa estar em Pz pra resetar? [true, false] needPa = false, -- Precisa ser Premium Account Pra resetar? [true, false] withe = false, -- Players com Pk Withe podem resetar? [true, false] red = false, -- Players com Pk Red pode resetar? [true, false] battle = true, -- Players precisão estar sem battle pra resetar? [true, false] teleport = false, -- Teleportar Player para o templo após resetar? [true, false] look = true, -- Aparecer Resets no Look do Player? [true, false] pid = getPlayerGUID(cid), -- Não Mexer. --[ Configurações do Reset ] -- resetConf = { Level = 717217, -- Level Necessário para Resetar. [Valor] backLvl = 5000, -- Level que voltará após o Reset. [Valor] time = 0.0, -- Tempo para o Player deslogar ao resetar, em segundos. [Valor] }, } --[[>> STAGES <<]]-- x=true;X=true -- Não Mexer. local stage = {Abilitar = {x}, Desabilitar = {}, --<< Abilitar Stages?? >>-- [{x};{}] -- [RESETS] | [PREMMY] | [FREE] stage1= {resets= 4, premmy= 650000, free= 650000}, stage2= {resets= 9, premmy= 650000, free= 650000}, -- EXPLICANDO e Configurando stages. (Se estiver Abilitado [Abilitar = {x}]) stage3= {resets= 14, premmy= 650000, free= 650000}, -- resets = Número de resets para o Stage; stage4= {resets= 19, premmy= 650000, free= 650000}, -- premmy = Level necessário para Premium Accounts; stage5= {resets= 24, premmy= 650000, free= 650000}, -- free = Level necessário para Free Accounts; stage6= {resets= 29, premmy= 650000, free= 650000}, -- Coloque em Ordem... stage7= {resets= 35, premmy= 650000, free= 650000}, -- [OBS: MARQUE UM "X" PARA ABILITAR OU DESABILITAR OS STAGES] stage8= {resets= 39, premmy= 650000, free= 650000}, -- EX: para desabilitar mude: Abilitar = {}, Desabilitar = {x} stage9= {resets= 45, premmy= 650000, free= 650000}, stage10={resets= 46, premmy= 717217, free= 717217}, stage11={resets= 54, premmy= 717217, free= 717217}, stage12={resets= 59, premmy= 717217, free= 717217}, stage13={resets= 64, premmy= 717217, free= 717217}, stage14={resets= 69, premmy= 717217, free= 717217}, stage15={resets= 74, premmy= 717217, free= 717217}, stage16={resets= 79, premmy= 717217, free= 717217}, stage17={resets= 80, premmy= 717217, free= 717217}, stage18={resets= 82, premmy= 717217, free= 717217}, stage19={resets= 85, premmy= 717217, free= 717217}, stage20={resets= 87, premmy= 717217, free= 717217}, stage21={resets= 88, premmy= 717217, free= 717217}, stage22={resets= 89, premmy= 717217, free= 717217}, stage23={resets= 90, premmy= 717217, free= 717217}, stage24={resets= 95, premmy= 717217, free= 717217}, stage25={resets= 100, premmy= 717217, free= 717217}, } --[[>> FIM STAGES <<]]-- --=[Pega Valor de Resets]=-- function getPlayerReset(cid) local qr = db.getResult("SELECT `reset` FROM `players` WHERE `id`= "..coNdConf.pid..";") rss = qr:getDataInt("reset", coNdConf.pid) if rss < 0 then rss = 0 end return rss end -- FUNÇÃO PARA AUMENTAR O RATE DA EXP DE ACORDO COM A QUANTIDADE DE RESETS -- function setExpRate(cid, reset_min, reset_max, rate) if getPlayerReset(cid) > reset_min and getPlayerReset(cid) <= reset_max then doPlayerSendTextMessage(cid, 19, getPlayerReset(cid)) return doPlayerSetExperienceRate(cid, rate) end end local success = " ~~ Sucesso! ~~ \nVocê tem agora "..(getPlayerReset(cid)+1).." resets. \nVocê será deslogado em "..coNdConf.resetConf.time.." segundos." ;err = doPlayerSendTextMessage local qrt = db.getResult("SELECT `reset` FROM `players` WHERE `id`= "..coNdConf.pid..";");rss_db = qrt:getDataInt("reset", coNdConf.pid) local lvl_query = "UPDATE `players` SET `level` = "..(coNdConf.resetConf.backLvl)..", `experience` = 0 WHERE `id`= " .. coNdConf.pid .. ";" local reset_query = "UPDATE `players` SET `reset` = "..(getPlayerReset(cid)+(1)).." WHERE `id`= " .. coNdConf.pid .. ";" local nolook_query = "UPDATE `players` SET `description` = '' WHERE `players`.`id`= " .. coNdConf.pid .. ";" local look_query = "UPDATE `players` SET `description` = ' [Reset "..(getPlayerReset(cid)+(1)).."]' WHERE `players`.`id`= " .. coNdConf.pid .. ";" --=[Reseta]=-- function addValue(value) if coNdConf.look == false then doRemoveCreature(cid) db.executeQuery(lvl_query);db.executeQuery(reset_query);db.executeQuery(nolook_query) else doRemoveCreature(cid) db.executeQuery(lvl_query);db.executeQuery(reset_query);db.executeQuery(look_query) return LUA_NO_ERROR end end function nowReseting() if (getPlayerLevel(cid) < coNdConf.resetConf.Level) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "- Level Necessário Para o Reset ["..coNdConf.resetConf.Level.."]. Faltam "..coNdConf.resetConf.Level-getPlayerLevel(cid).." level's para você Resetar. -") return true end if getPlayerLevel(cid) >= coNdConf.resetConf.Level and (coNdConf.teleport == false) then doPlayerPopupFYI(cid, success) addEvent(addValue, coNdConf.resetConf.time*0, value) setPlayerStorageValue(cid, storage_contador, storage_contador + 1) else doPlayerPopupFYI(cid, success) addEvent(doTeleportThing, coNdConf.resetConf.time*0, cid, getTownTemplePosition(getPlayerTown(cid))) addEvent(addValue, coNdConf.resetConf.time*0, value) setPlayerStorageValue(cid, storage_contador, storage_contador + 1) return true end end --[sTAGES Nao mexer em nada.]-- function checkLevelStageReset(cid) local stages = { {resets= stage.stage1.resets, premmy= stage.stage1.premmy, free= stage.stage1.free}, {resets= stage.stage2.resets, premmy= stage.stage2.premmy, free= stage.stage2.free}, {resets= stage.stage3.resets, premmy= stage.stage3.premmy, free= stage.stage3.free}, {resets= stage.stage4.resets, premmy= stage.stage4.premmy, free= stage.stage4.free}, {resets= stage.stage5.resets, premmy= stage.stage5.premmy, free= stage.stage5.free}, {resets= stage.stage6.resets, premmy= stage.stage6.premmy, free= stage.stage6.free}, {resets= stage.stage7.resets, premmy= stage.stage7.premmy, free= stage.stage7.free}, {resets= stage.stage8.resets, premmy= stage.stage8.premmy, free= stage.stage8.free}, {resets= stage.stage9.resets, premmy= stage.stage9.premmy, free= stage.stage9.free}, {resets=stage.stage10.resets, premmy=stage.stage10.premmy, free=stage.stage10.free}, {resets=stage.stage11.resets, premmy=stage.stage11.premmy, free=stage.stage11.free}, {resets=stage.stage12.resets, premmy=stage.stage12.premmy, free=stage.stage12.free}, {resets=stage.stage13.resets, premmy=stage.stage13.premmy, free=stage.stage13.free}, {resets=stage.stage14.resets, premmy=stage.stage14.premmy, free=stage.stage14.free}, {resets=stage.stage15.resets, premmy=stage.stage15.premmy, free=stage.stage15.free}, {resets=stage.stage16.resets, premmy=stage.stage16.premmy, free=stage.stage16.free}, {resets=stage.stage17.resets, premmy=stage.stage17.premmy, free=stage.stage17.free}, {resets=stage.stage18.resets, premmy=stage.stage18.premmy, free=stage.stage18.free}, {resets=stage.stage19.resets, premmy=stage.stage19.premmy, free=stage.stage19.free}, {resets=stage.stage20.resets, premmy=stage.stage20.premmy, free=stage.stage20.free}, {resets=stage.stage21.resets, premmy=stage.stage21.premmy, free=stage.stage21.free}, {resets=stage.stage22.resets, premmy=stage.stage22.premmy, free=stage.stage22.free}, {resets=stage.stage23.resets, premmy=stage.stage23.premmy, free=stage.stage23.free}, {resets=stage.stage24.resets, premmy=stage.stage24.premmy, free=stage.stage24.free}, {resets=stage.stage25.resets, premmy=stage.stage25.premmy, free=stage.stage25.free}, } local resets = getPlayerReset(cid) for i, tab in ipairs(stages) do if resets <= tab.resets then coNdConf.resetConf.Level = isPremium(cid) and tab.premmy or tab.free break end end if (getPlayerLevel(cid) < coNdConf.resetConf.Level) then err(cid, MESSAGE_STATUS_CONSOLE_BLUE, "- Você precisa ter ["..coNdConf.resetConf.Level.."]. leveis , Faltam "..coNdConf.resetConf.Level-getPlayerLevel(cid).." levels para você Resetar seu personagem.") return TRUE end if getPlayerLevel(cid) >= coNdConf.resetConf.Level and (coNdConf.teleport == false) then doPlayerPopupFYI(cid, success) addEvent(addValue, coNdConf.resetConf.time*0, value) setExpRate(cid, 0, 5, 1.5) -- RATE DO RESET 1 A 5 RESETS (A VERIFICAÇÃO ESTÁ MAIOR DO QUE O RESET MÍNIMO, POR ISSO COMEÇA COM 0) setExpRate(cid, 5, 10, 2) -- RATE DO RESET 6 A 10 setExpRate(cid, 10, 20, 5) -- RATE DO RESET 11 A 20 setExpRate(cid, 20, 50, 10) -- RATE DO RESET 21 A 50 setExpRate(cid, 50, 100, 20) -- RATE DO RESET 51 A 100 else doPlayerPopupFYI(cid, success) addEvent(addValue, coNdConf.resetConf.time*0, value) addEvent(doTeleportThing, coNdConf.resetConf.time*0, cid, getTownTemplePosition(getPlayerTown(cid))) setExpRate(cid, 0, 5, 1.5) -- RATE COM 1 RESET 1 A 5 RESETS (A VERIFICAÇÃO ESTÁ MAIOR DO QUE O RESET MÍNIMO, POR ISSO COMEÇA COM 0) setExpRate(cid, 5, 10, 2) -- RATE DO RESET 6 A 10 setExpRate(cid, 10, 20, 5) -- RATE DO RESET 11 A 20 setExpRate(cid, 20, 50, 10) -- RATE DO RESET 21 A 50 setExpRate(cid, 50, 100, 20) -- RATE DO RESET 51 A 100 return true end end function newReset(cid) if(coNdConf.needPz == true) and (getTilePzInfo(getCreaturePosition(cid)) == LUA_ERROR) then err(cid,MESSAGE_STATUS_CONSOLE_BLUE,"- Você Precisa estar em Protection Zone Para Resetar. -") return TRUE end if(coNdConf.needPa == true) and not isPremium(cid) then err(cid,MESSAGE_STATUS_CONSOLE_BLUE,"- Você Precisa ser Premium Account para Resetar. -") return TRUE end if(coNdConf.withe == false) and (getCreatureSkullType(cid) == 3) then err(cid,MESSAGE_STATUS_CONSOLE_BLUE,"- Você não pode resetar em condições de PK Withe. -") return TRUE end if(coNdConf.red == false) and (getCreatureSkullType(cid) == 4) then err(cid,MESSAGE_STATUS_CONSOLE_BLUE,"- Você não pode resetar em condições de PK Red. -") return TRUE end if(coNdConf.battle == true) and (getCreatureCondition(cid, CONDITION_INFIGHT) == TRUE) then err(cid,MESSAGE_STATUS_CONSOLE_BLUE,"- Você Precisa estar sem Battle para Resetar. -") return TRUE end local xy = {true,false} table.insert(stage.Abilitar, false) table.insert(stage.Desabilitar, false) if stage.Abilitar[1] == xy[1] and stage.Desabilitar[1] == xy[2] then checkLevelStageReset(cid) elseif stage.Abilitar[1] == xy[2] and stage.Desabilitar[1] == xy[1] then nowReseting() else doPlayerPopupFYI(cid, "LUA_ERROR; Configure corretamente o Sistema de STAGES!") end return true end function tableResetInstall() print(not rss_db and LUA_ERROR or "Tabela de Resets: Instalada ... [success] ") addEvent(newReset, 0, cid) return false end if tableResetInstall() then end end end
  10. Realmente não estava mudando, vi aqui e esse arquivo pokeexp.lua nem é usado. Vai em Data/Creaturescripts/Scripts/Player e abre o arquivo pokeDeath.lua, procure essa linha: playerAddExp(player, math.ceil(percent * xp / 100) * heldExp) E troque por : playerAddExp(player, math.ceil(percent * xp / 100) * heldExp * 5) Agora está dando 5x a exp.
  11. Beleza, qualquer coisa só falar ai.
  12. É uma opção, adicionar outro nome junto com espaço.
  13. Você não falou que queria a exp x5, só disse que estava com mesmo erro, e no caso deu a entender que queria exp que define no xml do pokémon. Substitua o script por esse: local function playerAddExp(cid, exp) doPlayerAddExp(cid, exp) doSendAnimatedText(getThingPos(cid), exp, 215) end function onDeath(cid, corpse, deathList) --if not isCreature(cid) then return true end if isSummon(cid) or not deathList or getCreatureName(cid) == "Evolution" then return true end --alterado v1.8 local givenexp = getWildPokemonExp(cid) ---local killer = getItemAttribute(corpse.uid, "corpseowner") if givenexp > 0 then for a = 1, #deathList do local pk = deathList[a] --- local list = getSpectators(getThingPosWithDebug(pk), 30, 30, false) if isCreature(pk) then local expTotal = math.floor(givenexp * getDamageMapPercent(pk, cid)) local party = getPartyMembers(pk) if isInParty(pk) and getPlayerStorageValue(pk, 4875498) <= -1 then expTotal = math.floor(expTotal/#party) --alterado v1.6.1 for i = 1, #party do if isInArray(list, party[i]) then if getPlayerLevel(pk) <= 50 then playerAddExp(party[i], expTotal * 5) elseif getPlayerLevel(pk) >= 51 and getPlayerLevel(pk) <= 75 then playerAddExp(party[i], expTotal * 5) elseif getPlayerLevel(pk) >= 76 and getPlayerLevel(pk) <= 100 then playerAddExp(party[i], expTotal * 5) elseif getPlayerLevel(pk) >= 101 and getPlayerLevel(pk) <= 150 then playerAddExp(party[i], expTotal * 5) elseif getPlayerLevel(pk) >= 151 and getPlayerLevel(pk) <= 250 then playerAddExp(party[i], expTotal * 5) elseif getPlayerLevel(pk) >= 251 and getPlayerLevel(pk) <= 350 then playerAddExp(party[i], expTotal * 5) elseif getPlayerLevel(pk) >= 351 then playerAddExp(party[i], expTotal * 50) end end end elseif not isInParty(pk) then if getPlayerLevel(pk) <= 50 then playerAddExp(pk, math.floor(5 * (givenexp * getDamageMapPercent(pk, cid)))) elseif getPlayerLevel(pk) >= 51 and getPlayerLevel(pk) <= 75 then playerAddExp(pk, math.floor(5 * (givenexp * getDamageMapPercent(pk, cid)))) elseif getPlayerLevel(pk) >= 76 and getPlayerLevel(pk) <= 100 then playerAddExp(pk, math.floor(5 * (givenexp * getDamageMapPercent(pk, cid)))) elseif getPlayerLevel(pk) >= 101 and getPlayerLevel(pk) <= 150 then playerAddExp(pk, math.floor(5 * (givenexp * getDamageMapPercent(pk, cid)))) elseif getPlayerLevel(pk) >= 151 and getPlayerLevel(pk) <= 250 then playerAddExp(pk, math.floor(5 * (givenexp * getDamageMapPercent(pk, cid)))) elseif getPlayerLevel(pk) >= 251 and getPlayerLevel(pk) <= 350 then playerAddExp(pk, math.floor(5 * (givenexp * getDamageMapPercent(pk, cid)))) elseif getPlayerLevel(pk) >= 351 then playerAddExp(pk, math.floor(5 * (givenexp * getDamageMapPercent(pk, cid)))) return true end end end end end if isNpcSummon(cid) then local master = getCreatureMaster(cid) doSendMagicEffect(getThingPos(cid), getPlayerStorageValue(cid, 10000)) doCreatureSay(master, getPlayerStorageValue(cid, 10001), 1) doRemoveCreature(cid) return false end if corpse.itemid ~= 0 then --alterado v1.8 doItemSetAttribute(corpse.uid, "level", getPokemonLevel(cid)) doItemSetAttribute(corpse.uid, "gender", getPokemonGender(cid)) end return true end Testa e vê se é assim que quer, deixei para multiplicar a exp do pokémon que está no xml por 5, exemplo, a exp do Charizard está definido no xml como 1500, então a exp vai ser 1500 * 5 = 7500.
  14. local function playerAddExp(cid, exp) doPlayerAddExp(cid, exp) doSendAnimatedText(getThingPos(cid), exp, 215) end function onDeath(cid, corpse, deathList) --if not isCreature(cid) then return true end if isSummon(cid) or not deathList or getCreatureName(cid) == "Evolution" then return true end --alterado v1.8 local givenexp = getWildPokemonExp(cid) ---local killer = getItemAttribute(corpse.uid, "corpseowner") if givenexp > 0 then for a = 1, #deathList do local pk = deathList[a] --- local list = getSpectators(getThingPosWithDebug(pk), 30, 30, false) if isCreature(pk) then local expTotal = math.floor(givenexp * getDamageMapPercent(pk, cid)) local party = getPartyMembers(pk) if isInParty(pk) and getPlayerStorageValue(pk, 4875498) <= -1 then expTotal = math.floor(expTotal/#party) --alterado v1.6.1 for i = 1, #party do if isInArray(list, party[i]) then if getPlayerLevel(pk) <= 50 then playerAddExp(party[i], expTotal) elseif getPlayerLevel(pk) >= 51 and getPlayerLevel(pk) <= 75 then playerAddExp(party[i], expTotal) elseif getPlayerLevel(pk) >= 76 and getPlayerLevel(pk) <= 100 then playerAddExp(party[i], expTotal) elseif getPlayerLevel(pk) >= 101 and getPlayerLevel(pk) <= 150 then playerAddExp(party[i], expTotal) elseif getPlayerLevel(pk) >= 151 and getPlayerLevel(pk) <= 250 then playerAddExp(party[i], expTotal) elseif getPlayerLevel(pk) >= 251 and getPlayerLevel(pk) <= 350 then playerAddExp(party[i], expTotal) elseif getPlayerLevel(pk) >= 351 then playerAddExp(party[i], expTotal) end end end elseif not isInParty(pk) then if getPlayerLevel(pk) <= 50 then playerAddExp(pk, math.floor(givenexp * getDamageMapPercent(pk, cid))) elseif getPlayerLevel(pk) >= 51 and getPlayerLevel(pk) <= 75 then playerAddExp(pk, math.floor(givenexp * getDamageMapPercent(pk, cid))) elseif getPlayerLevel(pk) >= 76 and getPlayerLevel(pk) <= 100 then playerAddExp(pk, math.floor(givenexp * getDamageMapPercent(pk, cid))) elseif getPlayerLevel(pk) >= 101 and getPlayerLevel(pk) <= 150 then playerAddExp(pk, math.floor(givenexp * getDamageMapPercent(pk, cid))) elseif getPlayerLevel(pk) >= 151 and getPlayerLevel(pk) <= 250 then playerAddExp(pk, math.floor(givenexp * getDamageMapPercent(pk, cid))) elseif getPlayerLevel(pk) >= 251 and getPlayerLevel(pk) <= 350 then playerAddExp(pk, math.floor(givenexp * getDamageMapPercent(pk, cid))) elseif getPlayerLevel(pk) >= 351 then playerAddExp(pk, math.floor(givenexp * getDamageMapPercent(pk, cid))) return true end end end end end if isNpcSummon(cid) then local master = getCreatureMaster(cid) doSendMagicEffect(getThingPos(cid), getPlayerStorageValue(cid, 10000)) doCreatureSay(master, getPlayerStorageValue(cid, 10001), 1) doRemoveCreature(cid) return false end if corpse.itemid ~= 0 then --alterado v1.8 doItemSetAttribute(corpse.uid, "level", getPokemonLevel(cid)) doItemSetAttribute(corpse.uid, "gender", getPokemonGender(cid)) end return true end Pronto, já tirei a exp extra tanto em party quanto fora, e agora pega a exp exata do pokémon selvagem (definido no arquivo xml) mas deixei para multiplicar pela função getDamageMapPercente, que é uma função que pega porcentagem do monstro de acordo com o dano que ele deu em um pokémon (isso só se aplica quando mais de um jogador ataca o mesmo pokémon, quem dar mais dano fica com o pokémon). Se matar um monstro sozinho no seu servidor vai ver que vai pegar a exp exata do pokémon, porém se outro player atacar ele, vai ver que a exp não vai vir exata, mas de acordo com o tanto que você atacou o pokémon. E a função getDamageMapPercent não sei o valor da porcentagem que trabalha porque é uma função feita na source, mas sempre que atacar sozinho um pokémon, vai vir 100% da exp dele.
  15. Não, ai é só criação de variáveis estáticas, você tem que colocar onde eu falei, em baixo da function onUse. Mas nos script da moto police e rcoket eu já fiz essa verificação.
  16. Depende, não é sempre. Depende muito do que você quer fazer.
  17. Já adicionei a verificação de premium nas duas conforme te falei no post que coloquei os scripts.
  18. Que bom que funcionou Posso sim function onUse(cid, item, frompos, itemEx, topos) if not isPremium(cid) then doPlayerSendTextMessage(cid, 27, "Você precisa ser premium para trocar o dinheiro.") return true end if item.itemid == 2160 then doPlayerRemoveItem(item.uid, 1) doPlayerAddItem(cid, 2152, 100) return true end return true end Nesse exemplo, se o player tem 2160 (Platinum Coin ou 1K) ele recebe 100 (Gold Coin ou 100 Dólares). Mas ele só pode dar use no item se ele for premium, se não for ele recebe a mensagem e finaliza o script, sendo assim, o player não consegue usar o item. Mas por que a verificação do premium tem que estar no começo? Porque as linguagens de programação são top-down, ou seja, leem os códigos de cima para baixo, e Lua é uma linguagem interpretada, ou seja ela vai lendo linha por linha e executando conforme vai lendo, diferente de linguagem compilada que primeiro lê tudo e depois verifica se deu certo ou não o código. Lua já da alerta e para o funcionamento do script na primeira linha errada. Então sabendo isso, precisa estar no começo a verificação, por que se deixar em baixo da funcionalidade do script (que é verificar se tem o item e remover/adicionar os itens) ele vai sempre executar essas ações primeiro e depois vai verificar se é premium, ai já está errado, porque não adiantará nada ser premium, pois qualquer um poderá usar! Era isso que queria saber?
  19. Beleza, testa e me fala, lembrando que precisa colocar o número da storage de police/rocket corretas, se não vai sempre permitir mesmo se não forem. A 52000 e 52001 não são a correta, só coloquei para ter um elemento e para ficar de exemplo para você. Sobre a sua dúvida, é só ir no script de cada veículo bike/carro e etc e fazer uma verificação no começo: if not isPremium(cid) then doPlayerSendCancel(cid, "Você precisa ser Premium para usar esse veículo.") -- MENSAGEM BRANCA NO CANTO INFERIOR CENTRAL DA TELA (EM CIMA DO CONSOLE) doPlayerSendTextMessage(cid, 27, "Você precisa ser Premium para usar esse veículo.") -- MENSAGEM EM AZUL NO CONSOLE (CHAT DO PLAYER) return true end Coloca bem no começo do script (em baixo (começo) da função onUse).
  20. Nessas linhas: Police: local storage_police = 52000 -- STORAGE PARA O PLAYER QUE É POLICE Rocket: local storage_rocket = 52001 -- STORAGE PARA O PLAYER QUE É ROCKET Deixei a criação das variáveis no começo do script com comentário para identificar onde está e para que servem. Mas lembrando que ela tem chave e valor, o que número dela, no caso dos exemplos que fiz 52000 e 52001 são chaves, o valor deles como padrão vem como -1, sendo que você pode mudar através da função setPlayerStorageValue, também é possível mudar na tabela player_storages no banco. E deixei para verificar que são Police ou Rocket com o valor 1, mas pode ter sido que colocaram como 0 (mas é muito raro, geralmente é 1). Mas é nessas duas linhas acima que você precisa colocar o número das storages.
  21. Moto Police: local strgs = {17000, 17001} -- Coloque a Storage de Controle dos Sistemas Que Deseja Bloquear. local config = { outfitMale = 5510, -- Outfit male outfitFemale = 5509, -- Outfit female storageValue = 323339, -- Storage Para a bike } local storage_police = 52000 -- STORAGE PARA O PLAYER QUE É POLICE function onUse(cid, item, itemEx, fromPosition, toPosition) if getPlayerStorageValue(cid, storage_police) < 1 then doPlayerSendCancel(cid, "Você precisa ser Police para usar essa moto.") return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você precisa ser Police para usar essa moto.") end if isPremium(cid) then ctrl = 0 for x = 1, #strgs do if getPlayerStorageValue(cid, strgs[x]) > 0 then ctrl = ctrl + 1 end end if ctrl < 1 then if isPlayer(cid) and getCreatureOutfit(cid).lookType == 814 then return false end if getPlayerStorageValue(cid, 92001) >= 1 then doPlayerSendCancel(cid, "Você não pode usar bike e robo ao mesmo tempo.") return false end if getPlayerStorageValue(cid, 92002) >= 1 then doPlayerSendCancel(cid, "Você não pode usar bike e robo ao mesmo tempo.") return false end if getPlayerStorageValue(cid, 92003) >= 1 then doPlayerSendCancel(cid, "Você não pode usar bike e robo ao mesmo tempo.") return false end if getPlayerStorageValue(cid, 92004) >= 1 then doPlayerSendCancel(cid, "Você não pode usar bike e robo ao mesmo tempo.") return false end if getPlayerStorageValue(cid, 92005) >= 1 then doPlayerSendCancel(cid, "Você não pode usar bike e robo ao mesmo tempo.") return false end if getPlayerStorageValue(cid, 19000) == 1 then doPlayerSendCancel(cid, "Você não pode usar bike e correr ao mesmo tempo.") return false end if getPlayerStorageValue(cid, config.storageValue) <= 0 then local a = {lookType = config.outfitMale, lookHead = getCreatureOutfit(cid).lookHead, lookBody = getCreatureOutfit(cid).lookBody, lookLegs = getCreatureOutfit(cid).lookLegs, lookFeet = getCreatureOutfit(cid).lookFeet} local b = {lookType = config.outfitFemale, lookHead = getCreatureOutfit(cid).lookHead, lookBody = getCreatureOutfit(cid).lookBody, lookLegs = getCreatureOutfit(cid).lookLegs, lookFeet = getCreatureOutfit(cid).lookFeet} setPlayerStorageValue(cid, 32001, ""..getPlayerStamina(cid).."") doChangeSpeed(cid, 1500) setPlayerStorageValue(cid, config.storageValue, 1) if getPlayerSex(cid) == 0 then doSetCreatureOutfit(cid, b, -1) else doSetCreatureOutfit(cid, a, -1) end else setPlayerStorageValue(cid, config.storageValue, 0) doRemoveCondition(cid, CONDITION_OUTFIT) doRegainSpeed(cid) end else doPlayerSendCancel(cid, "Você não pode usar bike enquanto está no Fly/Hide.") end else doPlayerSendCancel(cid, "Você precisa ser Premium para usar essa moto.") return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você precisa ser Premium para usar essa moto.") end return true end Moto Rocket: local strgs = {17000, 17001} -- Coloque a Storage de Controle dos Sistemas Que Deseja Bloquear. local config = { velocidadeDaSuaBike = 1500, -- A volocidade da bike (1-9) outfitMale = 5517, -- Outfit male outfitFemale = 5516, -- Outfit female storageValue = 32053, -- Storage Para a bike } local storage_rocket = 52001 -- STORAGE PARA O PLAYER QUE FOR ROCKET function onUse(cid, item, itemEx, fromPosition, toPosition) if getPlayerStorageValue(cid, storage_rocket) < 1 then doPlayerSendCancel(cid, "Você precisa ser Rocket para usar essa moto.") return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você precisa ser Rocket para usar essa moto.") end if isPremium(cid) then ctrl = 0 for x = 1, #strgs do if getPlayerStorageValue(cid, strgs[x]) > 0 then ctrl = ctrl + 1 end end if ctrl < 1 then if isPlayer(cid) and getCreatureOutfit(cid).lookType == 814 then return false end if getPlayerStorageValue(cid, config.storageValue) <= 0 then local a = {lookType = config.outfitMale, lookHead = getCreatureOutfit(cid).lookHead, lookBody = getCreatureOutfit(cid).lookBody, lookLegs = getCreatureOutfit(cid).lookLegs, lookFeet = getCreatureOutfit(cid).lookFeet} local b = {lookType = config.outfitFemale, lookHead = getCreatureOutfit(cid).lookHead, lookBody = getCreatureOutfit(cid).lookBody, lookLegs = getCreatureOutfit(cid).lookLegs, lookFeet = getCreatureOutfit(cid).lookFeet} setPlayerStorageValue(cid, 32001, ""..getPlayerStamina(cid).."") doChangeSpeed(cid, -getCreatureSpeed(cid)) doChangeSpeed(cid, config.velocidadeDaSuaBike) setPlayerStorageValue(cid, config.storageValue, 1) if getPlayerSex(cid) == 0 then doSetCreatureOutfit(cid, b, -1) else doSetCreatureOutfit(cid, a, -1) end else setPlayerStorageValue(cid, config.storageValue, 0) doRemoveCondition(cid, CONDITION_OUTFIT) doRegainSpeed(cid) end else doPlayerSendCancel(cid, "Você não pode usar a moto enquanto está no Fly/Ride.") end else doPlayerSendCancel(cid, "Você precisa ser Premium para usar essa moto.") return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você precisa ser Premium para usar essa moto.") end return true end Fiz verificação se é Police ou Rocket e se é premium. Na variável storage_police e storage_rocket só colocar a storage de cada, e lembrando que deixei para ver se são com o valor de storage 1, então se for 0 o valor da storage, precisa mudar na verificação. Mas testa e fala se der algum problema.
  22. Isso não é erro de duplicata, mas sim que a spell está usando um nome reservado, precisa mudar a nomenclatura.
  23. Que bom que deu certo! ? Caso tenha gostado e te ajudado, não esqueça de deixar um rep ?
  24. No prompt está falando que o TFS.exe não é reconhecido como comando, ou seja, você não colocou o nome da sua distro corretamente. Creio que copiou o script mas esqueceu de seguir o passo de colocar o nome da sua distro.
  25. Sim, inclusive é o sistema operacional que eu uso.
  • Quem Está Navegando   0 membros estão online

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