oshrigames
Active Member
Original post:
not sure what i did wrong but, here it go.
i'm use TFS 1.2 protocol 10.98.
i've configure the crystal to ID: 18413 (blue crystal shard)
and to hit it with registered ID: 2557 (Hammer)
now, when i hit it, i get this
"You need smithing level 1 for this combination"
ive change from 1 to 0 and still can't and now tell me i need level 0 to combination.
so here the mess that ive done.
and the code that you provied i placed in folder data/action/scripts/custom.
PS: ive made sure the position of anvilPos, materialPos and rewardPos.
are correct and as for the moment im not using Zbizu's UISS.
and heres my Player.lua
i'd like to understand the issue so i can implement this type of Custom Skill for smithing, mining, harvesting and few more on my own.
once i get one going on i can make out the rest by myself.
Action - [TFS 1.2+] Simple Smithing Skill w/ Options
First of all, I know I'm not a good scripter myself, but I made this and I wanted to share it. Requirements: CODEX NG's Spell Experience system: Player - Spell Experience - 1.2 Optional: Zbizu's UISS: CreatureEvent - [TFS 1.1] Ultimate item stat system (elements, skills, exp, loot and more)...
otland.net
not sure what i did wrong but, here it go.
i'm use TFS 1.2 protocol 10.98.
i've configure the crystal to ID: 18413 (blue crystal shard)
and to hit it with registered ID: 2557 (Hammer)
now, when i hit it, i get this
"You need smithing level 1 for this combination"
ive change from 1 to 0 and still can't and now tell me i need level 0 to combination.
so here the mess that ive done.
Lua:
<!-- Smith -->
<action itemid="2557" script="custom/smith.lua" />
<action actionid="15019" script="custom/smith.lua" />
and the code that you provied i placed in folder data/action/scripts/custom.
PS: ive made sure the position of anvilPos, materialPos and rewardPos.
are correct and as for the moment im not using Zbizu's UISS.
and heres my Player.lua
Lua:
function Player:onBrowseField(position)
return true
end
function Player:onLook(thing, position, distance)
local description = "You see " .. thing:getDescription(distance)
if self:getGroup():getAccess() then
if thing:isItem() then
description = string.format("%s\nItem ID: %d", description, thing:getId())
local actionId = thing:getActionId()
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
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() then
if thing:isPlayer() then
description = string.format("%s\nIP: %s.", description, Game.convertIpToString(thing:getIp()))
end
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, fromCylinder, toCylinder)
if item:getActionId() == CURSED_CHESTS_AID then return false 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)
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
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
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
function Player:getCustomSkill(storage)
return self:getStorageValue(storage)
end
function Player:addCustomSkill(skillName, storage)
local skillStorage = math.max(10, self:getStorageValue(storage))
local skillTries = math.max(0, self:getStorageValue(storage + 1))
self:setStorageValue(storage, skillStorage + 1)
self:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You advanced to " .. string.lower(skillName) .. " level "..self:getCustomSkill(storage)..".")
self:setStorageValue(storage + 1, 0)
end
function Player:addCustomSkillTry(skillName, storage)
local skillStorage = math.max(10, self:getStorageValue(storage))
local skillTries = math.max(0, self:getStorageValue(storage + 1))
self:setStorageValue(storage + 1, skillTries + 1)
if skillTries > math.floor(20 * math.pow(1.1, (skillStorage - 11)) / 10) then
self:addCustomSkill(skillName, storage)
end
end
function Player:getCustomSkillPercent(storage)
local skillStorage = math.max(10, self:getStorageValue(storage))
local skillTries = math.max(0, self:getStorageValue(storage + 1))
local triesNeeded = math.floor(20 * math.pow(1.1, (skillStorage - 11)) / 10)
local percent = math.floor(100 * (1 - skillTries / triesNeeded))
if percent > 1 and percent <= 100 then
return percent
else
percent = 1
return percent
end
end
-- base Custom Skill.
function Player:getCustomSkill(storage)
return self:getStorageValue(storage)
end
function Player:addCustomSkill(skillName, storage)
local skillStorage = math.max(10, self:getStorageValue(storage))
local skillTries = math.max(0, self:getStorageValue(storage + 1))
self:setStorageValue(storage, skillStorage + 1)
self:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You advanced to " .. string.lower(skillName) .. " level "..self:getCustomSkill(storage)..".")
self:setStorageValue(storage + 1, 0)
end
function Player:addCustomSkillTry(skillName, storage)
local skillStorage = math.max(10, self:getStorageValue(storage))
local skillTries = math.max(0, self:getStorageValue(storage + 1))
self:setStorageValue(storage + 1, skillTries + 1)
if skillTries > math.floor(20 * math.pow(1.1, (skillStorage - 11)) / 10) then
self:addCustomSkill(skillName, storage)
end
end
function Player:getCustomSkillPercent(storage)
local skillStorage = math.max(10, self:getStorageValue(storage))
local skillTries = math.max(0, self:getStorageValue(storage + 1))
local triesNeeded = math.floor(20 * math.pow(1.1, (skillStorage - 11)) / 10)
local percent = math.floor(100 * (1 - skillTries / triesNeeded))
if percent > 1 and percent <= 100 then
return percent
else
percent = 1
return percent
end
end
i'd like to understand the issue so i can implement this type of Custom Skill for smithing, mining, harvesting and few more on my own.
once i get one going on i can make out the rest by myself.