Ir para conteúdo
Banner com Efeitos

Featured Replies

Postado

Estou voltando ao mundo do Open Tibia (na área de desenvolvimento) e estou testando meu potencial em scriptings quando me fiz ausente tinha um conhecimento bom já não tão grande mas quebrava um galho agora voltei e percebi que regredi bastante. Enfim, eu estava pegando uns scripts pra dar uma estudada e me deparei com uma coisa louca e gostaria muito que vocês experientes me ajudassem com isso.
 
Peguei esse script da annihilator lever e está muito louco bem diferente do antigo postarei os dois e gostaria de saber qual a diferença entre os dois e se pudessem me explicar as vantagens e as condições usada no novo pq me embananei todo olhando esse script.

 
Script Novo (que não entendi nada, o que aconteceu com a famosa function onUse(cid, item, frompos, item2, topos)) :
 
local players_area =  {
	{x = 33225, y = 31671, z = 13},
	{x = 33222, y = 31671, z = 13}
}
local new_player_pos = {
	{x = 33222, y = 31659, z = 13},
	{x = 33221, y = 31659, z = 13},
	{x = 33220, y = 31659, z = 13},
	{x = 33219, y = 31659, z = 13}
}
local demonPos = {
	{x = 33219, y = 31657, z = 13},
	{x = 33221, y = 31657, z = 13},
	{x = 33223, y = 31659, z = 13},
	{x = 33224, y = 31659, z = 13},
	{x = 33220, y = 31661, z = 13},
	{x = 33222, y = 31661, z = 13}
}

function getPlayerCountInArea(toPos, fromPos)

	local count = 0
	local cid = {}

	for x = fromPos.x, toPos.x do
		for y = fromPos.y, toPos.y do
			for z = toPos.z, toPos.z do
				local creature = getTopCreature({x = x, y = y, z = z, stackpos = 255}).uid
				if(creature > 0) then
					if(isPlayer(creature)) then
						table.insert(cid, creature)
						count = count + 1
						if(getPlayerLevel(creature) < 100) then
							return "All players must be above level 100."
						end
					elseif(isMonster(creature)) then
						return "Players are allowed only."
					end
				end
			end
		end
	end

	if(count < 4) then
		return "You need 4 players."
	else
		for i = 1,4 do
			Player(cid[5-i]):teleportTo(new_player_pos[i])
			Player(cid[5-i]):getPosition():sendMagicEffect(CONST_ME_TELEPORT)
		end
	end
	return true
end

function SummonDemon(Pos)
local count = 0
local cid = {}
	for x = Pos[1].x, Pos[4].x do
		for y = Pos[1].y, Pos[6].y do
			for z = Pos[1].z, Pos[6].z do
				local creature = getTopCreature({x = x, y = y, z = z, stackpos = 255}).uid
				if(creature > 0) then
					if(isPlayer(creature)) then
						return "A team is already inside the quest room."
					elseif(isMonster(creature)) then
						table.insert(cid, creature)
						count = count + 1
					end
				end
			end
		end
	end
	
	for i = 1, #cid do
		doRemoveCreature(cid[i])
	end

	for i = 1, #Pos do
		doSummonCreature("Demon", Pos[i])
	end
	
	return getPlayerCountInArea(players_area[1], players_area[2])
end

function onUse(cid, item)
	if(item.itemid == 1946) then
		local condition = SummonDemon(demonPos)
		if(condition ~= true) then
			doPlayerSendCancel(cid, condition)
		end
	else
		Item(item.uid):transform(1946)
	end
	return true
end
 
Script Antigo (do qual tenho total conhecimento sobre o que acontece ou não e por que)
-- Alavanca Annihilator Quest
-- by Nottinghster
 
