Ir para conteúdo

Posts Recomendados

Boas pessoal eu ja crie 2 promotion novas! mas crie mais 2 porque necessitei e quando faço alteraçao para a promoçao nova as spells, armas todo isso deixa de funcionar... vou colocar aqui os meus scrpits para ver se conseguem detectar os erros... ja confirmei os scripts um montao de vezes!

 

XML/Vocations.xml

 

<?xml version="1.0" encoding="UTF-8"?>

<vocations>

<vocation id="0" name="None" description="none" gaincap="5" gainhp="5" gainmana="5" gainhpticks="6" gainhpamount="1" gainmanaticks="6" gainmanaamount="1" manamultiplier="4.0" attackspeed="2000" soulmax="100" gainsoulticks="120" fromvoc="0">

<formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0"/>

<skill id="0" multiplier="1.5"/>

<skill id="1" multiplier="2.0"/>

<skill id="2" multiplier="2.0"/>

<skill id="3" multiplier="2.0"/>

<skill id="4" multiplier="2.0"/>

<skill id="5" multiplier="1.5"/>

<skill id="6" multiplier="1.1"/>

</vocation>

<vocation id="1" name="Sorcerer" description="a sorcerer" gaincap="10" gainhp="5" gainmana="30" gainhpticks="0" gainhpamount="5" gainmanaticks="0" gainmanaamount="20" manamultiplier="1.2" attackspeed="500" soulmax="100" gainsoulticks="120" fromvoc="1">

<formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0"/>

<skill id="0" multiplier="1.5"/>

<skill id="1" multiplier="2.0"/>

<skill id="2" multiplier="2.0"/>

<skill id="3" multiplier="2.0"/>

<skill id="4" multiplier="2.0"/>

<skill id="5" multiplier="1.5"/>

<skill id="6" multiplier="1.1"/>

</vocation>

<vocation id="2" name="Druid" description="a druid" gaincap="10" gainhp="5" gainmana="30" gainhpticks="0" gainhpamount="5" gainmanaticks="0" gainmanaamount="20" manamultiplier="1.2" attackspeed="500" soulmax="100" gainsoulticks="120" fromvoc="2">

<formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0"/>

<skill id="0" multiplier="1.5"/>

<skill id="1" multiplier="1.8"/>

<skill id="2" multiplier="1.8"/>

<skill id="3" multiplier="1.8"/>

<skill id="4" multiplier="1.8"/>

<skill id="5" multiplier="1.5"/>

<skill id="6" multiplier="1.1"/>

</vocation>

<vocation id="3" name="Paladin" description="a paladin" gaincap="20" gainhp="10" gainmana="15" gainhpticks="0" gainhpamount="13" gainmanaticks="0" gainmanaamount="13" manamultiplier="2.2" attackspeed="400" soulmax="100" gainsoulticks="120" fromvoc="3">

<formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0"/>

<skill id="0" multiplier="1.2"/>

<skill id="1" multiplier="1.2"/>

<skill id="2" multiplier="1.2"/>

<skill id="3" multiplier="1.2"/>

<skill id="4" multiplier="1.1"/>

<skill id="5" multiplier="1.1"/>

<skill id="6" multiplier="1.1"/>

</vocation>

<vocation id="4" name="Knight" description="a knight" gaincap="25" gainhp="15" gainmana="5" gainhpticks="0" gainhpamount="20" gainmanaticks="0" gainmanaamount="5" manamultiplier="6.0" attackspeed="400" soulmax="100" gainsoulticks="120" fromvoc="4">

<formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0"/>

<skill id="0" multiplier="1.1"/>

<skill id="1" multiplier="1.1"/>

<skill id="2" multiplier="1.1"/>

<skill id="3" multiplier="1.1"/>

<skill id="4" multiplier="1.4"/>

<skill id="5" multiplier="1.1"/>

<skill id="6" multiplier="1.1"/>

</vocation>

<vocation id="5" name="Master Sorcerer" description="a master sorcerer" gaincap="10" gainhp="5" gainmana="30" gainhpticks="0" gainhpamount="10" gainmanaticks="0" gainmanaamount="40" manamultiplier="1.1" attackspeed="500" soulmax="200" gainsoulticks="15" fromvoc="1">

<formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0"/>

<skill id="0" multiplier="1.5"/>

<skill id="1" multiplier="2.0"/>

<skill id="2" multiplier="2.0"/>

<skill id="3" multiplier="2.0"/>

<skill id="4" multiplier="2.0"/>

<skill id="5" multiplier="1.5"/>

<skill id="6" multiplier="1.1"/>

</vocation>

<vocation id="6" name="Elder Druid" description="an elder druid" gaincap="10" gainhp="5" gainmana="30" gainhpticks="0" gainhpamount="10" gainmanaticks="0" gainmanaamount="40" manamultiplier="1.1" attackspeed="500" soulmax="200" gainsoulticks="15" fromvoc="2">

<formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0"/>

<skill id="0" multiplier="1.5"/>

<skill id="1" multiplier="1.8"/>

<skill id="2" multiplier="1.8"/>

<skill id="3" multiplier="1.8"/>

<skill id="4" multiplier="1.8"/>

<skill id="5" multiplier="1.5"/>

<skill id="6" multiplier="1.1"/>

</vocation>

<vocation id="7" name="Royal Paladin" description="a royal paladin" gaincap="20" gainhp="10" gainmana="15" gainhpticks="0" gainhpamount="25" gainmanaticks="0" gainmanaamount="25" manamultiplier="1.8" attackspeed="300" soulmax="200" gainsoulticks="15" fromvoc="3">

<formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0"/>

<skill id="0" multiplier="1.2"/>

<skill id="1" multiplier="1.2"/>

<skill id="2" multiplier="1.2"/>

<skill id="3" multiplier="1.2"/>

<skill id="4" multiplier="1.1"/>

<skill id="5" multiplier="1.1"/>

<skill id="6" multiplier="1.1"/>

</vocation>

<vocation id="8" name="Elite Knight" description="an elite knight" gaincap="25" gainhp="15" gainmana="5" gainhpticks="0" gainhpamount="40" gainmanaticks="0" gainmanaamount="10" manamultiplier="3.7" attackspeed="300" soulmax="200" gainsoulticks="15" fromvoc="4">

<formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0"/>

<skill id="0" multiplier="1.1"/>

<skill id="1" multiplier="1.1"/>

<skill id="2" multiplier="1.1"/>

<skill id="3" multiplier="1.1"/>

<skill id="4" multiplier="1.4"/>

<skill id="5" multiplier="1.1"/>

<skill id="6" multiplier="1.1"/>

</vocation>

 

<vocation id="9" name="Priest" description="a Fire Saint" gaincap="20" gainhp="5" gainmana="30" gainhpticks="0" gainhpamount="20" gainmanaticks="0" gainmanaamount="80" manamultiplier="1.1" attackspeed="500" soulmax="300" gainsoulticks="0" fromvoc="5">

<formula meleeDamage="1.0" distDamage="1.0" defense="3.5" armor="4.5"/>

<skill id="0" multiplier="1.5"/>

<skill id="1" multiplier="2.0"/>

<skill id="2" multiplier="2.0"/>

<skill id="3" multiplier="2.0"/>

<skill id="4" multiplier="2.0"/>

<skill id="5" multiplier="1.5"/>

<skill id="6" multiplier="1.1"/>

</vocation>

<vocation id="10" name="WaterSaint" description="an Water Saint" gaincap="20" gainhp="5" gainmana="30" gainhpticks="0" gainhpamount="20" gainmanaticks="0" gainmanaamount="80" manamultiplier="1.1" attackspeed="300" soulmax="500" gainsoulticks="0" fromvoc="6">

<formula meleeDamage="1.0" distDamage="1.0" defense="3.5" armor="4.5"/>

<skill id="0" multiplier="1.5"/>

<skill id="1" multiplier="1.8"/>

<skill id="2" multiplier="1.8"/>

<skill id="3" multiplier="1.8"/>

<skill id="4" multiplier="1.8"/>

<skill id="5" multiplier="1.5"/>

<skill id="6" multiplier="1.1"/>

</vocation>

<vocation id="11" name="MasterArcher" description="a Master Archer" gaincap="25" gainhp="10" gainmana="15" gainhpticks="0" gainhpamount="55" gainmanaticks="0" gainmanaamount="55" manamultiplier="1.8" attackspeed="200" soulmax="500" gainsoulticks="0" fromvoc="7">

<formula meleeDamage="1.0" distDamage="1.7" defense="3.5" armor="2.5"/>

<skill id="0" multiplier="1.2"/>

<skill id="1" multiplier="1.2"/>

<skill id="2" multiplier="1.2"/>

<skill id="3" multiplier="1.2"/>

<skill id="4" multiplier="1.1"/>

<skill id="5" multiplier="1.1"/>

<skill id="6" multiplier="1.1"/>

</vocation>

<vocation id="12" name="MasterWarrior" description="an Master Warrior" gaincap="35" gainhp="15" gainmana="5" gainhpticks="0" gainhpamount="80" gainmanaticks="0" gainmanaamount="20" manamultiplier="3.7" attackspeed="200" soulmax="500" gainsoulticks="0" fromvoc="8">

<formula meleeDamage="1.9" distDamage="1.0" defense="3.5" armor="2.5"/>

<skill id="0" multiplier="1.1"/>

<skill id="1" multiplier="1.1"/>

<skill id="2" multiplier="1.1"/>

<skill id="3" multiplier="1.1"/>

<skill id="4" multiplier="1.4"/>

<skill id="5" multiplier="1.1"/>

<skill id="6" multiplier="1.1"/>

</vocation>

 

 

 

<vocation id="13" name="Priest" description="a Fire Wizard" gaincap="25" gainhp="5" gainmana="30" gainhpticks="0" gainhpamount="40" gainmanaticks="0" gainmanaamount="160" manamultiplier="1.1" attackspeed="300" soulmax="300" gainsoulticks="0" fromvoc="9">

<formula meleeDamage="1.0" distDamage="1.3" defense="7.0" armor="9.0"/>

<skill id="0" multiplier="1.5"/>

<skill id="1" multiplier="2.0"/>

<skill id="2" multiplier="2.0"/>

<skill id="3" multiplier="2.0"/>

<skill id="4" multiplier="2.0"/>

<skill id="5" multiplier="1.5"/>

<skill id="6" multiplier="1.1"/>

</vocation>

<vocation id="14" name="WaterSaint" description="an Water Wizard" gaincap="25" gainhp="5" gainmana="30" gainhpticks="0" gainhpamount="40" gainmanaticks="0" gainmanaamount="160" manamultiplier="1.1" attackspeed="300" soulmax="500" gainsoulticks="0" fromvoc="10">

<formula meleeDamage="1.0" distDamage="1.3" defense="7.0" armor="9.0"/>

<skill id="0" multiplier="1.5"/>

<skill id="1" multiplier="1.8"/>

<skill id="2" multiplier="1.8"/>

<skill id="3" multiplier="1.8"/>

<skill id="4" multiplier="1.8"/>

<skill id="5" multiplier="1.5"/>

<skill id="6" multiplier="1.1"/>

</vocation>

<vocation id="15" name="MasterArcher" description="a Eft" gaincap="30" gainhp="10" gainmana="15" gainhpticks="0" gainhpamount="110" gainmanaticks="0" gainmanaamount="110" manamultiplier="1.8" attackspeed="200" soulmax="500" gainsoulticks="0" fromvoc="11">

<formula meleeDamage="1.0" distDamage="2.4" defense="7.0" armor="5.0"/>

<skill id="0" multiplier="1.2"/>

<skill id="1" multiplier="1.2"/>

<skill id="2" multiplier="1.2"/>

<skill id="3" multiplier="1.2"/>

<skill id="4" multiplier="1.1"/>

<skill id="5" multiplier="1.1"/>

<skill id="6" multiplier="1.1"/>

</vocation>

<vocation id="16" name="MasterWarrior" description="an Trojan" gaincap="40" gainhp="15" gainmana="5" gainhpticks="0" gainhpamount="160" gainmanaticks="0" gainmanaamount="40" manamultiplier="3.7" attackspeed="200" soulmax="500" gainsoulticks="0" fromvoc="12">

<formula meleeDamage="2.6" distDamage="1.0" defense="7.0" armor="5.0"/>

<skill id="0" multiplier="1.1"/>

<skill id="1" multiplier="1.1"/>

<skill id="2" multiplier="1.1"/>

<skill id="3" multiplier="1.1"/>

<skill id="4" multiplier="1.4"/>

<skill id="5" multiplier="1.1"/>

<skill id="6" multiplier="1.1"/>

</vocation>

 

 

<vocation id="17" name="Priest" description="a Fire Wizard III" gaincap="25" gainhp="5" gainmana="30" gainhpticks="0" gainhpamount="80" gainmanaticks="0" gainmanaamount="320" manamultiplier="1.1" attackspeed="300" soulmax="300" gainsoulticks="0" fromvoc="13">

<formula meleeDamage="1.0" distDamage="1.3" defense="14.0" armor="18.0"/>

<skill id="0" multiplier="1.5"/>

<skill id="1" multiplier="2.0"/>

<skill id="2" multiplier="2.0"/>

<skill id="3" multiplier="2.0"/>

<skill id="4" multiplier="2.0"/>

<skill id="5" multiplier="1.5"/>

<skill id="6" multiplier="1.1"/>

</vocation>

<vocation id="18" name="WaterSaint" description="an Water Wizard III" gaincap="25" gainhp="5" gainmana="30" gainhpticks="0" gainhpamount="80" gainmanaticks="0" gainmanaamount="320" manamultiplier="1.1" attackspeed="300" soulmax="500" gainsoulticks="0" fromvoc="14">

<formula meleeDamage="1.0" distDamage="1.3" defense="14.0" armor="18.0"/>

<skill id="0" multiplier="1.5"/>

<skill id="1" multiplier="1.8"/>

<skill id="2" multiplier="1.8"/>

<skill id="3" multiplier="1.8"/>

<skill id="4" multiplier="1.8"/>

<skill id="5" multiplier="1.5"/>

