I would like to add function to remove cash each second when i wear this ring. Also it should take cash when the ring is equipped.
Lua:
-- Original script by Molinero -- The Super-Ultimate Transformation Ring --
-- Super Vocation Transformation script made by Arthur, aka artofwork --
-- You can assign an item to this script and the benifits the item will bring are --
-- A totally new vocation for each current vocation, check your vocations.xml for the new vocations --
-- Independent Skills and Magic Level Boost for each new vocation --
-- Auto Mana Shield for new mage vocations, Auto Super Haste for all new vocations --
-- Independent Auto HP and Mana gain rates for each new vocation --
-- For each new vocation the new vocation recieves a new outfit and has an independent special effect added to help idenify the new vocation --
-- This script is set to inifnite, but can be set to have mana taken from the player, when mana runs out the item will be destroyed --
local storage = 18009 -- storage value for the vocation transformation --
local sorcerervoc = 20 -- 9 number is the vocation id of an epic master sorcerer in vocations.xml --
local druidvoc = 21 -- 10 number is the vocation id of a epic elder druid in vocations.xml --
local paladinvoc = 22 -- 11 number is the vocation id of a epic royal paladin in vocations.xml --
local knightvoc = 23 -- 12 number is the vocation id of an epic elite knight in vocations.xml --
local svoc = 5
local dvoc = 6
local pvoc = 7
local kvoc = 8
local outfitSorc = -- sorcerer new outfit after transformation --
{
lookType = 340,
lookHead = 0,
lookBody = 0,
lookLegs = 0,
lookFeet = 0,
lookAddons = 0
}
local outfitDruid = -- druid new outfit after transformation --
{
lookType = 339,
lookHead = 0,
lookBody = 0,
lookLegs = 0,
lookFeet = 0,
lookAddons = 0
}
local outfitPaladin = -- paladin new outfit after transformation --
{
lookType = 342,
lookHead = 0,
lookBody = 0,
lookLegs = 0,
lookFeet = 0,
lookAddons = 0
}
local outfitKnight = -- knight new outfit after transformation --
{
lookType = 344,
lookHead = 0,
lookBody = 0,
lookLegs = 0,
lookFeet = 0,
lookAddons = 0
}
local cointype = 2160 -- Id of the coin the spell will use (2148 = gold coin, 2152 = platinum coin, 2160 = crystal coin) --
local tbcw = 2000 -- coin wasting time interval (miliseconds) --
local ncws = 1 -- number of coins used up during time interval --
local ncni = 20 -- number of coins needed to trigger the transformation --
local stcn = 20 -- number of coins needed to execute script (must be higher than ncni value) --
local warn = 1 -- warns player when runing short on coins, 1 = yes --
local cwar = 20 -- number of coins that triggers the warnings --
-- warning do not modify these settings, unless you want to take mana from player --
local manatimeinterval = 1000 -- time interval (miliseconds) --
local numberofmanaused = 0 -- number of mana used or added up during time interval --
local mananeededtoexec = 0 -- number of mana needed to execute script, keep this setting this 0 --
local warnplaya = 1 -- warns player when runing out of mana, 1 = yes --
local numberofmanatriggerwarn = 20 -- number of mana that triggers the warnings --
local sorcerfirsteffect = CONST_ME_ENERGYAREA
local sorcersecondeffect = CONST_ME_BLOCKHIT
local sorcerflingeffect = CONST_ANI_SMALLHOLY
local sorcerlandeffect = CONST_ME_TELEPORT
local sorcerringwaste = CONST_ME_FIREWORK_YELLOW
local druidfirsteffect = CONST_ME_ICEATTACK
local druidsecondeffect = CONST_ME_ICETORNADO
local druidflingeffect = CONST_ME_ICETORNADO
local druidlandeffect = CONST_ME_ICETORNADO
local druidringwaste = CONST_ME_FIREWORK_BLUE
local knightfirsteffect = CONST_ME_EXPLOSIONAREA
local knightsecondeffect = CONST_ME_FIREAREA
local knightflingeffect = CONST_ANI_FIRE
local knightlandeffect = CONST_ME_FIREWORK_RED
local knightringwaste = CONST_ME_FIREWORK_RED
local paladinfirsteffect = CONST_ME_YELLOW_RINGS
local paladinsecondeffect = CONST_ME_BLOCKHIT
local paladinflingeffect = CONST_ANI_SMALLHOLY
local paladinlandeffect = CONST_ME_HOLYAREA
local paladinringwaste = CONST_ME_FIREWORK_YELLOW
-- skills of the sorcerer after transformation --
local sorcerercondition = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(sorcerercondition, CONDITION_PARAM_TICKS, -1) -- the -1 is to allow conditions to run forever -
setConditionParam(sorcerercondition, CONDITION_PARAM_SKILL_SHIELD, 20) -- add 50 shielding to current shield skill --
setConditionParam(sorcerercondition, CONDITION_PARAM_STAT_MAGICLEVEL, 20) -- add 100 levels of magic to the player's current magic level --
setConditionParam(sorcerercondition, CONDITION_PARAM_STAT_MAXHEALTH, 100) -- add 100 health to the player's current hp --
setConditionParam(sorcerercondition, CONDITION_PARAM_STAT_MAXMANA, 5000) -- add 5000 mana to the players current mana --
-- skills of the druid after transformation --
local druidcondition = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(druidcondition, CONDITION_PARAM_TICKS, -1)
setConditionParam(druidcondition, CONDITION_PARAM_SKILL_SHIELD, 20)
setConditionParam(druidcondition, CONDITION_PARAM_STAT_MAGICLEVEL, 20)
setConditionParam(druidcondition, CONDITION_PARAM_STAT_MAXHEALTH, 500)
setConditionParam(druidcondition, CONDITION_PARAM_STAT_MAXMANA, 4500)
-- skills of the paladin after transformation --
local paladincondition = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(paladincondition, CONDITION_PARAM_TICKS, -1)
setConditionParam(paladincondition, CONDITION_PARAM_SKILL_DISTANCE, 35)
setConditionParam(paladincondition, CONDITION_PARAM_SKILL_SHIELD, 30)
setConditionParam(paladincondition, CONDITION_PARAM_STAT_MAGICLEVEL, 5)
setConditionParam(paladincondition, CONDITION_PARAM_STAT_MAXHEALTH, 2500)
setConditionParam(paladincondition, CONDITION_PARAM_STAT_MAXMANA, 2500)
-- skills of the knight after transformation --
local knightcondition = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(knightcondition, CONDITION_PARAM_TICKS, -1)
setConditionParam(knightcondition, CONDITION_PARAM_SKILL_FIST, 20)
setConditionParam(knightcondition, CONDITION_PARAM_SKILL_CLUB, 20)
setConditionParam(knightcondition, CONDITION_PARAM_SKILL_SWORD, 20)
setConditionParam(knightcondition, CONDITION_PARAM_SKILL_AXE, 20)
setConditionParam(knightcondition, CONDITION_PARAM_SKILL_SHIELD, 25)
setConditionParam(knightcondition, CONDITION_PARAM_STAT_MAGICLEVEL, 3)
setConditionParam(knightcondition, CONDITION_PARAM_STAT_MAXHEALTH, 4000)
setConditionParam(knightcondition, CONDITION_PARAM_STAT_MAXMANA, 1000)
-- settings for health and mana regeneration per second --
local sorcererregen = createConditionObject(CONDITION_REGENERATION)
setConditionParam(sorcererregen, CONDITION_PARAM_TICKS, -1)
setConditionParam(sorcererregen, CONDITION_PARAM_HEALTHGAIN, 50) -- the players health will regenerate at 100 hp per second --
setConditionParam(sorcererregen, CONDITION_PARAM_MANAGAIN, 100) -- the players mana will regenerate at 500 mana per second --
local druidregen = createConditionObject(CONDITION_REGENERATION)
setConditionParam(druidregen, CONDITION_PARAM_TICKS, -1)
setConditionParam(druidregen, CONDITION_PARAM_HEALTHGAIN, 50)
setConditionParam(druidregen, CONDITION_PARAM_MANAGAIN, 100)
local paladinregen = createConditionObject(CONDITION_REGENERATION)
setConditionParam(paladinregen, CONDITION_PARAM_TICKS, -1)
setConditionParam(paladinregen, CONDITION_PARAM_HEALTHGAIN, 75)
setConditionParam(paladinregen, CONDITION_PARAM_MANAGAIN, 75)
local knightregen = createConditionObject(CONDITION_REGENERATION)
setConditionParam(knightregen, CONDITION_PARAM_TICKS, -1)
setConditionParam(knightregen, CONDITION_PARAM_HEALTHGAIN, 100)
setConditionParam(knightregen, CONDITION_PARAM_MANAGAIN, 50)
local condition2 = createConditionObject(CONDITION_HASTE) -- Auto super haste --
setConditionParam(condition2, CONDITION_PARAM_TICKS, -1)
setConditionFormula(condition2, 2.5, 0, 3.0, 0)
local condition3 = createConditionObject(CONDITION_MANASHIELD) -- Auto mana shield --
setConditionParam(condition3, CONDITION_PARAM_TICKS, -1)
function superform1(param)
if param.crca == 1 then
local cointype = getPlayerMaxMana(param.cid)
local pos = getCreaturePosition(param.cid)
local voca = getPlayerVocation(param.cid)
local superform1_pos = {{x = pos.x, y = pos.y - 3, z = pos.z, stackpos = 255},{x = pos.x, y = pos.y + 3, z = pos.z, stackpos = 255},{x = pos.x - 3, y = pos.y, z = pos.z, stackpos = 255},{x = pos.x + 3, y = pos.y, z = pos.z, stackpos = 255},{x = pos.x - 2, y = pos.y - 2, z = pos.z, stackpos = 255},{x = pos.x + 2, y = pos.y - 2, z = pos.z, stackpos = 255},{x = pos.x + 2, y = pos.y + 2, z = pos.z, stackpos = 255},{x = pos.x - 2, y = pos.y + 2, z = pos.z, stackpos = 255}}
if voca == 20 then
doSendMagicEffect(pos, sorcerfirsteffect)
doSendMagicEffect(pos, sorcersecondeffect)
for i = 1, 8 do
doSendDistanceShoot(pos, superform1_pos[i], sorcerflingeffect)
doSendMagicEffect(superform1_pos[i], sorcerlandeffect)
end
doSetCreatureOutfit(param.cid, outfitSorc, -1) -- set new vocation outfit --
doAddCondition(param.cid, sorcerercondition) -- add skills and magic level to new vocation -
doAddCondition(param.cid, condition3) -- add auto mana shield to new vocation --
doAddCondition(param.cid, sorcererregen) -- add regeneration to new vocation --
else if voca == 21 then
doSendMagicEffect(pos, druidfirsteffect)
doSendMagicEffect(pos, druidsecondeffect)
for i = 1, 8 do
doSendDistanceShoot(pos, superform1_pos[i], druidflingeffect)
doSendMagicEffect(superform1_pos[i], druidlandeffect)
end
doSetCreatureOutfit(param.cid, outfitDruid, -1) -- set new vocation outfit --
doAddCondition(param.cid, druidcondition) -- add skills and magic level to new vocation --
doAddCondition(param.cid, condition3) -- add auto mana shield to new vocation --
doAddCondition(param.cid, druidregen) -- add regeneration to new vocation --
else if voca == 22 then
doSendMagicEffect(pos, paladinfirsteffect)
doSendMagicEffect(pos, paladinsecondeffect)
for i = 1, 8 do
doSendDistanceShoot(pos, superform1_pos[i], paladinflingeffect)
doSendMagicEffect(superform1_pos[i], paladinlandeffect)
end
doSetCreatureOutfit(param.cid, outfitPaladin, -1) -- set new vocation outfit --
doAddCondition(param.cid, paladincondition) -- add skills and magic level to new vocation --
doAddCondition(param.cid, paladinregen) -- add regeneration to new vocation --
else if voca == 23 then
doSendMagicEffect(pos, knightfirsteffect)
doSendMagicEffect(pos, knightsecondeffect)
for i = 1, 8 do
doSendDistanceShoot(pos, superform1_pos[i], knightflingeffect)
doSendMagicEffect(superform1_pos[i], knightlandeffect)
end
doSetCreatureOutfit(param.cid, outfitKnight, -1) -- set new vocation outfit --
doAddCondition(param.cid, knightcondition) -- add skills and magic level to new vocation --
doAddCondition(param.cid, knightregen) -- add regeneration to new vocation --
end
end
end
end
doAddCondition(param.cid, condition2) -- add super haste to all new vocations --
doCreatureAddHealth(param.cid, getCreatureMaxHealth(param.cid))
doPlayerAddMana(param.cid, getCreatureHealth(param.cid))
doPlayerRemoveItem(param.cid, cointype, ncni)
param.crcb = 1
param.voca = voca
setPlayerStorageValue(param.cid, 50781, 1)
addEvent(superform2, 500, param)
end
end
function superform2(param)
if param.crca == 1 and param.crcb == 1 and isCreature(param.cid) == TRUE and getPlayerStorageValue(param.cid, 50781) == 1 then
local pos = getCreaturePosition(param.cid)
if param.voca == 20 then
doSendMagicEffect(pos, sorcerringwaste)
else if param.voca == 21 then
doSendMagicEffect(pos, druidringwaste)
else if param.voca == 22 then
doSendMagicEffect(pos, paladinringwaste)
else if param.voca == 23 then
doSendMagicEffect(pos, knightringwaste)
end
end
end
end
local manaleft = getPlayerMana(param.cid)
if manaleft < numberofmanaused then -- this is a fail safe if the mana becomes a negative value or if u assign a + or - to it then it will destroy the ring, im sure a better routine can be written for this --
param.crca = 0
param.crcb = 0
setPlayerStorageValue(param.cid, 50781, 0) -- removes storage value of transformation --
old = getPlayerStorageValue(cid, storage) -- get players old vocation and assign it to old --
doPlayerSetVocation(cid,old) -- set players vocation using old's value --
setPlayerStorageValue(cid, 18009, 0) -- removes storage value --
doPlayerRemoveItem(param.cid, 7708) -- destroys the ring --
local pos = getCreaturePosition(param.cid)
local superform2_pos = {{x = pos.x, y = pos.y - 3, z = pos.z, stackpos = 255},{x = pos.x, y = pos.y + 3, z = pos.z, stackpos = 255},{x = pos.x - 3, y = pos.y, z = pos.z, stackpos = 255},{x = pos.x + 3, y = pos.y, z = pos.z, stackpos = 255},{x = pos.x - 2, y = pos.y - 2, z = pos.z, stackpos = 255},{x = pos.x + 2, y = pos.y - 2, z = pos.z, stackpos = 255},{x = pos.x + 2, y = pos.y + 2, z = pos.z, stackpos = 255},{x = pos.x - 2, y = pos.y + 2, z = pos.z, stackpos = 255}}
-- removes the outfit, attributes, super haste, mana shield, hp/mp regeneration --
doRemoveCondition(param.cid, CONDITION_OUTFIT)
doRemoveCondition(param.cid, CONDITION_ATTRIBUTES)
doRemoveCondition(param.cid, CONDITION_HASTE)
doRemoveCondition(param.cid, CONDITION_MANASHIELD)
doRemoveCondition(param.cid, CONDITION_REGENERATION)
if (isPlayer(param.cid) == FALSE) then
param.crca = 0
param.crcb = 0
setPlayerStorageValue(param.cid, 50781, 0) -- removes storage value of transformation --
old = getPlayerStorageValue(cid, storage) -- get players old vocation and assign it to old --
doPlayerSetVocation(cid,old) -- set players vocation using old's value --
setPlayerStorageValue(cid, 18009, 0) -- removes storage value --
end
if param.voca == 20 then
doSendMagicEffect(pos, sorcerfirsteffect)
doSendMagicEffect(pos, sorcersecondeffect)
for i = 1, 8 do
doSendDistanceShoot(pos, superform2_pos[i], sorcerflingeffect)
doSendMagicEffect(superform2_pos[i], sorcerlandeffect)
end
else if param.voca == 21 then
doSendMagicEffect(pos, druidfirsteffect)
doSendMagicEffect(pos, druidsecondeffect)
for i = 1, 8 do
doSendDistanceShoot(pos, superform2_pos[i], druidflingeffect)
doSendMagicEffect(superform2_pos[i], druidlandeffect)
end
else if param.voca == 22 then
doSendMagicEffect(pos, paladinfirsteffect)
doSendMagicEffect(pos, paladinsecondeffect)
for i = 1, 8 do
doSendDistanceShoot(pos, superform2_pos[i], paladinflingeffect)
doSendMagicEffect(superform2_pos[i], paladinlandeffect)
end
else if param.voca == 23 then
doSendMagicEffect(pos, knightfirsteffect)
doSendMagicEffect(pos, knightsecondeffect)
for i = 1, 8 do
doSendDistanceShoot(pos, superform2_pos[i], knightflingeffect)
doSendMagicEffect(superform2_pos[i], knightlandeffect)
end
end
end
end
end
else
addEvent(superform2, manatimeinterval, param) -- call superform2 based on manatimeinterval settings --
end
end
end
function onEquip(cid, item, slot)
local param = {cid = cid, item = item, slot = slot}
local currentmana = getPlayerMana(cid) -- get players current mana --
if currentmana >= mananeededtoexec then -- check to see if the players current mana is greater then or equal to mana needed to transform player --
local temp = getPlayerVocation(cid) -- get players voc and store it in temp --
if temp == 9 then
doPlayerSetVocation(cid,svoc) -- this will prevent people from loggin out and logging in with their new vocation being saved
else if temp == 10 then
doPlayerSetVocation(cid,dvoc)
else if temp == 11 then
doPlayerSetVocation(cid,pvoc)
else if temp == 12 then
doPlayerSetVocation(cid,kvoc)
end
end
end
end
local tempvoc = getPlayerVocation(cid) -- get players voc and store it in temp --
setPlayerStorageValue(cid, storage, getPlayerVocation(cid)) -- store players voc in storage for later use --
if (tempvoc == 1 or tempvoc == 5) then -- these if and else if statements will check the current voc prior to transformation --
doPlayerSetVocation(cid,sorcerervoc) -- if the players vocation == tempvoc then a new vocation will be assigned to the player --
else if (tempvoc == 2 or tempvoc == 6) then
doPlayerSetVocation(cid,druidvoc)
else if (tempvoc == 3 or tempvoc == 7) then
doPlayerSetVocation(cid,paladinvoc)
else if (tempvoc == 4 or tempvoc == 8) then
doPlayerSetVocation(cid,knightvoc)
end
end
end
end
local pos = getPlayerPosition(cid)
doCreatureSay(cid, "Rutilus Vox", TALKTYPE_ORANGE_1) -- do animated text while transformation takes place --
param.crca = 1
addEvent(superform1, 500, param) -- call the function superform1 immediately --
end
return TRUE
end
function onDeEquip(cid, item, slot)
if isPlayer(cid) and getPlayerStorageValue(cid, 50781) == 1 then
old = getPlayerStorageValue(cid, storage) -- get players old vocation and assign it to old --
doPlayerSetVocation(cid,old) -- set players vocation using olds value --
setPlayerStorageValue(cid, 18009, 0) -- remove vocation
-- removes the outfit, attributes, super haste, mana shield, hp/mp regeneration --
doTransformItem(item.uid, item.itemid - 11)
doRemoveCondition(cid, CONDITION_OUTFIT)
doRemoveCondition(cid, CONDITION_ATTRIBUTES)
doRemoveCondition(cid, CONDITION_HASTE)
doRemoveCondition(cid, CONDITION_MANASHIELD)
doRemoveCondition(cid, CONDITION_REGENERATION)
local temptwo = getPlayerVocation(cid) -- get players voc and store it in temp --
if temptwo == 20 then
doPlayerSetVocation(cid,svoc) -- just incase they die and loose the ring they will not keep the new voc -
else if temptwo == 21 then
doPlayerSetVocation(cid,dvoc)
else if temptwo == 22 then
doPlayerSetVocation(cid,pvoc)
else if temptwo == 23 then
doPlayerSetVocation(cid,kvoc)
end
end
end
end
local pos = getCreaturePosition(cid)
doCreatureSay(cid, "Aufero Meus Donum", TALKTYPE_ORANGE_1) -- do animated text while de-transformation takes place --
setPlayerStorageValue(cid, 50781, 0) -- removes storage value of transformation --
local voca = getPlayerVocation(cid)
local superform0_pos = {{x = pos.x, y = pos.y - 3, z = pos.z, stackpos = 255},{x = pos.x, y = pos.y + 3, z = pos.z, stackpos = 255},{x = pos.x - 3, y = pos.y, z = pos.z, stackpos = 255},{x = pos.x + 3, y = pos.y, z = pos.z, stackpos = 255},{x = pos.x - 2, y = pos.y - 2, z = pos.z, stackpos = 255},{x = pos.x + 2, y = pos.y - 2, z = pos.z, stackpos = 255},{x = pos.x + 2, y = pos.y + 2, z = pos.z, stackpos = 255},{x = pos.x - 2, y = pos.y + 2, z = pos.z, stackpos = 255}}
if voca == 1 or voca == 5 then
doSendMagicEffect(pos, sorcerfirsteffect)
doSendMagicEffect(pos, sorcersecondeffect)
for i = 1, 8 do
doSendDistanceShoot(pos, superform0_pos[i], sorcerflingeffect)
doSendMagicEffect(superform0_pos[i], sorcerlandeffect)
end
else if voca == 2 or voca == 6 then
doSendMagicEffect(pos, druidfirsteffect)
doSendMagicEffect(pos, druidsecondeffect)
for i = 1, 8 do
doSendDistanceShoot(pos, superform0_pos[i], druidflingeffect)
doSendMagicEffect(superform0_pos[i], druidlandeffect)
end
else if voca == 3 or voca == 7 then
doSendMagicEffect(pos, paladinfirsteffect)
doSendMagicEffect(pos, paladinsecondeffect)
for i = 1, 8 do
doSendDistanceShoot(pos, superform0_pos[i], paladinflingeffect)
doSendMagicEffect(superform0_pos[i], paladinlandeffect)
end
else if voca == 4 or voca == 8 then
doSendMagicEffect(pos, knightfirsteffect)
doSendMagicEffect(pos, knightsecondeffect)
for i = 1, 8 do
doSendDistanceShoot(pos, superform0_pos[i], knightflingeffect)
doSendMagicEffect(superform0_pos[i], knightlandeffect)
end
end
end
end
end
end
end