Ir para conteúdo

[Duvida] Como Criar Uma Vocação 3


mxlr14

Posts Recomendados

Então galera eu andei vendo como cria vocações num ot, mas fiz de todas as maneiras a vocação pra vip, pois tenho vip sistem so falta as vocs que vips teram de vantagem, ja fiz de todas as maneiras mas não funcionou, ja mechi na pasta DATA/LIB, e na pasta vocation.xml, porem nao funcionou, gostaria que alguem me ensinasse a fazer direitinho queria saber como criar uma terceira classse (nao classe nova uma continuação. EXE: Knight, Elite Knight e a nova (Killer Elite Knight, para vips).

 

Se alguem poder me ajudar fico muito grato, desculpe por nao ter formato direito o test é porque fiz no topico rapido, por favor me ajudem obrigado a todos desde ja agradeço :D.

Link para o comentário
Compartilhar em outros sites

Primeiramente vamos ao seu Vocations.XML que se encontra dentro da pasta de seu ot, no caso seuot\data\xml.

 

ai dentro vão está varios arquivos .XML então você terá que adicionar a nova vocação e escolher seus devidos IDs, abaixo uma descrição para melhor entendimento.

 

 

<?xml version="1.0" encoding="UTF-8"?>
<vocations>
<vocation id="0" name="None" description="none" needpremium="0" gaincap="5" gainhp="5" gainmana="5" gainhpticks="6" gainhpamount="10" gainmanaticks="6" gainmanaamount="10" manamultiplier="4.0" attackspeed="750" soulmax="100" gainsoulticks="120" fromvoc="0" attackable="no">
	<formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="2.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" needpremium="0" gaincap="10" gainhp="5" gainmana="30" gainhpticks="4" gainhpamount="15" gainmanaticks="2.5" gainmanaamount="45" manamultiplier="1.1" attackspeed="1150" soulmax="100" gainsoulticks="120" fromvoc="1">
	<formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="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" needpremium="0" gaincap="10" gainhp="5" gainmana="30" gainhpticks="4" gainhpamount="15" gainmanaticks="2.5" gainmanaamount="45" manamultiplier="1.1" attackspeed="1150" soulmax="100" gainsoulticks="120" fromvoc="2">
	<formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="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" needpremium="0" gaincap="20" gainhp="10" gainmana="15" gainhpticks="2.5" gainhpamount="35" gainmanaticks="3" gainmanaamount="35" manamultiplier="1.4" attackspeed="1150" soulmax="100" gainsoulticks="120" fromvoc="3">
	<formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="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" needpremium="0" gaincap="25" gainhp="15" gainmana="5" gainhpticks="3" gainhpamount="50" gainmanaticks="3" gainmanaamount="25" manamultiplier="3.0" attackspeed="1150" soulmax="100" gainsoulticks="120" fromvoc="4">
	<formula meleeDamage="1.1" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="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" needpremium="1" gaincap="10" gainhp="5" gainmana="30" gainhpticks="3" gainhpamount="30" gainmanaticks="2" gainmanaamount="60" manamultiplier="1.1" attackspeed="1050" soulmax="200" gainsoulticks="15" fromvoc="1" lessloss="30">
	<formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="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="a elder druid" needpremium="1" gaincap="10" gainhp="5" gainmana="30" gainhpticks="3" gainhpamount="30" gainmanaticks="2" gainmanaamount="60" manamultiplier="1.1" attackspeed="1050" soulmax="200" gainsoulticks="15" fromvoc="2" lessloss="30">
	<formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="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" needpremium="1" gaincap="20" gainhp="10" gainmana="15" gainhpticks="2.5" gainhpamount="40" gainmanaticks="2.5" gainmanaamount="50" manamultiplier="1.4" attackspeed="1050" soulmax="200" gainsoulticks="15" fromvoc="3" lessloss="30">
	<formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="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="a elite knight" needpremium="1" gaincap="25" gainhp="15" gainmana="5" gainhpticks="2" gainhpamount="50" gainmanaticks="3" gainmanaamount="40" manamultiplier="3.0" attackspeed="1050" soulmax="200" gainsoulticks="15" fromvoc="4" lessloss="30">
	<formula meleeDamage="1.1" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="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="Killer Sorcerer" description="a Killer Sorcerer" needpremium="0" gaincap="10" gainhp="5" gainmana="30" gainhpticks="4" gainhpamount="40" gainmanaticks="2" gainmanaamount="70" manamultiplier="1.1" attackspeed="900" soulmax="299" gainsoulticks="15" fromvoc="5" lessloss="30">
	<formula meleeDamage="1.0" distDamage="1.0" wandDamage="2.0" magDamage="1.2" magHealingDamage="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="10" name="Killer Druid" description="a Killer druid" needpremium="0" gaincap="10" gainhp="5" gainmana="30" gainhpticks="4" gainhpamount="40" gainmanaticks="2" gainmanaamount="70" manamultiplier="1.1" attackspeed="900" soulmax="299" gainsoulticks="15" fromvoc="6" lessloss="30">
	<formula meleeDamage="1.0" distDamage="1.0" wandDamage="2.0" magDamage="1.2" magHealingDamage="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="11" name="Killer Paladin" description="a Killer paladin" needpremium="0" gaincap="20" gainhp="10" gainmana="15" gainhpticks="3" gainhpamount="60" gainmanaticks="3" gainmanaamount="60" manamultiplier="1.4" attackspeed="900" soulmax="299" gainsoulticks="15" fromvoc="7" lessloss="30">
	<formula meleeDamage="1.1" distDamage="1.1" wandDamage="1.0" magDamage="1.1" magHealingDamage="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="12" name="Killer Knight" description="a Killer knight" needpremium="0" gaincap="25" gainhp="15" gainmana="5" gainhpticks="8" gainhpamount="70" gainmanaticks="4" gainmanaamount="50" manamultiplier="3.0" attackspeed="900" soulmax="299" gainsoulticks="15" fromvoc="8" lessloss="30">
	<formula meleeDamage="1.2" distDamage="1.0" wandDamage="1.0" magDamage="1.1" magHealingDamage="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>
</vocations>

 

 

No caso ai eu adicionei 4 novas vocações como você pode ver a Killer Sorcerer de ID 9 , Killer druid de ID 10, Killer paladin de ID 11 e por ultimo o Killer Knight de ID 12. ai é só copiar as 4 novas vocações e adicionar no seu Vocations.XML ou então copie tudo e cole por cima do seu.

 

vamos a segunda parte.

 

agora iremos adicionar as novas IDs de nossa vocação no Function.lua ele se econtra na pasta data\lib.

em alguns ots em vez do function.lua tem um arquivo chamado 031-vocations.lua, abra ele e dê uma verificada se estiver mais ou menos ao codigo abaixo, é só copiar e cola, mas se não vamus para segunda parte

 

function isSorcerer(cid)
return isInArray({1,5,9}, getPlayerVocation(cid))
end

function isDruid(cid)
return isInArray({2,6,10}, getPlayerVocation(cid))
end

function isPaladin(cid)
return isInArray({3,7,11}, getPlayerVocation(cid))
end

function isKnight(cid)
return isInArray({4,8,12}, getPlayerVocation(cid))
end

function isRookie(cid)
return isInArray({0}, getPlayerVocation(cid))
end

 

em otservs antigos temos somente o arquivo Function.lua, e concerteza ele estará desatualizado, então copie esse codigo abaixo e cole, lembrando que somente se não conseguir do modo acima, se não irá bugar a abertura do ot.

 

 

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[i], addon)
end