function onUse(cid, item, frompos, item2, topos)
        if item.uid == 7000 and item.itemid == 1945 then
                player1pos = {x=1109, y=1204, z=11, stackpos=253}
                player1 = getThingfromPos(player1pos)
 
                player2pos = {x=1110, y=1204, z=11, stackpos=253}
                player2 = getThingfromPos(player2pos)
 
                player3pos = {x=1111, y=1204, z=11, stackpos=253}
                player3 = getThingfromPos(player3pos)
 
                player4pos = {x=1112, y=1204, z=11, stackpos=253}
                player4 = getThingfromPos(player4pos)
 
 
                if player1.itemid > 0 and player2.itemid > 0 and player3.itemid > 0 and player4.itemid > 0 then
                        queststatus1 = getPlayerStorageValue(player1.uid,7000)
                        queststatus2 = getPlayerStorageValue(player2.uid,7000)
                        queststatus3 = getPlayerStorageValue(player3.uid,7000)
                        queststatus4 = getPlayerStorageValue(player4.uid,7000)
 
                        if queststatus1 == -1 and queststatus2 == -1 and queststatus3 == -1 and queststatus4 == -1 then
                                nplayer1pos = {x=1128, y=1181, z=11}
                                nplayer2pos = {x=1129, y=1181, z=11}
                                nplayer3pos = {x=1130, y=1181, z=11}
                                nplayer4pos = {x=1131, y=1181, z=11}
 
                                doSendMagicEffect(player1pos,2)
                                doSendMagicEffect(player2pos,2)
                                doSendMagicEffect(player3pos,2)
                                doSendMagicEffect(player4pos,2)
 
                                doTeleportThing(player1.uid,nplayer1pos)
                                doTeleportThing(player2.uid,nplayer2pos)
                                doTeleportThing(player3.uid,nplayer3pos)
                                doTeleportThing(player4.uid,nplayer4pos)
 
                                doSendMagicEffect(nplayer1pos,10)
                                doSendMagicEffect(nplayer2pos,10)
                                doSendMagicEffect(nplayer3pos,10)
                                doSendMagicEffect(nplayer4pos,10)
 
                                doTransformItem(item.uid,item.itemid+1)
                        else
                                doPlayerSendCancel(cid,"Alguém em seu time já fez esta quest.")
                        end
                else
                        doPlayerSendCancel(cid,"Você precisa de um grupo de 4 pessoas para esta quest.")
                end
 
        elseif item.uid == 7000 and item.itemid == 1946 then
                if getPlayerAccess(cid) > 0 then
                        doTransformItem(item.uid,item.itemid-1)
                else
                        doPlayerSendCancel(cid,"Desculpe, não é possível.")
                end
        else
                return FALSE
        end
 
        return TRUE
end

Editado por Beyond Sky (veja o histórico de edições)


Medalhas:
1, 2

Qo5DnNn.png

stonedshowoff2_zpsf5409854.png

Resolvido por xWhiteWolf

Ir para solução
Postado
  • Solução

bom, a galera tá usando mais loops [for, while] (digamos que tá na moda) e tão preferindo fazer funções. O script novo é basicamente isso, e sem contar tb que ele é pro TFS novo (1.0) nessa nova versão você pode inserir uma função dentro de outra usando ":" como nesse exemplo aqui

 for i = 1,4 do
            Player(cid[5-i]):teleportTo(new_player_pos[i])

para i = 1,4 fazer:
Player(cid[5-i]): teleportar para (NovaPosiçãoDePlayer)
Ele vai começar com i = 1, daí teremos
Player de numero 4 vai ser teleportado para a posição de numero 1 da table de new_player_pos
dps o player de numero 3 vai ser teleportado pra pos de numero 2... e assim até i = 4.

O resto é meio q entendível percebendo essa lógica das tables.. #Table retorna o numero de elementos que essa Table possui;
No caso local players_area é uma table de 2 elementos.
 

local players_area = {
    {x = 33225, y = 31671, z = 13}, --- PRIMEIRO ELEMENTO
    {x = 33222, y = 31671, z = 13} ---- SEGUNDO
}

já a new _player_pos possui 4 elementos, um pra cada player
 

local new_player_pos = {
    {x = 33222, y = 31659, z = 13},
    {x = 33221, y = 31659, z = 13},
    {x = 33220, y = 31659, z = 13},
    {x = 33219, y = 31659, z = 13}
}

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Conteúdo Similar

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo