• TibiaFace

    Tibiaface | Una comunidad Open Tibia donde encontras : mapas, scripts, Otserver, npc y amigos etc ...

    .
    demo menumenu

    Afiliados



    Votar:

    [Sistema] Doble Experiencia Tfs 1.1/1.2 (Funcional Global Tibiaface v24)

    Ver el tema anterior Ver el tema siguiente Ir abajo  Mensaje (Página 1 de 1.)

    [Admin] God Maya

    avatar
    Administrador
    Administrador
    Hola usuarios de tibiaface


    bueno aqui le traigo el sistema de doble experiencia para la nueva version de tfs lo que es tfs 1.1/1.2 sin mas preangulos vamos a la instalacion.

    nos vamos a:

    Data/actions/scripts
    copiamos cualquier archivo y renombramos por exp.lua y pegamos esto dentro.

    Código:
    local config = {
     time = 2,
     storage = 200011
    }

    function onUse(player, item, fromPosition, target, toPosition, isHotkey)
     if player:getStorageValue(config.storage) >= os.time() then
     player:sendTextMessage(MESSAGE_INFO_DESCR, "You still have extra experience time left.")
     return true
     end

     player:setStorageValue(config.storage, os.time() + config.time * 3600)
     player:sendTextMessage(MESSAGE_INFO_DESCR, string.format("You have activated %d hour%s of double experience.", config.time, config.time ~= 1 and "s" or ""))
     item:getPosition():sendMagicEffect(CONST_ME_MAGIC_RED)
     item:remove(1)
     return true
    end

    time = 2,  ----> equivalentes en horas

    Luego nos vamos a:

    data/actions/actions.xml
    y añadimos esta tag:

    Código:
    <action itemid="xxxx" script="exp.lua" />

    xxxx------> item que quieren que sea para su doble experiencia

    ahora nos vamos a:

    este player.lua que van a remplzar es valido solo para global tibiaface v24

    data\events\scripts
    abrimos player.lua y remplazamos su contenido por esto:

    Código:
    -- Players cannot throw items on teleports if set to true
    local blockTeleportTrashing = false

    function Player:onBrowseField(position)
     return true
    end

    function Player:onLook(thing, position, distance)
     local description = 'You see '
     if thing:isItem() then
     if thing.actionid == 5640 then
     description = description .. 'a honeyflower patch.'
     elseif thing.actionid == 5641 then
     description = description .. 'a banana palm.'
     else
     description = description .. thing:getDescription(distance)
     end
     else
     description = description .. thing:getDescription(distance)
     end

     if self:getGroup():getAccess() then
     if thing:isItem() then
     description = string.format('%s\nItem ID: %d', description, thing.itemid)

     local actionId = thing.actionid
     if actionId ~= 0 then
     description = string.format('%s, Action ID: %d', description, actionId)
     end

     local uniqueId = thing:getAttribute(ITEM_ATTRIBUTE_UNIQUEID)
     if uniqueId > 0 and uniqueId < 65536 then
     description = string.format('%s, Unique ID: %d', description, uniqueId)
     end

     description = description .. '.'
     local itemType = thing:getType()

     local transformEquipId = itemType:getTransformEquipId()
     local transformDeEquipId = itemType:getTransformDeEquipId()
     if transformEquipId ~= 0 then
     description = string.format('%s\nTransforms to: %d (onEquip)', description, transformEquipId)
     elseif transformDeEquipId ~= 0 then
     description = string.format('%s\nTransforms to: %d (onDeEquip)', description, transformDeEquipId)
     end

     local decayId = itemType:getDecayId()
     if decayId ~= -1 then
     description = string.format('%s\nDecays to: %d', description, decayId)
     end
     elseif thing:isCreature() then
     local str = '%s\nHealth: %d / %d'
     if thing:getMaxMana() > 0 then
     str = string.format('%s, Mana: %d / %d', str, thing:getMana(), thing:getMaxMana())
     end
     description = string.format(str, description, thing:getHealth(), thing:getMaxHealth()) .. '.'
     end

     local position = thing:getPosition()
     description = string.format(
     '%s\nPosition: %d, %d, %d',
     description, position.x, position.y, position.z
     )

     if thing:isCreature() and thing:isPlayer() then
     description = string.format('%s\nIP: %s.', description, Game.convertIpToString(thing:getIp()))
     end
     end
     self:sendTextMessage(MESSAGE_INFO_DESCR, description)
    end

    function Player:onLookInBattleList(creature, distance)
     local description = 'You see ' .. creature:getDescription(distance)
     if self:getGroup():getAccess() then
     local str = '%s\nHealth: %d / %d'
     if creature:getMaxMana() > 0 then
     str = string.format('%s, Mana: %d / %d', str, creature:getMana(), creature:getMaxMana())
     end
     description = string.format(str, description, creature:getHealth(), creature:getMaxHealth()) .. '.'

     local position = creature:getPosition()
     description = string.format(
     '%s\nPosition: %d, %d, %d',
     description, position.x, position.y, position.z
     )

     if creature:isPlayer() then
     description = string.format('%s\nIP: %s.', description, Game.convertIpToString(creature:getIp()))
     end
     end
     self:sendTextMessage(MESSAGE_INFO_DESCR, description)
    end

    function Player:onLookInTrade(partner, item, distance)
     self:sendTextMessage(MESSAGE_INFO_DESCR, 'You see ' .. item:getDescription(distance))
    end

    function Player:onLookInShop(itemType, count)
     return true
    end

    function Player:onMoveItem(item, count, fromPosition, toPosition)
     if blockTeleportTrashing and toPosition.x ~= CONTAINER_POSITION then
     local thing = Tile(toPosition):getItemByType(ITEM_TYPE_TELEPORT)
     if thing then
     self:sendCancelMessage('Sorry, not possible.')
     self:getPosition():sendMagicEffect(CONST_ME_POFF)
     return false
     end
     end

     if isInArray({1714, 1715, 1716, 1717, 1738, 1740, 1741, 1747, 1748, 1749}, item.itemid) and item.actionid > 0 or item.actionid == 5640 then
     self:sendCancelMessage('You cannot move this object.')
     return false
     elseif item.itemid == 7466 then
     self:sendCancelMessage('You cannot move this object.')
     return false
     end

     if fromPosition.x == CONTAINER_POSITION and toPosition.x == CONTAINER_POSITION
     and item.itemid == 8710 and self:getItemCount(8710) == 2 and self:getStorageValue(Storage.RookgaardTutorialIsland.cockroachLegsMsgStorage) ~= 1 then
     self:sendTextMessage(MESSAGE_INFO_DESCR, 'Well done, you have enough cockroach legs! You should head back to Santiago with them. Climb the ladder to the north to exit.')
     self:setStorageValue(Storage.RookgaardTutorialIsland.cockroachLegsMsgStorage, 1)
     self:setStorageValue(Storage.RookgaardTutorialIsland.SantiagoNpcGreetStorage, 6)
     end
     return true
    end

    function Player:onMoveCreature(creature, fromPosition, toPosition)
     return true
    end

    function Player:onTurn(direction)
     return true
    end

    function Player:onTradeRequest(target, item)
     if isInArray({1738, 1740, 1747, 1748, 1749, 8766}, item.itemid) and item.actionid > 0 or item.actionid == 5640 then
     self:sendCancelMessage('Sorry, not possible.')
     return false
     end
     return true
    end

    function Player:onTradeAccept(target, item, targetItem)
     return true
    end

    local soulCondition = Condition(CONDITION_SOUL, CONDITIONID_DEFAULT)
    soulCondition:setTicks(4 * 60 * 1000)
    soulCondition:setParameter(CONDITION_PARAM_SOULGAIN, 1)

    local function useStamina(player)
     local staminaMinutes = player:getStamina()
     if staminaMinutes == 0 then
     return
     end

     local playerId = player:getId()
     local currentTime = os.time()
     local timePassed = currentTime - nextUseStaminaTime[playerId]
     if timePassed <= 0 then
     return
     end

     if timePassed > 60 then
     if staminaMinutes > 2 then
     staminaMinutes = staminaMinutes - 2
     else
     staminaMinutes = 0
     end
     nextUseStaminaTime[playerId] = currentTime + 120
     else
     staminaMinutes = staminaMinutes - 1
     nextUseStaminaTime[playerId] = currentTime + 60
     end
     player:setStamina(staminaMinutes)
    end

    local config = {
     rate = 2,
     storage = 200011,
    }

    function Player:onGainExperience(source, exp, rawExp)
     if not source or source:isPlayer() then
     return exp
     end

     -- Soul regeneration
     local vocation = self:getVocation()
     if self:getSoul() < vocation:getMaxSoul() and exp >= self:getLevel() then
     soulCondition:setParameter(CONDITION_PARAM_SOULTICKS, vocation:getSoulGainTicks() * 1000)
     self:addCondition(soulCondition)
     end

     -- Apply experience stage multiplier
     exp = exp * Game.getExperienceStage(self:getLevel())

     -- Stamina modifier
     if configManager.getBoolean(configKeys.STAMINA_SYSTEM) then
     useStamina(self)

     local staminaMinutes = self:getStamina()
     if staminaMinutes > 2400 and self:isPremium() then
     exp = exp * 1.5
     elseif staminaMinutes <= 840 then
     exp = exp * 0.5
     end
     end

     -- Apply Extra Experience
     if self:getStorageValue(config.storage) >= os.time() then
     exp = exp * config.rate
     end

     return exp
    end

    function Player:onLoseExperience(exp)
     return exp
    end

    function Player:onGainSkillTries(skill, tries)
     if APPLY_SKILL_MULTIPLIER == false then
     return tries
     end

     if skill == SKILL_MAGLEVEL then
     return tries * configManager.getNumber(configKeys.RATE_MAGIC)
     end
     return tries * configManager.getNumber(configKeys.RATE_SKILL)
    end


    rate = 2, -----------> experiencia que se multiplicara y activara cuando el player le de clic al item de la doble experiencia



    bueno para las personas que no usan global tibiaface tendran que modificar esto o mejor dicho remplzar en player.lua:

    Código:
    local config = {
     rate = 2,
     storage = 200011,
    }

    function Player:onGainExperience(source, exp, rawExp)
     if not source or source:isPlayer() then
     return exp
     end

     -- Soul regeneration
     local vocation = self:getVocation()
     if self:getSoul() < vocation:getMaxSoul() and exp >= self:getLevel() then
     soulCondition:setParameter(CONDITION_PARAM_SOULTICKS, vocation:getSoulGainTicks() * 1000)
     self:addCondition(soulCondition)
     end

     -- Apply experience stage multiplier
     exp = exp * Game.getExperienceStage(self:getLevel())

     -- Stamina modifier
     if configManager.getBoolean(configKeys.STAMINA_SYSTEM) then
     useStamina(self)

     local staminaMinutes = self:getStamina()
     if staminaMinutes > 2400 and self:isPremium() then
     exp = exp * 1.5
     elseif staminaMinutes <= 840 then
     exp = exp * 0.5
     end
     end

     -- Apply Extra Experience
     if self:getStorageValue(config.storage) >= os.time() then
     exp = exp * config.rate
     end

     return exp
    end


    eso es todo


    creditos: ninjalulz



    Ver perfil de usuario http://www.tibiaface.com

    2default tenia un problema pero lo solucione el Mar Jun 07, 2016 9:57 am

    cuando cambiaba el player me daba algunos errores pero lo solucione reemplazando solo las cosas q me hacian falta, aqui les dejo el scrip de player.lua que yo uso



    Código:
    -- Players cannot throw items on teleports if set to true
    local blockTeleportTrashing = false

    function Player:onBrowseField(position)
       return true
    end

    function Player:onLook(thing, position, distance)
       local description = 'You see '
       if thing:isItem() then
          if thing.actionid == 5640 then
             description = description .. 'a honeyflower patch.'
          elseif thing.actionid == 5641 then
             description = description .. 'a banana palm.'
          else
             description = description .. thing:getDescription(distance)
          end
       else
          description = description .. thing:getDescription(distance)
       end

       if self:getGroup():getAccess() then
          if thing:isItem() then
             description = string.format('%s\nItem ID: %d', description, thing.itemid)

             local actionId = thing.actionid
             if actionId ~= 0 then
                description = string.format('%s, Action ID: %d', description, actionId)
             end

             local uniqueId = thing:getAttribute(ITEM_ATTRIBUTE_UNIQUEID)
             if uniqueId > 0 and uniqueId < 65536 then
                description = string.format('%s, Unique ID: %d', description, uniqueId)
             end

             description = description .. '.'
             local itemType = thing:getType()

             local transformEquipId = itemType:getTransformEquipId()
             local transformDeEquipId = itemType:getTransformDeEquipId()
             if transformEquipId ~= 0 then
                description = string.format('%s\nTransforms to: %d (onEquip)', description, transformEquipId)
             elseif transformDeEquipId ~= 0 then
                description = string.format('%s\nTransforms to: %d (onDeEquip)', description, transformDeEquipId)
             end

             local decayId = itemType:getDecayId()
             if decayId ~= -1 then
                description = string.format('%s\nDecays to: %d', description, decayId)
             end
          elseif thing:isCreature() then
             local str = '%s\nHealth: %d / %d'
             if thing:getMaxMana() > 0 then
                str = string.format('%s, Mana: %d / %d', str, thing:getMana(), thing:getMaxMana())
             end
             description = string.format(str, description, thing:getHealth(), thing:getMaxHealth()) .. '.'
          end

          local position = thing:getPosition()
          description = string.format(
             '%s\nPosition: %d, %d, %d',
             description, position.x, position.y, position.z
          )

          if thing:isCreature() and thing:isPlayer() then
             description = string.format('%s\nIP: %s.', description, Game.convertIpToString(thing:getIp()))
          end
       end
       self:sendTextMessage(MESSAGE_INFO_DESCR, description)
    end

    function Player:onLookInBattleList(creature, distance)
       local description = 'You see ' .. creature:getDescription(distance)
       if self:getGroup():getAccess() then
          local str = '%s\nHealth: %d / %d'
          if creature:getMaxMana() > 0 then
             str = string.format('%s, Mana: %d / %d', str, creature:getMana(), creature:getMaxMana())
          end
          description = string.format(str, description, creature:getHealth(), creature:getMaxHealth()) .. '.'

          local position = creature:getPosition()
          description = string.format(
             '%s\nPosition: %d, %d, %d',
             description, position.x, position.y, position.z
          )

          if creature:isPlayer() then
             description = string.format('%s\nIP: %s.', description, Game.convertIpToString(creature:getIp()))
          end
       end
       self:sendTextMessage(MESSAGE_INFO_DESCR, description)
    end

    function Player:onLookInTrade(partner, item, distance)
       self:sendTextMessage(MESSAGE_INFO_DESCR, 'You see ' .. item:getDescription(distance))
    end

    function Player:onLookInShop(itemType, count)
       return true
    end

    function Player:onMoveItem(item, count, fromPosition, toPosition)
       if blockTeleportTrashing and toPosition.x ~= CONTAINER_POSITION then
          local thing = Tile(toPosition):getItemByType(ITEM_TYPE_TELEPORT)
          if thing then
             self:sendCancelMessage('Sorry, not possible.')
             self:getPosition():sendMagicEffect(CONST_ME_POFF)
             return false
          end
       end

       if isInArray({1714, 1715, 1716, 1717, 1738, 1740, 1741, 1747, 1748, 1749}, item.itemid) and item.actionid > 0 or item.actionid == 5640 then
          self:sendCancelMessage('You cannot move this object.')
          return false
       elseif item.itemid == 7466 then
          self:sendCancelMessage('You cannot move this object.')
          return false
       end

       if fromPosition.x == CONTAINER_POSITION and toPosition.x == CONTAINER_POSITION
             and item.itemid == 8710 and self:getItemCount(8710) == 2 and self:getStorageValue(Storage.RookgaardTutorialIsland.cockroachLegsMsgStorage) ~= 1 then
          self:sendTextMessage(MESSAGE_INFO_DESCR, 'Well done, you have enough cockroach legs! You should head back to Santiago with them. Climb the ladder to the north to exit.')
          self:setStorageValue(Storage.RookgaardTutorialIsland.cockroachLegsMsgStorage, 1)
          self:setStorageValue(Storage.RookgaardTutorialIsland.SantiagoNpcGreetStorage, 6)
       end
       return true
    end

    function Player:onMoveCreature(creature, fromPosition, toPosition)
       return true
    end

    function Player:onTurn(direction)
       return true
    end

    function Player:onTradeRequest(target, item)
       if isInArray({1738, 1740, 1747, 1748, 1749, 8766}, item.itemid) and item.actionid > 0 or item.actionid == 5640 then
          self:sendCancelMessage('Sorry, not possible.')
          return false
       end
       return true
    end

    function Player:onTradeAccept(target, item, targetItem)
       return true
    end

    local soulCondition = Condition(CONDITION_SOUL, CONDITIONID_DEFAULT)
    soulCondition:setTicks(4 * 60 * 1000)
    soulCondition:setParameter(CONDITION_PARAM_SOULGAIN, 1)

    local function useStamina(player)
       local staminaMinutes = player:getStamina()
       if staminaMinutes == 0 then
          return
       end

       local playerId = player:getId()
       local currentTime = os.time()
       local timePassed = currentTime - nextUseStaminaTime[playerId]
       if timePassed <= 0 then
          return
       end

       if timePassed > 60 then
          if staminaMinutes > 2 then
             staminaMinutes = staminaMinutes - 2
          else
             staminaMinutes = 0
          end
          nextUseStaminaTime[playerId] = currentTime + 120
       else
          staminaMinutes = staminaMinutes - 1
          nextUseStaminaTime[playerId] = currentTime + 60
       end
       player:setStamina(staminaMinutes)
    end

    local config = {
     rate = 2,
     storage = 200011,
    }

    function Player:onGainExperience(source, exp, rawExp)
       if not source or source:isPlayer() then
          return exp
       end

       -- Soul regeneration
       local vocation = self:getVocation()
       if self:getSoul() < vocation:getMaxSoul() and exp >= self:getLevel() then
          soulCondition:setParameter(CONDITION_PARAM_SOULTICKS, vocation:getSoulGainTicks() * 1000)
          self:addCondition(soulCondition)
       end

       -- Apply experience stage multiplier
       exp = exp * Game.getExperienceStage(self:getLevel())

       -- Stamina modifier
       if configManager.getBoolean(configKeys.STAMINA_SYSTEM) then
          useStamina(self)

          local staminaMinutes = self:getStamina()
          if staminaMinutes > 2400 and self:isPremium() then
             exp = exp * 1.5
          elseif staminaMinutes <= 840 then
             exp = exp * 0.5
          end
       end
     -- Apply Extra Experience
     if self:getStorageValue(config.storage) >= os.time() then
     exp = exp * config.rate
     end
       return exp
    end

    function Player:onLoseExperience(exp)
       return exp
    end

    function Player:onGainSkillTries(skill, tries)
       if APPLY_SKILL_MULTIPLIER == false then
          return tries
       end

       if skill == SKILL_MAGLEVEL then
          return tries * configManager.getNumber(configKeys.RATE_MAGIC)
       end
       return tries * configManager.getNumber(configKeys.RATE_SKILL)
    end

    Ver perfil de usuario

    Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje (Página 1 de 1.)

    Permisos de este foro:
    No puedes responder a temas en este foro.

     

    BienvenidosTibiaFace es una comunidad de Open Tibia. Para participar debes estar registrado (click para Regístrate).