<skill id="6" multiplier="1.1"/>

</vocation>

<vocation id="19" name="MasterArcher" description="a Eft III" gaincap="30" gainhp="10" gainmana="15" gainhpticks="0" gainhpamount="220" gainmanaticks="0" gainmanaamount="220" manamultiplier="1.8" attackspeed="200" soulmax="500" gainsoulticks="0" fromvoc="15">

<formula meleeDamage="1.0" distDamage="3.2" defense="14.0" armor="10.0"/>

<skill id="0" multiplier="1.2"/>

<skill id="1" multiplier="1.2"/>

<skill id="2" multiplier="1.2"/>

<skill id="3" multiplier="1.2"/>

<skill id="4" multiplier="1.1"/>

<skill id="5" multiplier="1.1"/>

<skill id="6" multiplier="1.1"/>

</vocation>

<vocation id="20" name="MasterWarrior" description="an Trojan III" gaincap="40" gainhp="15" gainmana="5" gainhpticks="0" gainhpamount="320" gainmanaticks="0" gainmanaamount="80" manamultiplier="3.7" attackspeed="200" soulmax="500" gainsoulticks="0" fromvoc="16">

<formula meleeDamage="3.4" distDamage="1.0" defense="14.0" armor="10.0"/>

<skill id="0" multiplier="1.1"/>

<skill id="1" multiplier="1.1"/>

<skill id="2" multiplier="1.1"/>

<skill id="3" multiplier="1.1"/>

<skill id="4" multiplier="1.4"/>

<skill id="5" multiplier="1.1"/>

<skill id="6" multiplier="1.1"/>

</vocation>

 

<vocation id="21" name="Priest" description="a Fire Wizard IV" gaincap="25" gainhp="5" gainmana="30" gainhpticks="0" gainhpamount="160" gainmanaticks="0" gainmanaamount="640" manamultiplier="1.1" attackspeed="500" soulmax="300" gainsoulticks="0" fromvoc="17">

<formula meleeDamage="1.0" distDamage="1.3" defense="28.0" armor="36.0"/>

<skill id="0" multiplier="1.5"/>

<skill id="1" multiplier="2.0"/>

<skill id="2" multiplier="2.0"/>

<skill id="3" multiplier="2.0"/>

<skill id="4" multiplier="2.0"/>

<skill id="5" multiplier="1.5"/>

<skill id="6" multiplier="1.1"/>

</vocation>

<vocation id="22" name="WaterSaint" description="an Water Wizard IV" gaincap="25" gainhp="5" gainmana="30" gainhpticks="0" gainhpamount="160" gainmanaticks="0" gainmanaamount="640" manamultiplier="1.1" attackspeed="300" soulmax="500" gainsoulticks="0" fromvoc="18">

<formula meleeDamage="1.0" distDamage="1.3" defense="28.0" armor="36.0"/>

<skill id="0" multiplier="1.5"/>

<skill id="1" multiplier="1.8"/>

<skill id="2" multiplier="1.8"/>

<skill id="3" multiplier="1.8"/>

<skill id="4" multiplier="1.8"/>

<skill id="5" multiplier="1.5"/>

<skill id="6" multiplier="1.1"/>

</vocation>

<vocation id="23" name="MasterArcher" description="a Eft IV" gaincap="30" gainhp="10" gainmana="15" gainhpticks="0" gainhpamount="440" gainmanaticks="0" gainmanaamount="440" manamultiplier="1.8" attackspeed="200" soulmax="500" gainsoulticks="0" fromvoc="19">

<formula meleeDamage="1.0" distDamage="3.2" defense="28.0" armor="20.0"/>

<skill id="0" multiplier="1.2"/>

<skill id="1" multiplier="1.2"/>

<skill id="2" multiplier="1.2"/>

<skill id="3" multiplier="1.2"/>

<skill id="4" multiplier="1.1"/>

<skill id="5" multiplier="1.1"/>

<skill id="6" multiplier="1.1"/>

</vocation>

<vocation id="24" name="MasterWarrior" description="an Trojan IV" gaincap="40" gainhp="15" gainmana="5" gainhpticks="0" gainhpamount="640" gainmanaticks="0" gainmanaamount="160" manamultiplier="3.7" attackspeed="200" soulmax="500" gainsoulticks="0" fromvoc="20">

<formula meleeDamage="3.4" distDamage="1.0" defense="28.0" armor="20.0"/>

<skill id="0" multiplier="1.1"/>

<skill id="1" multiplier="1.1"/>

<skill id="2" multiplier="1.1"/>

<skill id="3" multiplier="1.1"/>

<skill id="4" multiplier="1.4"/>

<skill id="5" multiplier="1.1"/>

<skill id="6" multiplier="1.1"/>

</vocation>

 

</vocations>

 

