mxlr14 3 Postado Julho 25, 2011 Share Postado Julho 25, 2011 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 . Link para o comentário Compartilhar em outros sites More sharing options...
fsg 230 Postado Julho 25, 2011 Share Postado Julho 25, 2011 Cara, preste mais atenção antes de postar! Área errada. Tópico movido. Link para o comentário Compartilhar em outros sites More sharing options...
mxlr14 3 Postado Julho 26, 2011 Autor Share Postado Julho 26, 2011 Foi movido para aonde ? Link para o comentário Compartilhar em outros sites More sharing options...
kevonus 6 Postado Julho 28, 2011 Share Postado Julho 28, 2011 (editado) 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 Julho 28, 2011 por kevonus Link para o comentário Compartilhar em outros sites More sharing options...
Hauptli 0 Postado Setembro 15, 2011 Share Postado Setembro 15, 2011 Valeu manolo .... mais uma coisa .... eu tenhu que add o 9,10,113 12 nas spells neh ... ?!?!?! Link para o comentário Compartilhar em outros sites More sharing options...
michaellol 0 Postado Dezembro 16, 2011 Share Postado Dezembro 16, 2011 Tem Sim, Ou Cria Spells Novas Pra Elas . Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados