What's new

Actions Smithing, czyli kowalstwo

Status
Not open for further replies.

Oskar

Forum friend
Joined
Jan 24, 2009
Messages
2,256
Reaction score
331
1. Autor - Oskar

2. Oryginalny temat -


3. Opis - Pomy?la?em, ?e m?g?by si? komu? przyda?. Filmik:

Oraz opis configu:
[lua]local smithingSkill = {
experienceStorage = 1004,
[0] = 0,
[1] = 20,
[2] = 80,
[3] = 260,
[4] = 640,
[5] = 1300,
[6] = 2320,
[7] = 3780,
[8] = 5760,
[9] = 8340,
[10] = 11600
}[/lua]
To poziomy w kowalstwie. Osobi?cie nie zmienia?bym tutaj zbyt wiele, gdy? dziesi?? poziom?w jak najbardziej wystarczy.
[lua]{it = {9971,5904}, c = {15,2}, win = {2466}, skill = 4}, --golden armor[/lua]
Tabelka it to ID itemk?w potrzebnych do wytworzenia czegokolwiek.
Za? tabelka c to ich wymagana ilo??, w tym przypadku potrzeba 15 sztuk itemu o id 9971 oraz 2 sztuki 5904.
win to nic innego jak ko?cowy rezultat naszego uderzania m?otkiem. Mo?na da? kilka przedmiot?w, skrypt wylosuje jeden z nich.
skill to potrzebny skill by w og?le m?c wykuwa? z tych materia??w, kt?re po?o?ymy na kowadle.
Reszta niezmienna.

4. Klient - Bazowo pisa?em go pod 8.54, silnik 0.3.6pl1, ale powinien dzia?a? na innych.

5. Skrypt
Umieszczamy gada w data/actions/scripts:
[lua]
-- ### SKRYPT WYKONANY PRZEZE MNIE DLA (http://oTibia.pl) ####
local smithingSkill = {
experienceStorage = 1004,
[0] = 0,
[1] = 20,
[2] = 80,
[3] = 260,
[4] = 640,
[5] = 1300,
[6] = 2320,
[7] = 3780,
[8] = 5760,
[9] = 8340,
[10] = 11600
}

local config = {
items = {
{it = {13709,13727,9971,10605}, c = {10,50,5,10}, win = {2498}, skill = 6}, --royal helmet
{it = {13709,9811,9971,9930}, c = {8,1,2,5}, win = {2477}, skill = 4}, --knight legs
{it = {5889,5887,5920,7760}, c = {10,10,100,25}, win = {2492}, skill = 7}, --dsm
{it = {7393,13340,6500,5906}, c = {2,10,25,2}, win = {2520}, skill = 8}, --demon shield
{it = {7399,10572,5882}, c = {1,10,5}, win = {2516}, skill = 4}, --dragon shield
{it = {10572,11316,5880}, c = {1,10,4}, win = {2515}, skill = 1}, --guardian shield
{it = {13709,13713,5892}, c = {2,2,2}, win = {2476}, skill = 3}, --knight armor
{it = {10574,2237,5883}, c = {10,5,30}, win = {7463,7457,7464,7458}, skill = 2}, --mammoth fur set
{it = {5913,5911,10574}, c = {10,5,2}, win = {8892}, skill = 0}, --ethno coat
{it = {7759,13710,13713}, c = {50,25,10}, win = {7455}, skill = 9}, --mythril axe
{it = {5913,10574}, c = {25,20}, win = {8872}, skill = 1}, --belted cape
{it = {9971,5904}, c = {15,2}, win = {2466}, skill = 4}, --golden armor
{it = {13709,10561}, c = {2,10}, win = {2459}, skill = 0}, --iron helmet
{it = {13709,9811}, c = {4,2}, win = {2647}, skill = 0}, --plate legs
{it = {13710,13713}, c = {20,50}, win = {2447}, skill = 8}, --twin axe
{it = {13713}, c = {2}, win = {2457,8601,2513}, skill = 0}, --steel helmet,steel shield,steel axe
{it = {13709}, c = {3}, win = {2463}, skill = 0}, --plate armor
}
}

local function getPlayerSmithingSkillLevel(experience)
for i = #smithingSkill, 1, -1 do
if experience >= smithingSkill then
return i
end
end
return 0
end