Como podem ver eu nunca troco! o Nome da vocaçao para nao ter trabalho a em corrigir as spells.xml e as waepons xml.

 

Fucnion.lua

 

function doPlayerGiveItem(cid, itemid, amount, subType)

local item = 0

if(isItemStackable(itemid) == TRUE) then

item = doCreateItemEx(itemid, amount)

if(doPlayerAddItemEx(cid, item, TRUE) ~= RETURNVALUE_NOERROR) then

return LUA_ERROR

end

else

for i = 1, amount do

item = doCreateItemEx(itemid, subType)

if(doPlayerAddItemEx(cid, item, TRUE) ~= RETURNVALUE_NOERROR) then

return LUA_ERROR

end

end

end

 

return LUA_NO_ERROR

end

 

function doPlayerTakeItem(cid, itemid, amount)

if(getPlayerItemCount(cid, itemid) < amount or doPlayerRemoveItem(cid, itemid, amount) ~= TRUE) then

return LUA_ERROR

end

 

return LUA_NO_ERROR

end

 

function doPlayerBuyItem(cid, itemid, count, cost, charges)

if(doPlayerRemoveMoney(cid, cost) ~= TRUE) then

return LUA_ERROR

end

 

return doPlayerGiveItem(cid, itemid, count, charges)

end

 

function doPlayerBuyItemContainer(cid, containerid, itemid, count, cost, charges)

if(doPlayerRemoveMoney(cid, cost) ~= TRUE) then

return LUA_ERROR

end

 

for i = 1, count do

local container = doCreateItemEx(containerid, 1)

for x = 1, getContainerCapById(containerid) do

doAddContainerItem(container, itemid, charges)

end

 

if(doPlayerAddItemEx(cid, container, TRUE) ~= RETURNVALUE_NOERROR) then

return LUA_ERROR

end

end

 

return LUA_NO_ERROR

end

 

function doPlayerSellItem(cid, itemid, count, cost)

if(doPlayerTakeItem(cid, itemid, count) ~= LUA_NO_ERROR) then

return LUA_ERROR

end

 

if(doPlayerAddMoney(cid, cost) ~= TRUE) then

error('Could not add money to: ' .. getPlayerName(cid) .. ' (' .. cost .. 'gp).')

end

 

return LUA_NO_ERROR

end

 

function isInRange(pos, fromPos, toPos)

return (pos.x >= fromPos.x and pos.y >= fromPos.y and pos.z >= fromPos.z and pos.x <= toPos.x and pos.y <= toPos.y and pos.z <= toPos.z) and TRUE or FALSE

end

 

function isPremium(cid)

return (isPlayer(cid) == TRUE and (getPlayerPremiumDays(cid) > 0 or getConfigInfo('freePremium') == "yes")) and TRUE or FALSE

end

 

function getMonthDayEnding(day)

if day == "01" or day == "21" or day == "31" then

return "st"

elseif day == "02" or day == "22" then

return "nd"

elseif day == "03" or day == "23" then

return "rd"

else

return "th"

end

end

 

function getMonthString(m)

return os.date("%B", os.time{year = 1970, month = m, day = 1})

end

 

function getArticle(str)

return str:find("[AaEeIiOoUuYy]") == 1 and "an" or "a"

end

 

function isNumber(str)

return tonumber(str) ~= nil and TRUE or FALSE

end

 

function getDistanceBetween(firstPosition, secondPosition)

local xDif = math.abs(firstPosition.x - secondPosition.x)

local yDif = math.abs(firstPosition.y - secondPosition.y)

 

local posDif = math.max(xDif, yDif)

if(firstPosition.z ~= secondPosition.z) then

posDif = posDif + 9 + 6

end

return posDif

end

 

function doPlayerAddAddons(cid, addon)

for i = 0, table.maxn(maleOutfits) do

doPlayerAddOutfit(cid, maleOutfits, addon)

end

 

for i = 0, table.maxn(femaleOutfits) do

doPlayerAddOutfit(cid, femaleOutfits, addon)

end

end

 

function isSorcerer(cid)

if(isPlayer(cid) == FALSE) then

debugPrint("isSorcerer: Player not found.")

return false

end

 

return (isInArray({1,5,9,13,17,21}, getPlayerVocation(cid)) == TRUE)

end

 

function isDruid(cid)

if(isPlayer(cid) == FALSE) then

debugPrint("isDruid: Player not found.")

return false

end

 

return (isInArray({2,6,10,14,18,22}, getPlayerVocation(cid)) == TRUE)

end

 

function isPaladin(cid)

if(isPlayer(cid) == FALSE) then

debugPrint("isPaladin: Player not found.")

return false

end

 

return (isInArray({3,7,11,15,19,23}, getPlayerVocation(cid)) == TRUE)

end

 

function isKnight(cid)

if(isPlayer(cid) == FALSE) then

debugPrint("isKnight: Player not found.")

return false

end

 

return (isInArray({4,8,12,16,20,24}, getPlayerVocation(cid)) == TRUE)

end

 

function isRookie(cid)

if(isPlayer(cid) == FALSE) then

debugPrint("isRookie: Player not found.")

return false

end

 

return (isInArray({0}, getPlayerVocation(cid)) == TRUE)

end

 

function getDirectionTo(pos1, pos2)

local dir = NORTH

if(pos1.x > pos2.x) then

dir = WEST

if(pos1.y > pos2.y) then

dir = NORTHWEST

elseif(pos1.y < pos2.y) then

dir = SOUTHWEST

end

elseif(pos1.x < pos2.x) then

dir = EAST

if(pos1.y > pos2.y) then

dir = NORTHEAST

elseif(pos1.y < pos2.y) then

dir = SOUTHEAST

end

else

if(pos1.y > pos2.y) then

dir = NORTH

elseif(pos1.y < pos2.y) then

dir = SOUTH

end

end

return dir

end

 

function getPlayerLookPos(cid)

return getPosByDir(getThingPos(cid), getPlayerLookDir(cid))

end

 

function getPosByDir(fromPosition, direction, size)

local n = size or 1

 

local pos = fromPosition

if(direction == NORTH) then

pos.y = pos.y - n

elseif(direction == SOUTH) then

pos.y = pos.y + n

elseif(direction == WEST) then

pos.x = pos.x - n

elseif(direction == EAST) then

pos.x = pos.x + n

elseif(direction == NORTHWEST) then

pos.y = pos.y - n

pos.x = pos.x - n

elseif(direction == NORTHEAST) then

pos.y = pos.y - n

pos.x = pos.x + n

elseif(direction == SOUTHWEST) then

pos.y = pos.y + n

pos.x = pos.x - n

elseif(direction == SOUTHEAST) then

pos.y = pos.y + n

pos.x = pos.x + n

end

 

return pos

end

 

function getPlayerMoney(cid)

return ((getPlayerItemCount(cid, ITEM_CRYSTAL_COIN) * 10000) + (getPlayerItemCount(cid, ITEM_PLATINUM_COIN) * 100) + getPlayerItemCount(cid, ITEM_GOLD_COIN))

end

 

function doPlayerWithdrawAllMoney(cid)

return doPlayerWithdrawMoney(cid, getPlayerBalance(cid))

end

 

function doPlayerDepositAllMoney(cid)

return doPlayerDepositMoney(cid, getPlayerMoney(cid))

end

 

function doPlayerTransferAllMoneyTo(cid, target)

return doPlayerTransferMoneyTo(cid, target, getPlayerBalance(cid))

end

 

function playerExists(name)

return getPlayerGUIDByName(name) ~= 0

end

 

function getTibiaTime()

local minutes = getWorldTime()

local hours = 0

while (minutes > 60) do

hours = hours + 1

minutes = minutes - 60

end

 

return {hours = hours, minutes = minutes}

end

 

function doWriteLogFile(file, text)

local file = io.open(file, "a+")

file:write("[" .. os.date("%d/%m/%Y %H:%M:%S") .. "] " .. text .. "\n")

file:close()

end

 

function getExperienceForLevel(lv)

lv = lv - 1

return ((50 * lv * lv * lv) - (150 * lv * lv) + (400 * lv)) / 3

end

 

function doMutePlayer(cid, time)

local condition = createConditionObject(CONDITION_MUTED)

setConditionParam(condition, CONDITION_PARAM_TICKS, time * 1000)

return doAddCondition(cid, condition)

end

 

function getPlayerVocationName(cid)

return getVocationInfo(getPlayerVocation(cid)).name

end

 

function getPromotedVocation(vid)

return getVocationInfo(vid).promotedVocation

end

 

function doPlayerRemovePremiumDays(cid, days)

return doPlayerAddPremiumDays(cid, -days)

end

 

function getPlayerMasterPos(cid)

return getTownTemplePosition(getPlayerTown(cid))

end

 

function getItemNameById(itemid)

return getItemDescriptionsById(itemid).name

end

 

function getItemPluralNameById(itemid)

return getItemDescriptionsById(itemid).plural

end

 

function getItemArticleById(itemid)

return getItemDescriptionsById(itemid).article

end

 

function getItemName(uid)

return getItemDescriptions(uid).name

end

 

function getItemPluralName(uid)

return getItemDescriptions(uid).plural

end

 

function getItemArticle(uid)

return getItemDescriptions(uid).article

end

 

function getItemText(uid)

return getItemDescriptions(uid).text

end

 

function getItemWriter(uid)

return getItemDescriptions(uid).writer

end

 

function getItemDate(uid)

return getItemDescriptions(uid).date

end

 

function getTilePzInfo(pos)

return getTileInfo(pos).protection and TRUE or FALSE

end

 

function getTileZoneInfo(pos)

local tmp = getTileInfo(pos)

if(tmp.pvp) then

return 2

end

 

if(tmp.nopvp) then

return 1

end

 

return 0

end

 

function debugPrint(text)

return io.stdout:write(text)

end

 

function doShutdown()

return doSetGameState(GAMESTATE_SHUTDOWN)

end

 

function doSummonCreature(name, pos)

local cid = doCreateMonster(name, pos)

if(cid ~= LUA_ERROR) then

return cid

end

 

cid = doCreateNpc(name, pos)

return cid

end

 

function getOnlinePlayers()

local tmp = getPlayersOnline()

local players = {}

for i, cid in ipairs(tmp) do

table.insert(players, getCreatureName(cid))

end

 

return players

end

 

function getPlayerByName(name)

local cid = getCreatureByName(name)

return isPlayer(cid) == TRUE and cid or nil

end

 

function isPlayerGhost(cid)

return isPlayer(cid) == TRUE and getCreatureCondition(cid, CONDITION_GAMEMASTER, GAMEMASTER_INVISIBLE) or FALSE

end

 

function doPlayerSetExperienceRate(cid, value)

return doPlayerSetRate(cid, SKILL__LEVEL, value)

end

 

function doPlayerSetMagicRate(cid, value)

return doPlayerSetRate(cid, SKILL__MAGLEVEL, value)

end

 

function getPlayerFrags(cid)

return math.ceil((getPlayerRedSkullTicks(cid) / getConfigInfo('timeToDecreaseFrags')) + 1)

end

 

function getPartyLeader(cid)

local party = getPartyMembers(cid)

if(type(party) ~= 'table') then

return 0

end

 

return party[1]

end

 

function isInParty(cid)

return type(getPartyMembers(cid)) == 'table' and TRUE or FALSE

end

 

function isPrivateChannel(channelId)

for i = CHANNEL_GUILD, CHANNEL_HELP do

if(channelId == i) then

return FALSE

end

end

 

return TRUE

end

 

function doConvertIntegerToIp(int, mask)

local b4 = bit.urshift(bit.uband(int, 4278190080), 24)

local b3 = bit.urshift(bit.uband(int, 16711680), 16)

local b2 = bit.urshift(bit.uband(int, 65280), 8)

local b1 = bit.urshift(bit.uband(int, 255), 0)

if(mask ~= nil) then

local m4 = bit.urshift(bit.uband(mask, 4278190080), 24)

local m3 = bit.urshift(bit.uband(mask, 16711680), 16)

local m2 = bit.urshift(bit.uband(mask, 65280), 8)

local m1 = bit.urshift(bit.uband(mask, 255), 0)

if((m1 == 255 or m1 == 0) and (m2 == 255 or m2 == 0) and (m3 == 255 or m3 == 0) and (m4 == 255 or m4 == 0)) then

if m1 == 0 then b1 = "x" end

if m2 == 0 then b2 = "x" end

if m3 == 0 then b3 = "x" end

if m4 == 0 then b4 = "x" end

elseif(m1 ~= 255 or m2 ~= 255 or m3 ~= 255 or m4 ~= 255) then

return b1 .. "." .. b2 .. "." .. b3 .. "." .. b4 .. " : " .. m1 .. "." .. m2 .. "." .. m3 .. "." .. m4

end

end

 

return b1 .. "." .. b2 .. "." .. b3 .. "." .. b4

end

 

function doConvertIpToInteger(str)

local maskindex = str:find(":")

if(maskindex == nil) then

local ipint = 0

local maskint = 0

 

local index = 24

for b in str:gmatch("([x%d]+)%.?") do

if(b ~= "x") then

if(b:find("x") ~= nil) then

return 0, 0

end

 

if(tonumber(b) > 255 or tonumber(b) < 0) then

return 0, 0

end

 

maskint = bit.ubor(maskint, bit.ulshift(255, index))

ipint = bit.ubor(ipint, bit.ulshift(b, index))

end

 

index = index - 8

if(index < 0) then

break

end

end

 

if(index ~= -8) then

return 0, 0

end

 

return ipint, maskint

end

 

if(maskindex <= 1) then

return 0, 0

end

 

local ipstring = str:sub(1, maskindex - 1)

local maskstring = str:sub(maskindex)

 

local ipint = 0

local maskint = 0

 

local index = 0

for b in ipstring:gmatch("(%d+).?") do

if(tonumber(b) > 255 or tonumber(b) < 0) then

return 0, 0

end

 

ipint = bit.ubor(ipint, bit.ulshift(b, index))

index = index + 8

if(index > 24) then

break

end

end

 

if(index ~= 32) then

return 0, 0

end

 

