Ir para conteúdo

Segunda Promotion


MatheusGlad

Posts Recomendados

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 por MatheusMkalo
Link para o comentário
Compartilhar em outros sites

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 por Oneshot
Link para o comentário
Compartilhar em outros sites

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 por Oneshot
Link para o comentário
Compartilhar em outros sites

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 por MatheusMkalo
Link para o comentário
Compartilhar em outros sites

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 por MatheusMkalo
Link para o comentário
Compartilhar em outros sites

<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
Compartilhar em outros sites

  • 1 month later...

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 por Vszalek
Link para o comentário
Compartilhar em outros sites

  • 5 months later...

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 por romera
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...