local function doRemoveItemsFromAnvil(pos, itemTable)
for stackpos = 1, 255 do
pos.stackpos = stackpos
local item_ = getThingFromPos(pos)
if itemTable[item_.itemid] then
local itemCount = itemTable[item_.itemid].requiedCount == 0 and 0 or math.max(1, math.min(itemTable[item_.itemid].requiedCount, (item_.type ~= 0 and item_.type or 1)))
doRemoveItem(item_.uid, itemCount)
itemTable[item_.itemid].requiedCount = itemTable[item_.itemid].requiedCount - itemCount
end
end
return false
end

function onUse(cid, item, frompos, itemEx, topos)
local experience = math.max(0, getCreatureStorage(cid, smithingSkill.experienceStorage))
local skill_, anvil = getPlayerSmithingSkillLevel(experience), getTileItemById(topos, 2555)
if anvil.uid == 0 then
return false
end
for i = 1, #config.items do
local t, items_, x, y, anvilPosition = 0, {}, 'You have successfully created ', '', topos
for v = 1, #config.items.it do
for stackpos = 1, 255 do
anvilPosition.stackpos = stackpos
local item_ = getThingFromPos(anvilPosition)
if item_.itemid == config.items.it[v] and skill_ >= config.items.skill then
items_[item_.itemid] = {count = (items_[item_.itemid] and items_[item_.itemid].count or 0) + (item_.type ~= 0 and item_.type or 1), requiedCount = config.items.c[v]}
end
end
end
for k, v in pairs(items_) do
if v.count >= v.requiedCount then
y = y .. v.requiedCount .. ' ' .. getItemInfo(k).name .. (v.requiedCount > 1 and 's' or '') .. ', '
t = t + 1
end
end
if t == #config.items.it then
local randomExperienceValue = math.random((t > 0 and t or 1))
doCreatureSetStorage(cid, smithingSkill.experienceStorage, experience + randomExperienceValue)
local reward = config.items.win[math.random(#config.items.win)]
y = string.sub(y, 1, y:len() - 2) .. '.'
x = x .. getItemInfo(reward).name .. ' at the cost of ' .. y
doRemoveItemsFromAnvil(anvilPosition, items_)
doSendAnimatedText(topos, 'BAM! BAM!', COLOR_GREY)
if math.random(math.max(skill_, 1) * smithingSkill[math.max(skill_, 1)] * 5) <= experience + randomExperienceValue then
doCreateItem(reward, 1, topos)
eff = CONST_ME_BLOCKHIT
else
eff = CONST_ME_POFF
x = 'Sorry, but failed.'
end
doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, x)
doSendMagicEffect(topos, eff)

local newSkillLevel = getPlayerSmithingSkillLevel(experience + randomExperienceValue)
if newSkillLevel > skill_ then
if newSkillLevel < 10 then
doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, 'You advanced in smithing ['..newSkillLevel..'].')
else
doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, 'You advanced on masterplate!')
end
doSendMagicEffect(getThingPos(cid), CONST_ME_MORTAREA)
end
local experienceToLevelRequied = smithingSkill[newSkillLevel + 1] - (experience + randomExperienceValue)
local finalMessage = 'You get '..randomExperienceValue..' point'..(randomExperienceValue > 1 and 's' or '')..' of experience. You currently have '..(experience + randomExperienceValue)..' point'..((experience + randomExperienceValue) > 1 and 's' or '')..' of experience'
if newSkillLevel < 9 then
return doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, finalMessage..'. For advancement on the level '..(newSkillLevel + 1)..' you need '..experienceToLevelRequied..' point'..(experienceToLevelRequied > 1 and 's' or '')..' of experience.')
elseif newSkillLevel == 9 then
return doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, finalMessage..', to obtain a master level you need '..experienceToLevelRequied..' point'..(experienceToLevelRequied > 1 and 's' or '')..' of experience.')
end
return doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, finalMessage)
elseif i == #config.items then
if skill_ < config.items.skill then
return doPlayerSendCancel(cid, 'Your smithing level is too low. The required level is '..config.items.skill..'.')
end
return doPlayerSendCancel(cid, 'No required materials.')
end
end
return false
end[/lua]
Za? do actions.xml:
[xml]<action itemid="2321" event="script" value="smithing.lua"/>[/xml]
 

sprytnaaaaa

Advanced User
Joined
Apr 20, 2011
Messages
342
Reaction score
4
Odp: Smithing, czyli kowalstwo

ciekawy skrypt gdyby? bardziej rozpisa? dla innych ja go ju? testowa?em dzia?a polecam dzi?ki oskar :D postara?e? si? 10/10 :]
 
Status
Not open for further replies.
Top