index = 0

for b in maskstring:gmatch("(%d+)%.?") do

if(tonumber(b) > 255 or tonumber(b) < 0) then

return 0, 0

end

 

maskint = bit.ubor(maskint, bit.ulshift(b, index))

index = index + 8

if(index > 24) then

break

end

end

 

if(index ~= 32) then

return 0, 0

end

 

return ipint, maskint

end

 

function getBooleanFromString(str)

return (str:lower() == "yes" or str:lower() == "true" or (tonumber(str) and tonumber(str) > 0)) and TRUE or FALSE

end

 

function doCopyItem(item, attributes)

local attributes = attributes or FALSE

 

local ret = doCreateItemEx(item.itemid, item.type)

if(attributes == TRUE) then

if(item.actionid > 0) then

doSetItemActionId(ret, item.actionid)

end

end

 

if(isContainer(item.uid) == TRUE) then

for i = (getContainerSize(item.uid) - 1), 0, -1 do

local tmp = getContainerItem(item.uid, i)

if(tmp.itemid > 0) then

doAddContainerItemEx(ret, doCopyItem(tmp, TRUE).uid)

end

end

end

 

return getThing(ret)

end

 

table.find = function (table, value)

for i, v in pairs(table) do

if(v == value) then

return i

end

end

 

return nil

end

 

table.isStrIn = function (txt, str)

for i, v in pairs(str) do

if(txt:find(v) and not txt:find('(%w+)' .. v) and not txt:find(v .. '(%w+)')) then

return true

end

end

 

return false

end

 

table.countElements = function (table, item)

local count = 0

for i, n in pairs(table) do

if(item == n) then

count = count + 1

end

end

 

return count

end

 

table.getCombinations = function (table, num)

local a, number, select, newlist = {}, #table, num, {}

for i = 1, select do

a[#a + 1] = i

end

 

local newthing = {}

while(true) do

local newrow = {}

for i = 1, select do

newrow[#newrow + 1] = table[a]

end

 

newlist[#newlist + 1] = newrow

i = select

while(a == (number - select + i)) do

i = i - 1

end

 

if(i < 1) then

break

end

 

a = a + 1

for j = i, select do

a[j] = a + j - i

end

end

 

return newlist

end

 

string.split = function (str)

local t = {}

local function helper(word)

table.insert(t, word)

return ""

end

 

if(not str:gsub("%w+", helper):find("%S")) then

return t

end

end

 

string.trim = function (str)

return (string.gsub(str, "^%s*(.-)%s*$", "%1"))

end

 

string.explode = function (str, sep)

local pos, t = 1, {}

if #sep == 0 or #str == 0 then

return

end

 

for s, e in function() return str:find(sep, pos) end do

table.insert(t, str:sub(pos, s - 1):trim())

pos = e + 1

end

 

table.insert(t, str:sub(pos):trim())

return t

end

 

 

lib/vocations.lua

 

function isSorcerer(cid)

return isInArray({1, 5, 9, 13, 17, 21}, getPlayerVocation(cid))

end

 

function isDruid(cid)

return isInArray({2, 6, 10, 14, 18, 22}, getPlayerVocation(cid))

end

 

function isPaladin(cid)

return isInArray({3, 7, 11, 15, 19, 23}, getPlayerVocation(cid))

end

 

function isKnight(cid)

return isInArray({4, 8, 12, 16, 20, 24}, getPlayerVocation(cid))

end

 

function isRookie(cid)

return isInArray({0}, getPlayerVocation(cid))

end

 

 

 

Exemplo de magia!

 

<rune name="Sudden Death" id="2263" allowfaruse="1" charges="1" lvl="8" maglv="105" exhaustion="1000" mana="200" needtarget="1" blocktype="solid" script="attack/sd.lua">

<vocation name="Priest"/>

<vocation name="WaterSaint"/>

</rune>

 

Exemplo de Waepon!

 

<melee id="7405" level="8" unproperly="1" function="default"> <!-- Snowball -->

<vocation name="MasterWarrior"/>

</melee>

<distance id="8852" level="8" function="default"> <!-- XBow -->

<vocation name="MasterArcher"/>

</distance>

 

E o problema é que até a vocaçao id 16 MasterWarrior funciona todo bem agora quando algm faz a outra promotion ja nao funciona...

Nao entendo onde esta o erro! se tiverem duvidas sobre o que pretendo falem!

Editado por tavax
Link para o comentário
https://xtibia.com/forum/topic/124413-duvida-item-e-spell-dizem-que-nao-tenho-voca%C3%A7ao/
Compartilhar em outros sites

impressao minha ou as vocações se repetem ? :surprised:

 

deve ser por isso, vc crio suas novas vocações, mas elas se repetem pelo menos umas 3 vezes :icon_idea:

Editado por Tapetao
Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...