Ir para conteúdo

jhon992

Conde
  • Total de itens

    631
  • Registro em

  • Última visita

  • Dias Ganhos

    13

Tudo que jhon992 postou

  1. Beeki, deve funcionar sim. Aqui foi testado em tfs 0.3.6, servers 8.54+ deve funcionar.
  2. Olá XTibianos, vim trazer um novo sistema que criei nomeado por min como: Sistema de Durabilidade! Qual a funcionalidade desse sistema: Esse sistema tem a função de atribuir pontos de durabilidade em diversos tipos de itens, trazendo assim um pouco mais de realidade ao mundo do tibia, simulando batalhas onde os seus itens vão se desgastando até virarem inuteis. Quais tipos de itens que podem ser adicionados esses pontos: Weapons Shields Armors Legs Helmet Boots Como esses pontos diminuem: Conforme o player vai batalhando, os pontos de durabilidade de todos os itens que estão sendo usados vão diminuindo até chegar a 0. Oque acontese se os pontos chegarem a 0: Se os pontos da sua weapon chegarem a 0, você não consiguira mais atacar o monstro. Ja se o pontos do seu shield chegarem a 0, a defesa dele é setada para def=0. E os outros itens do seu set que tiverem os pontos de durabilidades zerados, receberam arm=0. E com isso você tem necessidade de reparar esses itens para voltar ao normal. Como reparar esses itens: Eu irei postar duas formas de reparação de itens, um npc e uma talkaction. Vocês devem usar a que acharem de melhor adaptação em seu otserv. O itens podem ser reparados mesmo sem estar com os pontos iguais a 0, sera cobrado uma taxa por cada ponto de durabilidade reparado dos itens, esse preço é configuravel no scripts. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Vamos aos primeiros scripts do sistema: Primeiramente vai na pasta data/creaturescripts/scripts, duplica um arquivo e nomeia para "durWeapons" sem as apas e nele cole: function onStatsChange(cid, attacker, type, combat, value) chance = 970 if type == STATSCHANGE_HEALTHLOSS then if isPlayer(attacker) then local slotWeapon = nil if weapons[getPlayerSlotItem(attacker, CONST_SLOT_RIGHT).itemid] then slotWeapon = CONST_SLOT_RIGHT elseif weapons[getPlayerSlotItem(attacker, CONST_SLOT_LEFT).itemid] then slotWeapon = CONST_SLOT_LEFT end if slotWeapon == nil then return true end if (getItemAttribute(getPlayerSlotItem(attacker, slotWeapon).uid, "Charges") == "Broken") then doPlayerSendTextMessage(attacker, 22, "Sua weapon esta quebrada.") return false elseif (math.random(1,1000) > chance) then setDurabilidade(attacker, slotWeapon, weapons) end end elseif type == STATSCHANGE_HEALTHGAIN then return false end return true end function onCombat(cid, target) registerCreatureEvent(target, "DurGain") return true end Agora duplique outro arquivo nessa mesma pasta e nomeie para "durItens" sem as aspas e nele cole: local slotShield = nil local slotArmor = nil local slotLegs = nil local slotHelmet = nil local slotBoots = nil local slots = { [1] = {slot=slotHelmet, lib=helmets}, [4] = {slot=slotArmor, lib=armors}, [5] = {slot=slotShield, lib=shields}, [6] = {slot=slotShield, lib=shields}, [7] = {slot=slotLegs, lib=legs}, [8] = {slot=slotBoots, lib=boots} } function onThink(cid, interval) if (isPlayer(cid)) then for i=1, 8 do if slots[i] ~= nil then if slots[i].lib[getPlayerSlotItem(cid, i).itemid] then slots[i].slot = i if setDurMaxHit(cid, slots[i].slot, slots[i].lib) then return true end end end end local slotWeapon = nil if weapons[getPlayerSlotItem(cid, CONST_SLOT_RIGHT).itemid] then slotWeapon = CONST_SLOT_RIGHT elseif weapons[getPlayerSlotItem(cid, CONST_SLOT_LEFT).itemid] then slotWeapon = CONST_SLOT_LEFT end if slotWeapon ~= nil then if setDurMaxHit(cid, slotWeapon, weapons) then return true end end if getPlayerStorageValue(cid, 456431) < 0 then chance = math.random(15,30) setPlayerStorageValue(cid, 456432, chance) end chance = getPlayerStorageValue(cid, 456432) if(getCreatureCondition(cid, CONDITION_INFIGHT)) and getPlayerStorageValue(cid, 456431) < chance then local health = getCreatureHealth(cid) setPlayerStorageValue(cid, 456431, getPlayerStorageValue(cid, 456431)+1) if getPlayerStorageValue(cid, 456431) == chance-1 then addEvent(verificaLife, 1000, health, cid) setPlayerStorageValue(cid, 456431, -1) end end end end function verificaLife(health, cid) if (isPlayer(cid)) then if getCreatureHealth(cid) < health then for i=1, 8 do if slots[i] ~= nil then if slots[i].lib[getPlayerSlotItem(cid, i).itemid] then slots[i].slot = i addEvent(setDurabilidade, math.random(10000,60000), cid, slots[i].slot, slots[i].lib) end end end end end end Depois disso, abra o arquivo creaturescripts.xml que fica na pasta data/creaturescripts e nele cole essas três tags: <event type="think" name="DurabTime" event="script" value="durItens.lua"/> <event type="statschange" name="DurGain" event="script" value="durWeapons.lua"/> <event type="combat" name="Durab" event="script" value="durWeapons.lua"/> E para terminar a parte de creaturescripts, vai na pasta data/creaturescripts/scripts, abre a arquivo login.lua e antes do último return true cole: registerCreatureEvent(cid, "Durab") registerCreatureEvent(cid, "DurabTime") ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Agora vamos pra parte de configuração do script, nesse script você deve configurar os itens que terão pontos de durabilidade, quantos pontos eles terão, se for shield você deve por qual sua "def" normal e se for outros itens do set deve por a sua "arm" normal. Vai na pasta data/lib, duplica um arquivo, nomeie para "039-durabilidade" sem as aspas e nele cole: weapons = { [2421] = {charge=100}, [2415] = {charge=50}, [2404] = {charge=50} } shields = { [2516] = {charge=50, def=31}, -- dragon shield [2520] = {charge=50, def=35} -- demon shield } armors = { [2486] = {charge=50, arm=15} } legs = { [7894] = {charge=50, arm=8} } helmets = { [2501] = {charge=50, arm=7} } boots = { [11113] = {charge=50, arm=3} } -- Não configurar daqui para baixo -- function isWeapon(uid) -- Function by Mock the bear. uid = uid or 0 local f = getItemWeaponType(uid) if f == 1 or f == 2 or f == 3 then return TRUE end return FALSE end function isShield(uid) -- Function by Mock the bear. uid = uid or 0 if getItemWeaponType(uid) == 4 then return TRUE end return FALSE end function setItemName(uid,name) -- Function by Mock the bear. return doItemSetAttribute(uid,'name',name) end function setItemDefense(uid,name) -- Function by Mock the bear. return doItemSetAttribute(uid,'defense',name) end function setItemArmor(uid,name) -- Function by Mock the bear. return doItemSetAttribute(uid,'armor',name) end function setDurabilidade(cid, slot, lib) if (isPlayer(cid)) then if getPlayerSlotItem(cid, slot).uid > 0 then if (getItemAttribute(getPlayerSlotItem(cid, slot).uid, "Charges")) ~= "Broken" then doItemSetAttribute(getPlayerSlotItem(cid, slot).uid, "Charges", (getItemAttribute(getPlayerSlotItem(cid, slot).uid, "Charges")) - 1) setItemName(getPlayerSlotItem(cid, slot).uid, getItemNameById(getPlayerSlotItem(cid, slot).itemid)..' [Dur: '.. (getItemAttribute(getPlayerSlotItem(cid, slot).uid, "Charges")) ..'/'.. lib[getPlayerSlotItem(cid, slot).itemid].charge ..']') if getItemAttribute(getPlayerSlotItem(cid, slot).uid, "Charges") <= 0 then doPlayerSendTextMessage(cid, 22, "Your item has broken.") if (isShield(getPlayerSlotItem(cid, slot).uid)) then setItemDefense(getPlayerSlotItem(cid, slot).uid, 0) end if (not isShield(getPlayerSlotItem(cid, slot).uid) and not isWeapon(getPlayerSlotItem(cid, slot).uid)) then setItemArmor(getPlayerSlotItem(cid, slot).uid, 0) end doSendMagicEffect(getPlayerPosition(cid), 2) doItemSetAttribute(getPlayerSlotItem(cid, slot).uid, "Charges", "Broken") return true end else doSendMagicEffect(getPlayerPosition(cid), 2) return false end end end end function setDurMaxHit(cid, slot, lib) if (getItemAttribute(getPlayerSlotItem(cid, slot).uid, "Charges")) ~= "Broken" then if (getItemAttribute(getPlayerSlotItem(cid, slot).uid, "Charges") == nil or getItemAttribute(getPlayerSlotItem(cid, slot).uid, "Charges") == 0 and slot ~= nil) then doItemSetAttribute(getPlayerSlotItem(cid, slot).uid, "Charges", lib[getPlayerSlotItem(cid, slot).itemid].charge) setItemName(getPlayerSlotItem(cid, slot).uid, getItemNameById(getPlayerSlotItem(cid, slot).itemid)..' [Dur: '.. (getItemAttribute(getPlayerSlotItem(cid, slot).uid, "Charges")) ..'/'.. lib[getPlayerSlotItem(cid, slot).itemid].charge ..']') return true end end return false end ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Por fim, vamos criar a talkaction e o npc reparadores. TalkAction: Essa talkaction vai funcionar da seguinte maneira, se você falar "!reparar" irá reparar todos os seus itens. Caso você fale !reparar weapon, !reparar shield, !reparar helmet, !reparar armor, !reparar legs ou !reparar boots, então reparara um item especifico. E será gasto gps por essa reparação, a quantidade de gps por pontos reparados esta configuravel na segunda linha do script. Primeiro vai em data/talkactions/scripts, duplica um arquivo e nomeia para "reparar" sem as aspas e nele cole: Depois vai em data/talkactions/talkactions.xml e cole a tag: <talkaction words="!reparar" event="script" value="reparar.lua"/> NPC: O npc vai funcionar praticamente igual ao talkaction só que é necessario falar os comando ao npc. O preço por pontos é configurado na quinta linha. Primeiro vai em data/npc, duplica um arquivo e nomeia para "Reparador" sem as aspas e nele cole: <?xml version="1.0" encoding="UTF-8"?> <npc name="Reparador" script="reparador.lua" walkinterval="2000" floorchange="0"> <health now="150" max="150"/> <look type="139" corpse="2212"/> <parameters> <parameter key="message_greet" value="Ola |PLAYERNAME|. Voce deseja {reparar todos} seus itens?"/> </parameters> </npc> Depois vai em data/npc/scripts, duplica um arquivo e nomeia para "reparador", sem as aspas e nele cole: Pronto o sisteminha, agora é só usar e apreciar! Imagens do Sistema:
  3. é pq a versão do teu otserv não possui essa função. =/
  4. jhon992

    Script Auto Gold

    #Reportado, por duvida sanada. @Sofft, vc n pode generalizar falando que ninguem ajuda, tem varios no forum que sempre ajudam quando podem. Eu só vi esse pedido agora que vc ja sanou, senão tinha tentado ajudar...
  5. jhon992

    Npc De Spells

    local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} local itemNeed = { -- itens que precisa para completar a troca {itemid = 5886, quant = 10}, -- id do item, quantidade } local spellName = "Mold Chakra!" -- nome da spell que aprendera, os nomes das spells se encontrar no arquivo spells.xml local lvlNeed = 8 -- lvl necessario para fazer a quest. 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) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if msgcontains(msg, 'trocar') then selfSay('Você deseja trocar '.. itemNeed[1].quant ..''.. getItemNameById(itemNeed[1].itemid) ..', pela spell' .. spellName ..'.', cid) talkState[talkUser] = 2 elseif talkState[talkUser] == 2 then if msgcontains(msg, 'sim') and getPlayerStorageValue(cid, 39483) <= 0 then if getPlayerLevel(cid) < lvlNeed then selfSay('Você não possui level necessario.', cid) return true end for i=1, #itemNeed do if getPlayerItemCount(cid, itemNeed[i].itemid) < itemNeed[i].quant then selfSay('Você não possui os item necessarios para troca.', cid) return true end end for i=1, #itemNeed do doPlayerRemoveItem(cid, itemNeed[i].itemid, itemNeed[i].quant) end doPlayerLearnInstantSpell(cid, spellName) selfSay('Você aprendeu o jutsu'.. spellName ..'.', cid) setPlayerStorageValue(cid, 39483, 1) else selfSay('Você não deseja {trocar}?', cid) end end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
  6. essa do @VodKart, funciona perfeitamente, basta configurar corretamente: http://www.xtibia.co...pells-por-item/ e se você quiser para remover money ao invez do item, basta trocar essa linha no script: doPlayerRemoveItem(cid,moeda,t[msg].price) por essa: doPlayerRemoveMoney(cid, t[msg].price)
  7. 15% é igual a 15/100, que é igual a 0,15. então pro player ganhar 15% da sua experiencia total, troca essa parte do script do @vilden: getPlayerExperience(cid)*0.5 por isso: getPlayerExperience(cid)*0.15
  8. tenta assim: local config = { --[vocation id] = { level, nova voc, looktype, efeito, life, mana} [398] = { 50, 399, 448, 32, 2000, 1000}, [399] = { 100, 400, 449, 32, 2000, 1000}, [400] = { 150, 401, 450, 32, 2000, 1000} } function onSay(cid, words, param, channel) doPlayerSay(cid, "transformar") local voc = config[getPlayerVocation(cid)] if voc then if getPlayerLevel(cid) >= voc[1] then doPlayerSetVocation(cid, voc[2]) doPlayerSay(cid, "Aaaaah",16) local outfit = {lookType = voc[3]} doSetCreatureOutfit(cid, outfit, -1) setCreatureMaxHealth(cid, voc[5]) setCreatureMaxMana(cid, voc[6]) doCreatureAddMana(cid, (getCreatureMaxMana(cid)-getCreatureMana(cid))) doCreatureAddHealth(cid, (getCreatureMaxHealth(cid)-getCreatureHealth(cid))) doSendMagicEffect(getCreaturePosition(cid), voc[4]) else doPlayerSendCancel(cid, "Você precisa estar no level " .. voc[1] .. " para transformar.") doSendMagicEffect(getCreaturePosition(cid), 2) end else doPlayerSendCancel(cid, "Você não pode mais transformar!") doSendMagicEffect(getCreaturePosition(cid), 2) end return true end
  9. tenta adicionar o teu item aew e vê se ele funfa, exemplo: <melee id="8601" unproperly="1" event="function" value="default"> <vocation name="Knight"/> <vocation id="8" showInDescription="0"/> </melee>
  10. falei errado, o arquivo certo seria weapons.xml na pasta data/weapons.
  11. Tem esse aqui no meu tfs. <?xml version="1.0" encoding="UTF-8"?> <npc name="Dimral" script="default.lua" walkinterval="0" floorchange="0"> <health now="150" max="150"/> <look type="129" head="114" body="119" legs="114" feet="114" corpse="2212"/> <parameters> <parameter key="module_travel" value="1"/> <parameter key="message_greet" value="Hello |PLAYERNAME|. If you don't know where to flow, say {travel}."/> <parameter key="travel_destinations" value="varak,331,509,10,50;jorvik,420,256,6,50;"/> </parameters> </npc> Para configurar mude essa linha: <parameter key="travel_destinations" value="varak,331,509,10,50;jorvik,420,256,6,50;"/> Que são > nomedacidade,posição x,posição y,posição z,custo em gps
  12. jhon992

    Clean Nas Houses

    Se não conseguir arrumar, põe o global server salve como false. E usa o save do globalevents para salvar o server a cada 2hras ou mais. data/globalevents/scripts/save.lua local config = { broadcast = {120, 30}, shallow = "no", delay = 120, events = 30 } config.shallow = getBooleanFromString(config.shallow) local function executeSave(seconds) if(isInArray(config.broadcast, seconds)) then local text = "" if(not config.shallow) then text = "Full s" else text = "S" end text = text .. "erver save within " .. seconds .. " seconds, please mind it may freeze!" doBroadcastMessage(text) end if(seconds > 0) then addEvent(executeSave, config.events * 1000, seconds - config.events) else doSaveServer(config.shallow) end end function onThink(interval, lastExecution, thinkInterval) if(table.maxn(config.broadcast) == 0) then doSaveServer(config.shallow) else executeSave(config.delay) end return true end data/globalevents/globalevents.xml <globalevent name="save" interval="3600" event="script" value="save.lua"/>
  13. baixei o items.xml e parece estar funcional. Acho que o problema n esta nele n. Tenta da uma olhada no seu movements.xml, procura pelo id da arma. O erro pode estar la, algo como o novo player n ter lvl suficiente para usar, seila. tentei postar o código aqui, mais não é possivel pq é muito grande. mais podem baixar que o arquivo esta limpo.
  14. A sua tava quase cof corretamente, só mudei umas coisinhas: local outfit = {lookType = 330} local tempo = 15 * 1000 local cooldown = 30 local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_EFFECT, 40) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) local condition = createConditionObject(CONDITION_ATTRIBUTES) setConditionParam(condition, CONDITION_PARAM_TICKS, tempo) setConditionParam(condition, CONDITION_PARAM_STAT_MAGICLEVELPERCENT, 150) setConditionParam(condition, CONDITION_PARAM_BUFF, true) setConditionParam(condition, CONDITION_PARAM_OUTFIT, outfit) setCombatCondition(combat, condition) function cooldownready(cid) doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Cooldown of Magic Disturb is ready.") end local sys = createConditionObject(CONDITION_OUTFIT) setConditionParam(sys, CONDITION_PARAM_TICKS, tempo) addOutfitCondition(sys, outfit) setCombatCondition(combat, sys) function onCastSpell(cid, var) if exhaustion.check(cid, 50001) == false then exhaustion.set(cid, 50001, cooldown) addEvent(cooldownready, cooldown*1000, cid) return doCombat(cid, combat, var) else doPlayerSendCancel(cid, "Cooldown[" ..exhaustion.get(cid, 50001).."]") end end obs: nem testei, qualquer erro me fala aqui.
  15. Se acontece na hora que você se transforma, o script teve tar na magia/talkaction de transformação do seu otserv. Basta procurar e alterar, provavelmente ta na pasta data/spells/scripts ou na pasta data/talkactions/scripts.
  16. Sóh configurar como tu quiser. http://www.xtibia.com/forum/topic/183233-npc-mount-seller-por-items-87/ Créditos @VodKart;
  17. Dei uma olhada novamente e ao meu ver era pra estar funcionando perfeitamente. Qual erro aparece no executavel do ot?
  18. Quais erros ocorreram, vc testou certinho? Apareceu algum erro no executavel? Explique melhor.
  19. Mais ta pra player que ta sóh em pz. Não ta funcionando?
  20. local monsters = {"Wolf","Orc","Troll"} function onCastSpell(cid, var) x = doSummonCreature(monsters[math.random(1,#monsters)], getCreaturePosition(cid)) doConvinceCreature(cid, x) end
  21. Primeiro em data/talkactions/script, duplica um arquivo e nomeia para "eventokill" sem as aspas e nele cole: --<Script by jhon992>-- function onSay(cid, words, param, channel) local online = getPlayersOnline() local player = 0 local playerStorage = 0 local posEvent = {x=1234, y=345, z=7} -- posição para que os players serão teleportados ao iniciar o evento. local itemGain = {1234,4564} -- itens que ganha ao acabar o evento. local posUp = {x=1234, y=345, z=7} -- posição superior esquerdo do mapa do evento. local posDown = {x=1234, y=345, z=7} -- posição inferior direito do mapa do evento. local posBackEvent = {x=1234, y=345, z=7} -- posição para que os players serão teleportados ao acabar o evento. if (param == "") then doPlayerSendTextMessage(cid, 24,"Comando errado.") return true end if (param == "open") then for i=1, #online do if (getTilePzInfo(getCreaturePosition(online[i])) == TRUE) then setPlayerStorageValue(online[i], 403451, -1) doTeleportThing(online[i], posEvent) end end doBroadcastMessage("O Evento esta aberto!") return true end if (param == "close") then online = getPlayersOnline() doBroadcastMessage("O Evento esta feichado!") for i=1, #online do if (isInArea(getPlayerPosition(online[i]), posUp, posDown)) then doTeleportThing(online[i], posBackEvent) if (getPlayerStorageValue(online[i], 403451) > playerStorage) then player = online[i] playerStorage = getPlayerStorageValue(online[i], 403451) end end end for i=1, #itemGain do doPlayerAddItem(player, itemGain[i]) end doBroadcastMessage("O player ".. getCreatureName(player) .." matou ".. getPlayerStorageValue(cid, 403451) +1 .." players e ganhou o evento!") end return TRUE end Em talkactions.xml cole a tag: <talkaction log="yes" words="!evento" access="4" event="script" value="eventokill.lua"/> Agora em data/creaturescripts/scripts, duplica um arquivo e nomeia para "killevent" sem as aspas e nele cole: --<Script by jhon992>-- function onKill(cid, target, lastHit) local posUp = {x=1234, y=345, z=7} -- posição superior esquerdo do mapa do evento. (MESMA POSIÇÂO QUE NO OUTRO ARQUIVO) local posDown = {x=1234, y=345, z=7} -- posição inferior direito do mapa do evento. (MESMA POSIÇÂO QUE NO OUTRO ARQUIVO) if (isInArea(getPlayerPosition(cid), posUp, posDown)) then setPlayerStorageValue(cid, 403451, getPlayerStorageValue(cid, 403451) +1) doPlayerSendTextMessage(cid, 24,"Você ja matou".. getPlayerStorageValue(cid, 403451) +1 .." players no evento.") end return TRUE end Agora em creaturescripts.xml cole a tag: <event type="kill" name="KillEvent" event="script" value="killevent.lua"/> E por último, no arquivo login.lua na pasta /scripts, cole antes do último return true essa tag: registerCreatureEvent(cid, "KillEvent")
  22. #Subwat reportado por flood. @xIceHeartx, vai na pasta data/creaturescripts/scripts, duplica um arquivo e nomeia para "attackvocation" e cola o código dentro. Depois em creaturescripts.xml cole a tag: <event type="target" name="AttackVocation" event="script" value="attackvocation.lua"/> Por fim no seu arquivo login.lua na pasta script, antes do último return true cole: registerCreatureEvent(cid, "AttackVocation")
  23. O primeiro erro é no actions.xml, o action 2051 ta duplicado. Os outros é em movements.xml, varias linhas com aqueles ids estão duplicados. Basta ir na linha duplicada e apagar.
  24. Crendo que vc possua o sistema Vip do Mock. Basta você duplicar um arquivo na pasta data/talkactions/scripts, nomear para "vipteste" sem as aspas e nele colar o código. Depois no arquivo talkactions.xml cole a tag: <talkaction words="!viptest" event="script" value="vipteste.lua"/>
  • Quem Está Navegando   0 membros estão online

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