Ir para conteúdo

Apocalypse

Membro
  • Registro em

  • Última visita

  1. Ryukiimaru reagiu a uma resposta no tópico: Gravar posição do player por storage.
  2. RenanPhellip reagiu a uma resposta no tópico: Exp Por Hit v3.0 - Oficial XotservX
  3. drakylucas reagiu a uma resposta no tópico: Exp Por Hit v3.0 - Oficial XotservX
  4. LeoTK reagiu a uma resposta no tópico: Exp Por Hit v3.0 - Oficial XotservX
  5. bom primeiramente vc deve saber q a função getPlayerPosition(cid) retorna uma tabela, e tabelas não pode ser gravadas em uma storage somente numeros e strings. então vc pode fazer o seguinte montar uma string que salve os 3 valores separados por virgula assim; "x,y,z" local pos = getPlayerPosition(cid).x .. "," .. getPlayerPosition(cid).y .. "," .. getPlayerPosition(cid).z que sera a mesma coisa que; local pos = "x,y,z" depois vc salva na storage: setPlayerStorageValue(cid, 2220, pos) e por fim para retornar essa posição vc iria usar o auxilio do string.explode que transforma uma string em tabela, separando os valores de acordo com o separador que escolheu que nosso caso é a virgula. por exemplo: local pos = "x,y,z" local tab = string.explode(pos, ",") -- quando encontrar a virgula, ele passara para o proximo indice da tabela. que é a mesma coisa que isso: local tab = {"x", "y", "z"} oque eu tenha que fazer agora é colocar no doTeleportThing: lembrando que a função doTeleportThing para funcioar precisa de uma tabela da seguinte estrutura: {x = x, y = y, z = z} então teremos que montar essa tabela com os valores da string.explode local posFinal = {x = tab[1], y = tab[2], z = tab[3]} -- ou seja x é igual ao primeiro indice da tabela tab, y o segundo e z o terceiro. depois só mandar o comando: doTeleportThing(cid, posFinal) fazendo isso resumidamente ficaria o seguinte: setPlayerStorageValue(cid, 2220, getPlayerPosition(cid).x .. "," .. getPlayerPosition(cid).y .. "," .. getPlayerPosition(cid).z) -- gravei os valores da posição do player como uma string local pos = string.explode(getPlayerStorageValue(cid, 2220), ",") -- peguei o valor da storage que é a string, e separei as posições doTeleportThing(cid, {x = pos[1], y = pos[2], z = pos[3]}) -- montei a tabela que a função precisa com os valores da storage separados por indices. espero que tenha entendido, qualquer coisa tamo ae !
  6. tev reagiu a uma resposta no tópico: (Resolvido)[Pedido] Aparecer lista de pks
  7. gmstrikker reagiu a uma resposta no tópico: CHAMAR UMA VARIVAVEL DA LIB
  8. gmstrikker reagiu a uma resposta no tópico: (Resolvido)Ajuda melhorar meu script
  9. function onSay(cid, words, param) local str = "PLAYERS PKS\n\n" for _, pid in pairs(getPlayersOnline()) do if getCreatureSkullType(pid) >= 3 then local skullsType = {"none", "none", "White Skull", "Red Skull", "Black Skull"} str = str .. getCreatureName(pid) .. ", " .. getPlayerLevel(pid) .. ", " .. skullsType[getCreatureSkullType(pid)] .. "\n" end end str = str == "PLAYERS PKS\n\n" and str .. "not found players pks" or str doPlayerPopupFYI(cid, str) return true end
  10. local LEVEL_VARIATION = 100 local LOSER_EXP_PER_LEVEL = 5000 function onKill(cid, target, lastHit) if not isPlayer(target) or getCreatureSkullType(target) >= 1 then return true end if getPlayerLevel(target) > 150 then return true end local TARGET_LEVEL_VARIATION = (getPlayerLevel(cid) - getPlayerLevel(target)) if TARGET_LEVEL_VARIATION >= LEVEL_VARIATION then local EXP_PUNISHMENT = TARGET_LEVEL_VARIATION * LOSER_EXP_PER_LEVEL doPlayerSendTextMessage(cid,22,'Voce foi punido por falta de honra! Matou um player com '..TARGET_LEVEL_VARIATION..' leveis de diferenca e perdeu '..EXP_PUNISHMENT..' pontos de exp.') doPlayerAddExp(cid, -EXP_PUNISHMENT) doCreatureSay(cid, "Power Abuse punido!", TALKTYPE_ORANGE_1) end return true end
  11. creio q o erro esta ocorrendo pq vc esta tentando verificar o level do target, sem verificar se o target é um player, ou seja se tem mesmo um level, eu faria assim: local LEVEL_VARIATION = 100 local LOSER_EXP_PER_LEVEL = 5000 function onKill(cid, target, lastHit) if not isPlayer(target) or getCreatureSkullType(target) >= 1 then return true end local TARGET_LEVEL_VARIATION = (getPlayerLevel(cid) - getPlayerLevel(target)) if TARGET_LEVEL_VARIATION >= LEVEL_VARIATION then local EXP_PUNISHMENT = TARGET_LEVEL_VARIATION * LOSER_EXP_PER_LEVEL doPlayerSendTextMessage(cid,22,'Voce foi punido por falta de honra! Matou um player com '..TARGET_LEVEL_VARIATION..' leveis de diferenca e perdeu '..EXP_PUNISHMENT..' pontos de exp.') doPlayerAddExp(cid, -EXP_PUNISHMENT) doCreatureSay(cid, "Power Abuse punido!", TALKTYPE_ORANGE_1) end return true end
  12. pokes["Bulbasaur"].level
  13. realmente eu não percebi tal bug, script feito novamente, e desculpe abandonar o script, na proxima não critique reporte o erro, obrigado ! local configInv = { ["20:14"] = {nome = "The Demon Invasion", pos = {x=32369, y=32167, z=7}, monster = {"50 Demon", "1 The Imperor"}}, ["14:35"] = {nome = "The Massive Dragon Invasion", pos = {x=32368, y=32188, z=8}, monster = {"200 Dragon"}}, } function onThink(interval, lastExecution) local hours = tostring(os.date("%X")):sub(1, 5) if configInv[hours] then if GlobalStorageValue(95473) == hours then return true end doBroadcastMessage(hours .. " - " .. tb.nome .. " iníciou.") for _,x in pairs(tb.monster) do for s = 1, tonumber(x:match("%d+")) do doSummonCreature(x:match("%s(.+)"), tb.pos) end end setGlobalStorageValue(95473, hours) end return true end
  14. Fundamentos da aplicação Olá, eu sou Miiller conhecido aqui no tibiaking como "xotservx", tenho 17 anos, e iniciei a minha faculdade este ano, estou cursando análise e desenvolvimento de sistemas , na faculdade estou começando aprender desenvolver aplicações em C#, e como sou fanático em scripts, resolvi criar uma aplicação que facilita-se algo na vida dos scripters, então eu desenvolvi essa aplicação para q ela crie o inicio do script, aonde você pode adicionar varias condições para que o script aconteça. Perai ! O aplicativo faz o script pra você ? Não ! Ele não faz o script totalmente para você, mas ajuda muito quado se quer colocar por exemplo, para que somente players level 20, usa tal script, foi pensando nisso que desenvolvi essa aplicação. Interface e exemplo de uso Esta é a interface da aplicação veja que tem varias configurações que pode ser adicionada no script, como level, magic level, skills, posição adequada, storages ( permite varias storages ), items e suas quantidades, entre outras, depois clicando no butão Create File, a seguinte mensagem irá aparecer : O aplicativo automáticamente cria o arquivo em lua, no mesmo diretório que estiver o executavel da aplicação, o script resultou o seguinte: -- Script Name: test V1.0 -- Autor: xotservx -- Using Script Check Generator (xotservx) function onSay(cid, words, param, channel) if getPlayerLevel(cid) < 20 then return doPlayerSendCancel(cid, 'You need level 20') end if getPlayerVocation(cid) ~= 3 then return doPlayerSendCancel(cid, 'His vocation to be ' .. getPlayerVocationName(3)) end if getPlayerItemCount(cid, 2160) < 10 then return doPlayerSendCancel(cid, 'You need 10 '.. getItemNameById(2160)) end -- Start your script return true end Tudo correto as verificações agora se pode iniciar o script. Downloads MEGA Mediafire Zippyshare Scan : VirusTotalScan Requisitos : .net framework 3.5 ou superior Bom, então é isso ai, quem gosto pelo menos da idéia, comenta ai, e se souberem de bugs e tals, ou de novas idéias podem me adiconar no msn avontade .
  15. Apocalypse postou uma resposta no tópico em Scripts tfs 0.4 (OLD)
    numero ^ expoente
  16. SISTEMA ATUALIZADO v3.0 Log V3.0 ( 03/02/2013 ) : @Adriano SwaTT Eu fiz aquilo para toda exp, ser meio com numeros diferentes e não ficar uma coisa repetitiva pode perceber q a exp vem sempre diferente, não sempre a mesma ...
  17. vlw pessoal, obrigado pela motivação de vcs . ja fiz 5 espadas . kkk
  18. a ponta da espada parece um garfo, olhe na original, não sei mto bom como fazer isso em pixel, kkkk
  19. Olá, eu estou montando um server de Cabal, baseando no tibia, eu estou fazendo o server todo sozinho, até pq sou scripter, programador e mapper, porém não sou spriter, e justamente oque mais vou precisar. Eu nunca fiz uma sprite antes, e tentei fazer esta espada, que é uma espada do cabal, a Osmium Blade. Queria a opinião de vocês. Espada Original: Sprite:
  20. Monstros dão somente a exp usada no monster.xml vezes a rate do server, ele pode healar toda sua vida, porém se ele ja tiver dado a exp, ele não vai dar mais. ta no log
  21. Instalação Primeiramente abra a pasta de seu ot, e procure pelo arquivo config.lua e procure por essas 2 linhas : experienceStages = false rateExperience = 50 se o experienceStages tiver ativado mude para false, pois o sistema ainda não tem suporte á Stages. e é muito importante o rateExperience tiver como 0, pois ela sera configurada, em outro local agora. exemplo: experienceStages = false rateExperience = 0 agora entre na pasta creaturescripts/scripts e crie um arquivo lua, chamado exphit.lua e cole o seguinte código: -- CONFIGURAÇÕES DE EXPERIENCIA -- useStages = true -- Usar sistema de Stages , true/false premiumMultipliqueExp = 2 -- Players Premiums terão exp multiplicada, caso não querer deixe 1. rateExp = 50 -- Exp caso não for usar stages. local stages = { -- ["DELEVEL-ATELEVEL"] = EXP, (OBS: NUNCA REPETIR O MSM NUMERO, SEMPRE COLOCAR UM A MAIS.) ["1-50"] = 50, ["51-100"] = 45, ["101-150"] = 40, ["151-200"] = 35, ["201-250"] = 30, ["251-300"] = 25, ["351-400"] = 20, } ultimateExp = 15 -- exp que vai usar caso o level do player não tiver mais na tabela . -- CONFIGURAÇÕES DA PARTY partyPorcent = 40 -- Quantos Porcento da exp vai para os membros da party levelBlockParty = 1000 -- Diferença Maxima de Level permitida para membro da party ganhar exp. expShareRadiusX = 30 -- Distancia maxima permitida no eixo X para membro da party ganhar exp. expShareRadiusY = 30 -- Distancia maxima permitida no eixo Y para membro da party ganhar exp. expShareRadiusZ = 1 -- Distancia maxima permitida no eixo Z para membro da party ganhar exp. -- CONFIGURAÇÕES DE RINGS -- local rings = { -- [ID DO ANEL] = EXP MULTIPLICADA POR X EXP. [3048] = 2, [3049] = 4, [3050] = 6, } -- FIM DAS CONFIGURAÇÕES -- function CalculeExp(monsterhp, exptotal, hit) hit = hit <= monsterhp and math.ceil(exptotal * hit / monsterhp) or 0 return hit < 0 and 0 or hit end function isSummon(uid) return uid ~= getCreatureMaster(uid) or false end function onStatsChange(cid, attacker, type, combat, value) if getCreatureStorage(cid, 50001) ~= 1 then doCreatureSetStorage(cid, 50002, getMonsterInfo(getCreatureName(cid)).experience * rateExp) doCreatureSetStorage(cid, 50001, 1) end if type == STATSCHANGE_HEALTHLOSS then if isMonster(cid) then if isSummon(cid) then return true end if isCreature(attacker) then local _cid = isSummon(attacker) and getCreatureMaster(attacker) or attacker if isPlayer(_cid) then if useStages then for strstage, experience in pairs(stages) do tabstage = string.explode(strstage, "-") if getPlayerLevel(_cid) >= tabstage[1] and getPlayerLevel(_cid) <= tabstage[2] then ultimateExp = experience end end experienceRate = ultimateExp else experienceRate = rateExp end local expgain = CalculeExp(getCreatureMaxHealth(cid), getMonsterInfo(getCreatureName(cid)).experience * experienceRate, value) local ringexp = 1 for idring, expring in pairs(rings) do if getPlayerSlotItem(_cid, 9).itemid == idring then ringexp = expring break end end local premiumMultipliqueExp = isPremium(_cid) and premiumMultipliqueExp or 1 expgain = expgain * ringexp * premiumMultipliqueExp if getCreatureStorage(cid, 50002) > 0 then if getCreatureStorage(cid, 50002) - expgain < 0 then expgain = getCreatureStorage(cid, 50002) end doCreatureSetStorage(cid, 50002, getCreatureStorage(cid, 50002) - expgain) local party = false if isInParty(_cid) then local partyMembers, expParty = getPartyMembers(getPartyLeader(_cid)), expgain / 100 * partyPorcent for indice, partyMember in pairs(partyMembers) do attackerLevel, partyLevel = getPlayerLevel(_cid), getPlayerLevel(partyMember) attackerPos, partyPos = getThingPos(_cid), getThingPos(partyMember) x = false if math.abs(attackerLevel - partyLevel) > levelBlockParty then x = true elseif math.abs(attackerPos.x - partyPos.x) > expShareRadiusX then x = true elseif math.abs(attackerPos.y - partyPos.y) > expShareRadiusY then x = true elseif attackerPos.z ~= partyPos.z then x = true elseif _cid == partyMember then x = true end if x then partyMembers[indice] = nil end end if #partyMembers ~= 0 then expParty = math.ceil(expgain / 100 * partyPorcent) expmember = math.ceil(expParty / #partyMembers) for _, member in pairs(partyMembers) do if member ~= _cid then doPlayerSendTextMessage(member, 12, "You received "..expmember.." party exp.") doPlayerAddExp(member, expmember) end end doPlayerSendTextMessage(_cid, 12, "You gain "..expgain.." exp. (" ..partyPorcent.."% send to party)") doPlayerAddExp(_cid, expgain - expParty) party = true else party = false end end if not party then doPlayerSendTextMessage(_cid, 12, "You gain "..expgain.." exp.") doPlayerAddExp(_cid, expgain) end end end end end end return true end function onCombat(cid, target) if isMonster(target) and not isSummon(target) and not isPlayer(target) then registerCreatureEvent(target, "ExpGain") end return true end na mesma pasta procure pelo arquivo login.lua, e em cima de return true, adc a seguinte linha: registerCreatureEvent(cid, "ExpHit") volte na pasta anterior creaturescripts, e procure pelo arquivo creaturescritps.xml e cole as 2 tags: <event type="statschange" name="ExpGain" event="script" value="exphit.lua"/> <event type="combat" name="ExpHit" event="script" value="exphit.lua"/> para configurar a exp, que era configurada no config.lua está no começo do arquivo exphit.lua , e as configurações da party tbem, dos anéis, e até pode ser usado stages agora, segue abaixo o exemplo: -- CONFIGURAÇÕES DE EXPERIENCIA -- useStages = true -- Usar sistema de Stages , true/false premiumMultipliqueExp = 2 -- Players Premiums terão exp multiplicada, caso não querer deixe 1. rateExp = 50 -- Exp caso não for usar stages. local stages = { -- ["DELEVEL-ATELEVEL"] = EXP, (OBS: NUNCA REPETIR O MSM NUMERO, SEMPRE COLOCAR UM A MAIS.) ["1-50"] = 50, ["51-100"] = 45, ["101-150"] = 40, ["151-200"] = 35, ["201-250"] = 30, ["251-300"] = 25, ["351-400"] = 20, } ultimateExp = 15 -- exp que vai usar caso o level do player não tiver mais na tabela . -- CONFIGURAÇÕES DA PARTY partyPorcent = 40 -- Quantos Porcento da exp vai para os membros da party levelBlockParty = 1000 -- Diferença Maxima de Level permitida para membro da party ganhar exp. expShareRadiusX = 30 -- Distancia maxima permitida no eixo X para membro da party ganhar exp. expShareRadiusY = 30 -- Distancia maxima permitida no eixo Y para membro da party ganhar exp. expShareRadiusZ = 1 -- Distancia maxima permitida no eixo Z para membro da party ganhar exp. -- CONFIGURAÇÕES DE RINGS -- local rings = { -- [ID DO ANEL] = EXP MULTIPLICADA POR X EXP. [3048] = 2, [3049] = 4, [3050] = 6, } -- FIM DAS CONFIGURAÇÕES ---- Log V2.0 : Log V3.0 ( 03/02/2013 ) :
  22. acabei de entrar neste forum e fiquei realmente impressionado com uns scripts meus q tem aki sem crédito, mas enfim, pelo menos vc pois. @ferlations sim a ideia é legal de botar a sprite, mas eai, cade a sprite ? eu só sou scripter, se tivesse a sprite colocaria sem duvida.

Informação Importante

Confirmação de Termo