MatheusGlad 424 Postado Fevereiro 15, 2010 Share Postado Fevereiro 15, 2010 (editado) O meu ot eh um vancini e tinha uma tal de Slayer Promotion. Eu fui la e mexi no nome da promotion e talz, o script de comprar a promotion tava otimo so que dps que voce sai do char e volta sai a promotion queria saber como concertar esse bug Aqui esta o script: function onSay(cid, words, param) if getPlayerVocation(cid) <= 8 then if doPlayerRemoveMoney(cid,30000000) == TRUE then doPlayerSetVocation(cid,getPlayerVocation(cid)+4) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Voce comprou Xennys Promotion!") doSendMagicEffect(getPlayerPosition(cid), 30) else doPlayerSendCancel(cid, "Desculpe, voce nao tem dinheiro!") doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) end else doPlayerSendCancel(cid, "Desculpe, voce ja esta promovido") end end Editado Fevereiro 16, 2010 por MatheusMkalo Link para o comentário https://xtibia.com/forum/topic/128300-segunda-promotion/ Compartilhar em outros sites More sharing options...
Oneshot 732 Postado Fevereiro 15, 2010 Share Postado Fevereiro 15, 2010 (editado) Olá, Troque o conteúdo do seu script por este aqui. function onSay(cid, words, param) if getPlayerVocation(cid) <= 8 then if doPlayerRemoveMoney(cid, 30000000) == TRUE then doPlayerSetPromotionLevel(cid, 2) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Voc\ê comprou Xennys Promotion!") doSendMagicEffect(getPlayerPosition(cid), 30) else doPlayerSendCancel(cid, "Desculpe, voc\ê n\ão tem dinheiro para a promotion!") doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) end else doPlayerSendCancel(cid, "Desculpe, voc\ê j\á est\á promovido") end return TRUE end Editado Fevereiro 16, 2010 por Oneshot Link para o comentário https://xtibia.com/forum/topic/128300-segunda-promotion/#findComment-846688 Compartilhar em outros sites More sharing options...
MatheusGlad 424 Postado Fevereiro 16, 2010 Autor Share Postado Fevereiro 16, 2010 Cara nao funcionou nao =/ Agora foi pior ainda antes o player ficava com a promotion e dps logava e voltava e nao tinha mais a promotion agora o script retiro o dinheiro e nao deu promotion =/ Link para o comentário https://xtibia.com/forum/topic/128300-segunda-promotion/#findComment-846869 Compartilhar em outros sites More sharing options...
Oneshot 732 Postado Fevereiro 16, 2010 Share Postado Fevereiro 16, 2010 (editado) Desculpe, Errei algo no script, tente denovo com este, function onSay(cid, words, param) if getPlayerVocation(cid) <= 8 then if doPlayerRemoveMoney(cid, 30000000) == TRUE then setPlayerPromotionLevel(cid, getPlayerPromotionLevel(cid) + 1) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Voce comprou Xennys Promotion!") doSendMagicEffect(getPlayerPosition(cid), 30) else doPlayerSendCancel(cid, "Desculpe, voce nao tem dinheiro para a promotion!") doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) end else doPlayerSendCancel(cid, "Desculpe, voce ja esta promovido") end return TRUE end E se no seu config.lua, existe essa variável com o valor "yes", mude para "no" premiumForPromotion = "no" Editado Fevereiro 16, 2010 por Oneshot Link para o comentário https://xtibia.com/forum/topic/128300-segunda-promotion/#findComment-846873 Compartilhar em outros sites More sharing options...
MatheusGlad 424 Postado Fevereiro 16, 2010 Autor Share Postado Fevereiro 16, 2010 (editado) Tenso!!! Primeiro Bug: Voce compra e depois fica assim You see yourself. You are . Segundo Bug: Se voce nao tiver promotion for so um knight simples e comprar xennys promotion se vira elite knight =/ Ja tentei dar a promotion pelo /attr vocation 10 so que quando eu kiko a pessoa ela volta pro elder druid sera que o bug n eh em outro local nao? Se voce achar que fo eh so me pedir que eu te mando okay Editado Fevereiro 16, 2010 por MatheusMkalo Link para o comentário https://xtibia.com/forum/topic/128300-segunda-promotion/#findComment-846878 Compartilhar em outros sites More sharing options...
Oneshot 732 Postado Fevereiro 16, 2010 Share Postado Fevereiro 16, 2010 (editado) Qual a versão do seu distro? Pode postar seu vocations.xml para eu dar uma olhada? Editado Fevereiro 16, 2010 por Oneshot Link para o comentário https://xtibia.com/forum/topic/128300-segunda-promotion/#findComment-846879 Compartilhar em outros sites More sharing options...
MatheusGlad 424 Postado Fevereiro 16, 2010 Autor Share Postado Fevereiro 16, 2010 (editado) Versao 8.5 e reparei agora no log do server depois de sair e voltar no char da o seguinte erro [Warning - Vocations::getVocation] Vocation 4294967295 not found. <?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="1000" 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="2" gainhpamount="250" gainmanaticks="2" gainmanaamount="750" manamultiplier="1.1" attackspeed="1000" 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="2" gainhpamount="250" gainmanaticks="2" gainmanaamount="750" manamultiplier="1.1" attackspeed="1000" 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="2" gainhpamount="250" gainmanaticks="2" gainmanaamount="625" manamultiplier="1.6" attackspeed="1000" 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="2" gainhpamount="250" gainmanaticks="2" gainmanaamount="625" manamultiplier="4.0" attackspeed="1000" 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="2" gainhpamount="300" gainmanaticks="2" gainmanaamount="900" manamultiplier="1.1" attackspeed="1000" 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="2" gainhpamount="300" gainmanaticks="2" gainmanaamount="900" manamultiplier="1.1" attackspeed="1000" 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="2" gainhpamount="300" gainmanaticks="2" gainmanaamount="700" manamultiplier="1.6" attackspeed="1000" soulmax="200" gainsoulticks="15" fromvoc="3"> <formula meleeDamage="1.0" distDamage="1.1" 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="2" gainhpamount="300" gainmanaticks="2" gainmanaamount="700" manamultiplier="4.0" attackspeed="1000" soulmax="200" gainsoulticks="15" fromvoc="4"> <formula meleeDamage="1.2" distDamage="1.0" defense="1.4" 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="Xennys Sorcerer" description="a Xennys Sorcerer" gaincap="15" gainhp="15" gainmana="60" gainhpticks="1.5" gainhpamount="300000" gainmanaticks="1" gainmanaamount="500000" manamultiplier="1.1" attackspeed="1500" soulmax="300" gainsoulticks="30" 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="10" name="Xennys Druid" description="a Xennys Druid" gaincap="15" gainhp="15" gainmana="60" gainhpticks="2" gainhpamount="300000" gainmanaticks="1" gainmanaamount="500000" manamultiplier="1.1" attackspeed="1500" soulmax="300" gainsoulticks="30" 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="11" name="Xennys Paladin" description="a Xennys Paladin" gaincap="25" gainhp="30" gainmana="30" gainhpticks="2" gainhpamount="400000" gainmanaticks="2" gainmanaamount="400000" manamultiplier="1.6" attackspeed="1500" soulmax="300" gainsoulticks="30" fromvoc="3"> <formula meleeDamage="1.0" distDamage="1.2" 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="Xennys Knight" description="a Xennys Knight" gaincap="30" gainhp="35" gainmana="15" gainhpticks="1" gainhpamount="500000" gainmanaticks="2" gainmanaamount="300000" manamultiplier="4.0" attackspeed="1500" soulmax="300" gainsoulticks="30" fromvoc="4"> <formula meleeDamage="1.3" distDamage="1.0" defense="1.5" 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> Como vejo a versao do distro nunca ouvi fala nisso kkkkk Editado Fevereiro 16, 2010 por MatheusMkalo Link para o comentário https://xtibia.com/forum/topic/128300-segunda-promotion/#findComment-846882 Compartilhar em outros sites More sharing options...
Oneshot 732 Postado Fevereiro 16, 2010 Share Postado Fevereiro 16, 2010 <vocation id="9" name="Xennys Sorcerer" description="a Xennys Sorcerer" gaincap="15" gainhp="15" gainmana="60" gainhpticks="1.5" gainhpamount="300000" gainmanaticks="1" gainmanaamount="500000" manamultiplier="1.1" attackspeed="1500" soulmax="300" gainsoulticks="30" 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="10" name="Xennys Druid" description="a Xennys Druid" gaincap="15" gainhp="15" gainmana="60" gainhpticks="2" gainhpamount="300000" gainmanaticks="1" gainmanaamount="500000" manamultiplier="1.1" attackspeed="1500" soulmax="300" gainsoulticks="30" 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="11" name="Xennys Paladin" description="a Xennys Paladin" gaincap="25" gainhp="30" gainmana="30" gainhpticks="2" gainhpamount="400000" gainmanaticks="2" gainmanaamount="400000" manamultiplier="1.6" attackspeed="1500" soulmax="300" gainsoulticks="30" fromvoc="3"> <formula meleeDamage="1.0" distDamage="1.2" 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="Xennys Knight" description="a Xennys Knight" gaincap="30" gainhp="35" gainmana="15" gainhpticks="1" gainhpamount="500000" gainmanaticks="2" gainmanaamount="300000" manamultiplier="4.0" attackspeed="1500" soulmax="300" gainsoulticks="30" fromvoc="4"> <formula meleeDamage="1.3" distDamage="1.0" defense="1.5" 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> O erro está no valor de fromvoc nas quatro vocações. O fromvoc deveria ser 5 para Xennys Sorcerer, 6 para Xennys Druid, 7 para Xennys Paladin, e 8 para Xennys Knight. Link para o comentário https://xtibia.com/forum/topic/128300-segunda-promotion/#findComment-846885 Compartilhar em outros sites More sharing options...
MatheusGlad 424 Postado Fevereiro 16, 2010 Autor Share Postado Fevereiro 16, 2010 Kara Tenso nao mudou nada a pessoa loga e volta pra a primeira promotion =/ (to te enchendo o saco kkk) Link para o comentário https://xtibia.com/forum/topic/128300-segunda-promotion/#findComment-846888 Compartilhar em outros sites More sharing options...
Visitante Cytrixusa Postado Março 18, 2010 Share Postado Março 18, 2010 estou com mesmo problema..... ja arrumei tudo certo mais nao da certo Link para o comentário https://xtibia.com/forum/topic/128300-segunda-promotion/#findComment-854014 Compartilhar em outros sites More sharing options...
Vszalek 1 Postado Março 25, 2010 Share Postado Março 25, 2010 (editado) Eu tive os mesmos problema no meu server. Depois de pesquisar MUITO consegui um script que funcionasse. Como o seu vocation.xml está certo, como estava no meu, o problema pode ser no script do npc responsável pela troca da classe. Experimente usar esse script, é o mesmo que eu uso. Vá em data/npc/script selecione o arquivo .lua que está linkado o npc que vende a sua promotion. Apague tudo e cole: 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 = 'I can promote you for 20000 gold coins. Do you want me to promote you?'}) node1:addChildKeyword({'yes'}, StdModule.promotePlayer, {npcHandler = npcHandler, cost = 20000, level = 20, promotion = 1, text = 'Congratulations! You are now promoted.'}) node1:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Alright then, come back when you are ready.', reset = true}) local node2 = keywordHandler:addKeyword({'nome da sua vocation'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'frase dita pelo npc'}) node2:addChildKeyword({'yes'}, StdModule.promotePlayer, {npcHandler = npcHandler, cost = 20, level = 40, promotion = 2, text = 'frase dita pelo npc quando você é promovido'}) node2:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Alright then, come back when you are ready.', reset = true})npcHandler:addModule(FocusModule:new()) Espero que isso te ajude, no meu 8.5 deu certo. Desculpe qualquer erro na formatação do post, é o meu primeiro. Boa Sorte Editado Março 25, 2010 por Vszalek Link para o comentário https://xtibia.com/forum/topic/128300-segunda-promotion/#findComment-855881 Compartilhar em outros sites More sharing options...
romera 10 Postado Setembro 6, 2010 Share Postado Setembro 6, 2010 (editado) affz meo tdo mundo da certo n meu n da, mudei 30 coisas q vc disseram, nada melhorrou preciso de ajuda, e quando consigo em algum forum o cra escreve, "sanei a duvida pelo msn", pqp q raiva o cra n podia ter dito EDITED___--- descobri o meu erro haleluia!!! OT - Sql: é assim vai em data/functions -->Bloco de notas apaga tudo e poe isso: 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*$", "%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 Tinha que por as ID's das vocaçoes, (1,5,9)... Não agradeça, so no botao! kkkk Editado Setembro 6, 2010 por romera Link para o comentário https://xtibia.com/forum/topic/128300-segunda-promotion/#findComment-929241 Compartilhar em outros sites More sharing options...
Posts Recomendados