for i = 0, table.maxn(femaleOutfits) do
doPlayerAddOutfit(cid, femaleOutfits[i], addon)
end
end

function isSorcerer(cid)
if(isPlayer(cid) == FALSE) then
debugPrint("isSorcerer: Jogador nao encontrado.")
return false
end

return (isInArray({1,5,9}, getPlayerVocation(cid)) == TRUE)
end

function isDruid(cid)
if(isPlayer(cid) == FALSE) then
debugPrint("isDruid: Jogador nao encontrado.")
return false
end

return (isInArray({2,6,10}, getPlayerVocation(cid)) == TRUE)
end

function isPaladin(cid)
if(isPlayer(cid) == FALSE) then
debugPrint("isPaladin: Jogador nao encontrado.")
return false
end

return (isInArray({3,7,11}, getPlayerVocation(cid)) == TRUE)
end

function isKnight(cid)
if(isPlayer(cid) == FALSE) then
debugPrint("isKnight: Jogador nao encontrado.")
return false
end

return (isInArray({4,8,12}, getPlayerVocation(cid)) == TRUE)
end

function isRookie(cid)
if(isPlayer(cid) == FALSE) then
debugPrint("isRookie: Jogador nao encontrado.")
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[i]]
end

newlist[#newlist + 1] = newrow
i = select
while(a[i] == (number - select + i)) do
i = i - 1
end

if(i < 1) then
break
end

a[i] = a[i] + 1
for j = i, select do
a[j] = a[i] + 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*{:content:}quot;, "%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

 

 

Agora a criação do Npc que venderá a vocação, vamus primeiro em data\npc

copie qualquer um e edite, escolha um nome de sua preferência, no caso ai o nome dele é Killer Promote.

 

<?xml version="1.0"?>

<npc name="Killer Promote" script="data/npc/scripts/promotion3.lua" access="3" lookdir="2">
<mana now="800" max="800"/>
<health now="200" max="200"/>
<look type="133" head="114" body="119" legs="132" feet="114"/>
</npc>

 

 

Agora vá pasta Scripts que se encontra dentro da pasta Npc, se ligue que o NPC vai pegar o script promotion3.lua então você deverá criar o script com esse nome.

 

copie e cole algum arquivo e renomeie para algo do tipo assim promotion3, e cole o conteudo abaixo dentro dele.

 

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink()

end



local node1 = keywordHandler:addKeyword({'promot'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Posso promove-lo por 20k. Voce quer?'})
node1:addChildKeyword({'yes'}, StdModule.promotePlayer, {npcHandler = npcHandler, cost = 20000, level = 20, promotion = 1, text = 'Parabens voce foi promovido.'})
node1:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Tudo bem, volte quando estiver pronto.', reset = true})




local node2 = keywordHandler:addKeyword({'killer'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Posso promove-lo para um Killer por 30kk. Voce quer?'})
node2:addChildKeyword({'yes'}, StdModule.promotePlayer, {npcHandler = npcHandler, cost = 3000000, level = 100, promotion = 2, text = 'Agora voce e um killer.'})
node2:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Tudo bem, volte quando estiver pronto.', reset = true})

npcHandler:addModule(FocusModule:new())

 

 

Vamus as explicação do que o NPC vai falar esqueça a parte do local node1, pois ali está vendendo as primeiras vocações no caso Elite Knight e etc, vamus para local node2.

 

 

keywordHandler:addKeyword({'killer'}

Killer é o que você vai falar para o Npc vender a nova vocação

 

 

{npcHandler = npcHandler, cost = 3000000, level = 100

cost é o valor da nova promotion, ai tá 30kk e level = 100 é o level necessário para obtelá.

 

 

uffa terminei, espero que te ajude.

Editado por kevonus
Link para o comentário
Compartilhar em outros sites

  • 1 month later...
  • 3 months later...
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...