Ir para conteúdo
  • Cadastre-se

Scripting Bugando ao morrer no evento


Posts Recomendados

.Qual servidor ou website você utiliza como base? 

 

Qual o motivo deste tópico? 

 

Está surgindo algum erro? Se sim coloque-o aqui. 

Citar

Entao pessoal, estou com um problema em dois eventos no meu ot, pelo que percebi, quando entra no evento buga o modo de morte(creio eu que seja por causa do eventtype igual), pois eu nao estou conseguindo mudar o eventtype.

o bug é o seguinte: no war event, o ultimo player mata o outro, claramente 1 ganha e o outro é eliminado, o player que morre ele é eliminado, mas vai para o templo ao invez de ir para o dp, ou melhor , ele nao vai para a coordenada comandada no script da morte do evento. O bug do Capture The Flag: o player que morre no evento ele nao pode voltar para o dp e nem tempo, pois o evento so termina quando 1 time faz 10 pontos, ou seja nao ha eliminação por morte, enfim, quando um player morre, ele retorna para o templo, como se fosse um morte comum, mas fica com o outfit do evento. 

 

resumindo, por isso eu acho que o erro esteja nesse script que compartilhei, se alguem conseguir me dar uma luz, fazer com que o eventtype seja mudado de nome , pois nao consegui modificar, deu erro na distro.

 

Aguardo uma ajuda de vcs. obrigado!!!!!

Você tem o código disponível? Se tiver publique-o aqui: 

<?xml version="1.0" encoding="UTF-8"?>
<creaturescripts>
    <event type="look" name="eventtimers" event="script" value="event_timers.lua"/>
    <event type="login" name="PlayerLogin" event="script" value="login.lua"/>
    <event type="joinchannel" name="GuildMotd" event="script" value="guildmotd.lua"/>
    <event type="receivemail" name="Mail" event="script" value="mail.lua"/>
    <event type="reportbug" name="SaveReportBug" script="reportbug.lua"/>
    <event type="think" name="Idle" event="script" value="idle.lua"/>
    <event type="think" name="SkullCheck" event="script" value="skullcheck.lua"/>
    <event type="advance" name="AdvanceSave" event="script" value="advancesave.lua"/>
    <event type="joinchannel" name="teamchannels" event="script" value="teamchannels.lua"/>
        <event type="login" name="AdvEffect" script="acc.lua"/>

        
<!--BEGIN CUSTOM SCRIPTS-->
    <event type="preparedeath" name="preparedeath" event="script" value="playerdeath.lua"/>
    <event type="death" name="onDeath" event="script" value="ondeath.lua"/>
    

    <event type="combat" name="GuildAttack" event="script" value="castle wars/guild_attack.lua"/>
    <event type="death" name="KillKing" event="script" value="castle wars/kill_king.lua"/>
    <event type="combat" name="CombatKing" event="script" value="castle wars/combat_king.lua"/>

    <!--Event Arenas-->
    <event type="preparedeath" name="WarDeath" event="script" value="war arena/war_death.lua"/>
    <event type="combat" name="TeamAttack" event="script" value="war arena/team_attack.lua"/>
    <event type="preparedeath" name="CtfDeath" event="script" value="capture the flag/ctf_death.lua"/>
    <!--Event Arenas-->

    <!--Vocation Items-->
    <event type="statschange" name="KnightShieldBlock" event="script" value="buffs/knightshieldblock.lua"/>
    <!--Vocation Items-->
    
    <!--Reflect Spells-->
    <event type="statschange" name="ReflectSpellKnight" event="script" value="spells/reflectknight.lua"/>
    <event type="statschange" name="ReflectSpellPally" event="script" value="spells/reflectpally.lua"/>
    <event type="statschange" name="ReflectSpellMage" event="script" value="spells/reflectmage.lua"/>
    <!--Reflect Spells-->
    
    <!--Death Note-->
    <event type="textedit" name="DeathNote" event="script" value="deathnote.lua"/>
      
    
    
      <event type="kill" name="xmasArena" event="script" value="xmas_Arena.lua"/>  
      
            <event type="kill" name="satan" event="script" value="satanDeath.lua"/>

                  
                  

<!--END CUSTOM SCRIPTS-->
</creaturescripts>
 

 

Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui. 

 

Link para o post
Compartilhar em outros sites

O erro só acontece com o ultimo player?

Deixa eu ver se entendi

 

O ultimo player ta bugando em vez de ir para a cordenada que todos são mandado durante o evento, em vez disso ele ta indo para o templo como se tivesse morrido por uma morte unjust ?

Link para o post
Compartilhar em outros sites
12 horas atrás, Cricket disse:

O erro só acontece com o ultimo player?

Deixa eu ver se entendi

 

O ultimo player ta bugando em vez de ir para a cordenada que todos são mandado durante o evento, em vez disso ele ta indo para o templo como se tivesse morrido por uma morte unjust ?

 

Opa, boa tarde amigo!

 

o erro acontece com qualquer morte dentro do evento.

 

Warevent: é um evento de guerra, quem morre é eliminado do evento e retorna para o dp. ERRO: o erro acontece quando alguem morre, ele teleporta para o templo, sem life e o char nao consegue andar sendo forçado a relogar e o time que ganhou nao esta sendo teleportado para a sala de recompensas. Mas em relação a esse evento eu descobri o defeito, era em uma linha do script chamada doPlayerCloserChannel, apaguei essa linha e o time ganhador passou a ser teleportado para a sala de recompensas, masssss o player eliminado continuou com bug, teleportando para o templo e nao o dp.

 

CaptureTheFlag: é um evento de rouba bandeira, ou seja, pode haver morte dentro do evento, mas o player tem que retornar do ponto inicial do evento, sendo assim nao há player eliminado como no warevent. a vitoria é dada ao time que roubar 10 bandeiras. ERRO: o erro acontece quando um player é morto, quando morre ele é teleportado para o templo e nao para o ponto inicial do evento.

 

sendo assim eu assimilo que possa esta em conflito os scripts de mortes do evento war e capture com as mortes comum do jogo(para monstros ou players).

 

me adc no skype meu amigo, talvez o erro seja bem bobo e nao estou conseguindo ver, la eu posso compartilhar tela e te mostrar os erros e tals ... seria mais facil de vc ter uma ideia do que possa estar acontecendo.

 

Skype: raphael._jaqueline

 

obrigado e espero contar com sua ajuda

Link para o post
Compartilhar em outros sites
6 minutos atrás, luanluciano93 disse:

Poste os dois scripts aqui ...

 

pronto amigo!!... poxa mais eu preferia um contato mais rapido, que seria no skype ou no whats. pois eu mostraria até os erros, e ate mesmo o evento em execução.

 

mas se nao puder, esta ai os dois scripts de morte , tanto no evento war e capture.

ctf_death.lua war_death.lua

Link para o post
Compartilhar em outros sites

Oi querido, no mapa do evento está com o TILE especial (PVP ZONE) ?

 

O ideal era mandar o player para sua cidade natal.

no Evento Capture the flag, pode ser alguma incompatibilidade de funções

Eu sou OT admin, raramente alguém vai criar um script do zero para você ou corrigir um script na escala de um evento ...

Aconselho você encontrar algum free lancer e pagar ele por isso.

Link para o post
Compartilhar em outros sites
2 horas atrás, Cricket disse:

Oi querido, no mapa do evento está com o TILE especial (PVP ZONE) ?

 

O ideal era mandar o player para sua cidade natal.

no Evento Capture the flag, pode ser alguma incompatibilidade de funções

Eu sou OT admin, raramente alguém vai criar um script do zero para você ou corrigir um script na escala de um evento ...

Aconselho você encontrar algum free lancer e pagar ele por isso.

 

pode ser amigo, mas é dificil achar uma pessoa pra ajudar, sites de suporte tibia, ja nao sao mais ativos como antigamente, tinha muito mais suporte.

 

de qualquer forma eu agradeço a sua ajuda e espero q o luanluciano93, possa me ajudar. 

Link para o post
Compartilhar em outros sites
4 horas atrás, Cricket disse:

Aconselho você encontrar algum free lancer e pagar ele por isso.

Isso não é bem vindo aqui.

@Lisbeky poste o seu creaturescript.xml e seu login.lua do creaturescript

Link para o post
Compartilhar em outros sites
17 horas atrás, luanluciano93 disse:

Isso não é bem vindo aqui.

@Lisbeky poste o seu creaturescript.xml e seu login.lua do creaturescript

 

Opa, boa tarde amigo!! esta aqui os dois scripts.  Luan, gostaria de agradeçer pela sua atenção, ja é de uma grande ajuda só em dar atenção ao topico.

 

estou no aguardo!

creaturescripts.xml login.lua

Link para o post
Compartilhar em outros sites

@Lisbeky war_death

local config = {
	redTeam = 1,
	blueTeam = 2,
	gametime = 2000,
	redTeamStorage = 2001,
	blueTeamStorage = 2002,
	outfitRed = {lookType = 128, lookHead = 94, lookAddons = 2, lookLegs = 94, lookBody = 94, lookFeet = 94},
	outfitBlue = {lookType = 128, lookHead = 88, lookAddons = 2, lookLegs = 88, lookBody = 88, lookFeet = 88},
	war = {
		fromPos = {x=638, y=711, z=7, stackpos=253},
		toPos = {x=751, y=780, z=7, stackpos=253},
		rewardRoom = {x=636,y=662,z=7,stackpos=1},
		removePlayer = {x=518, y=840, z=7, stackpos=253}
	}
}

local function TpWinners(cid)
	for _, pid in ipairs(getPlayersOnline()) do
		if isInArea(getPlayerPosition(pid), config.war.fromPos, config.war.toPos) then
			doTeleportThing(pid, config.war.rewardRoom, false)
		end
	end
end

local function winKill(cid, team)
	addEvent(TpWinners, 5000, cid)
	setGlobalStorageValue(config.redTeamStorage, 0)
	setGlobalStorageValue(config.blueTeamStorage, 0)
	doTeleportThing(cid, config.war.removePlayer)
	if team = 1 then
		doBroadcastMessage("Red Team has won the event!")
	elseif team == 2
		doBroadcastMessage("Blue Team has won the event!")
	end
end

local function arenaDeath(cid, team)
	doTeleportThing(cid, config.war.removePlayer)
	doPlayerSendTextMessage(cid,MESSAGE_EVENT_ADVANCE,'You have died, you are eliminated from the event')
	setPlayerStorageValue(cid, 1001, 0)
	setPlayerStorageValue(cid, 1002, 1)
	doRemoveCondition(cid,CONDITION_INFIGHT)
	doRemoveCondition(cid, CONDITION_OUTFIT)
	if team == 1 then
		setGlobalStorageValue(config.redTeamStorage, getGlobalStorageValue(2001) - 1)
	elseif team == 2 then
		setGlobalStorageValue(config.blueTeamStorage, getGlobalStorageValue(2002) - 1)
	end

	if getGlobalStorageValue(2001) == 1 then -- redStorage
		winKill(cid, 2)
	elseif getGlobalStorageValue(2002) == 1 then -- blueStorage
		winKill(cid, 1)
	end
end

function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)

	if isPlayer(cid) == true and getPlayerStorageValue(cid, 1001) > 0 then
		arenaDeath(cid, team)
		return false
	end
	return true
end 

 

Link para o post
Compartilhar em outros sites
Em 27/09/2019 em 21:29, luanluciano93 disse:

@Lisbeky war_death


local config = {
	redTeam = 1,
	blueTeam = 2,
	gametime = 2000,
	redTeamStorage = 2001,
	blueTeamStorage = 2002,
	outfitRed = {lookType = 128, lookHead = 94, lookAddons = 2, lookLegs = 94, lookBody = 94, lookFeet = 94},
	outfitBlue = {lookType = 128, lookHead = 88, lookAddons = 2, lookLegs = 88, lookBody = 88, lookFeet = 88},
	war = {
		fromPos = {x=638, y=711, z=7, stackpos=253},
		toPos = {x=751, y=780, z=7, stackpos=253},
		rewardRoom = {x=636,y=662,z=7,stackpos=1},
		removePlayer = {x=518, y=840, z=7, stackpos=253}
	}
}

local function TpWinners(cid)
	for _, pid in ipairs(getPlayersOnline()) do
		if isInArea(getPlayerPosition(pid), config.war.fromPos, config.war.toPos) then
			doTeleportThing(pid, config.war.rewardRoom, false)
		end
	end
end

local function winKill(cid, team)
	addEvent(TpWinners, 5000, cid)
	setGlobalStorageValue(config.redTeamStorage, 0)
	setGlobalStorageValue(config.blueTeamStorage, 0)
	doTeleportThing(cid, config.war.removePlayer)
	if team = 1 then
		doBroadcastMessage("Red Team has won the event!")
	elseif team == 2
		doBroadcastMessage("Blue Team has won the event!")
	end
end

local function arenaDeath(cid, team)
	doTeleportThing(cid, config.war.removePlayer)
	doPlayerSendTextMessage(cid,MESSAGE_EVENT_ADVANCE,'You have died, you are eliminated from the event')
	setPlayerStorageValue(cid, 1001, 0)
	setPlayerStorageValue(cid, 1002, 1)
	doRemoveCondition(cid,CONDITION_INFIGHT)
	doRemoveCondition(cid, CONDITION_OUTFIT)
	if team == 1 then
		setGlobalStorageValue(config.redTeamStorage, getGlobalStorageValue(2001) - 1)
	elseif team == 2 then
		setGlobalStorageValue(config.blueTeamStorage, getGlobalStorageValue(2002) - 1)
	end

	if getGlobalStorageValue(2001) == 1 then -- redStorage
		winKill(cid, 2)
	elseif getGlobalStorageValue(2002) == 1 then -- blueStorage
		winKill(cid, 1)
	end
end

function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)

	if isPlayer(cid) == true and getPlayerStorageValue(cid, 1001) > 0 then
		arenaDeath(cid, team)
		return false
	end
	return true
end 

 

opa fala meu amigo! se eu tivesse visto na sexta, teria feito o teste ja hahahaha . bom fiz a mudança que vc pediu do script, e deu um erro na distro....

 

[30/09/2019 15:33:23] [Error - LuaScriptInterface::loadFile] data/creaturescripts/scripts/war arena/war_death.lua:30: 'then' expected near '='
[30/09/2019 15:33:23] [Warning - Event::loadScript] Cannot load script (data/creaturescripts/scripts/war arena/war_death.lua)
[30/09/2019 15:33:23] data/creaturescripts/scripts/war arena/war_death.lua:30: 'then' expected near '='

 

 

Link para o post
Compartilhar em outros sites
4 minutos atrás, ernaix69 disse:

esse evento provavelmente seta uma town id quando o jogador entra nele, verifique se as town id sao as mesmas q estao no seu mapa.

 

é sim amigo... tanto que divide o time certinho, apenas o q esta bugando sao as mortes.

Link para o post
Compartilhar em outros sites

war_death 

local config = {
	redTeam = 1,
	blueTeam = 2,
	gametime = 2000,
	redTeamStorage = 2001,
	blueTeamStorage = 2002,
	outfitRed = {lookType = 128, lookHead = 94, lookAddons = 2, lookLegs = 94, lookBody = 94, lookFeet = 94},
	outfitBlue = {lookType = 128, lookHead = 88, lookAddons = 2, lookLegs = 88, lookBody = 88, lookFeet = 88},
	war = {
		fromPos = {x=638, y=711, z=7, stackpos=253},
		toPos = {x=751, y=780, z=7, stackpos=253},
		rewardRoom = {x=636,y=662,z=7,stackpos=1},
		removePlayer = {x=518, y=840, z=7, stackpos=253}
	}
}

local function TpWinners(cid)
	for _, pid in ipairs(getPlayersOnline()) do
		if isInArea(getPlayerPosition(pid), config.war.fromPos, config.war.toPos) then
			doTeleportThing(pid, config.war.rewardRoom, false)
		end
	end
end

local function winKill(cid, team)
	addEvent(TpWinners, 5000, cid)
	setGlobalStorageValue(config.redTeamStorage, 0)
	setGlobalStorageValue(config.blueTeamStorage, 0)
	doTeleportThing(cid, config.war.removePlayer)
	if team == 1 then
		doBroadcastMessage("Red Team has won the event!")
	elseif team == 2
		doBroadcastMessage("Blue Team has won the event!")
	end
end

local function arenaDeath(cid, team)
	doTeleportThing(cid, config.war.removePlayer)
	doPlayerSendTextMessage(cid,MESSAGE_EVENT_ADVANCE,'You have died, you are eliminated from the event')
	setPlayerStorageValue(cid, 1001, 0)
	setPlayerStorageValue(cid, 1002, 1)
	doRemoveCondition(cid,CONDITION_INFIGHT)
	doRemoveCondition(cid, CONDITION_OUTFIT)
	if team == 1 then
		setGlobalStorageValue(config.redTeamStorage, getGlobalStorageValue(2001) - 1)
	elseif team == 2 then
		setGlobalStorageValue(config.blueTeamStorage, getGlobalStorageValue(2002) - 1)
	end

	if getGlobalStorageValue(2001) == 1 then -- redStorage
		winKill(cid, 2)
	elseif getGlobalStorageValue(2002) == 1 then -- blueStorage
		winKill(cid, 1)
	end
end

function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)

	if isPlayer(cid) == true and getPlayerStorageValue(cid, 1001) > 0 then
		arenaDeath(cid, team)
		return false
	end
	return true
end 

ctf_death 

local config = {
	redTeam = 3,
	blueTeam = 4,
	redSide = {x=676, y=499, z=7, stackpos=253},
	blueSide = {x=744, y=520, z=7, stackpos=253},
	flagDropRed = 'Red Team has dropped the flag.',
	flagDropBlue = 'Blue Team has dropped the flag.'
}

function onPrepareDeath(cid, deathList)
	if not isPlayer(cid) and getPlayerStorageValue(cid, 1001) < 1 then
		return true
	end

	local flagPosRed = {x=676,y=503,z=7,stackpos=0}
	local flagPosBlue = {x=744,y=523,z=7,stackpos=0}
	local hasFlag = getPlayerStorageValue(cid, 2015)

	local killer = 1
	local assister = 2
	local kills = 65530
	local deaths = 65529
	local getDeaths = getPlayerStorageValue(cid,deaths)
	local getKills = getPlayerStorageValue(deathList[killer],kills)

	if getPlayerStorageValue(cid, 1001) == config.redTeam or getPlayerStorageValue(cid, 1001) == config.blueTeam then
		
		if getPlayerStorageValue(cid, 1001) == config.redTeam then
			setPlayerStorageValue(cid, 1003, 1)
			doTeleportThing(cid, config.redSide)
		elseif getPlayerStorageValue(cid, 1001) == config.blueTeam then
			setPlayerStorageValue(cid, 1004, 1)
			doTeleportThing(cid, config.blueSide)
		end

		doRemoveCondition(cid,CONDITION_INFIGHT)

		if getPlayerStorageValue(deathList[killer],kills) < 1 then
			setPlayerStorageValue(deathList[killer], kills, 1)
		else
			setPlayerStorageValue(deathList[killer], kills, getKills + 1)
		end
		
		if getPlayerStorageValue(cid,deaths) < 1 then
			setPlayerStorageValue(cid,deaths, 1)
		else
			setPlayerStorageValue(cid,deaths, getDeaths + 1)
		end

		if hasFlag >= 1 then
			if getPlayerStorageValue(cid,1001) == config.redTeam then
				doSetItemActionId(getThingFromPos(flagPosBlue).uid, 100)
				doBroadcastMessage(config.flagDropRed)
			elseif getPlayerStorageValue(cid, 1001) == config.blueTeam then
				doSetItemActionId(getThingFromPos(flagPosRed).uid, 100)
				doBroadcastMessage(config.flagDropBlue)
			end

			doPlayerSendTextMessage(cid,MESSAGE_EVENT_ADVANCE,'You dropped the flag!')
			setPlayerStorageValue(cid,2015, 0)
		
			if getPlayerStorageValue(deathList[killer],65532) < 1 then
				setPlayerStorageValue(deathList[killer], 65532, 1)
			else
				setPlayerStorageValue(deathList[killer], 65532, getPlayerStorageValue(deathList[killer],65532) + 1)
			end
			
			if isPlayer(deathList[assister]) == true then
				if getPlayerStorageValue(deathList[assister],65531) < 1 then
					setPlayerStorageValue(deathList[assister], 65531, 1)
				else
					setPlayerStorageValue(deathList[assister], 65531, getPlayerStorageValue(deathList[assister],65531) + 1)
				end
			end
		end
		return false
	end
	return true
end 

 

Link para o post
Compartilhar em outros sites
43 minutos atrás, luanluciano93 disse:

war_death 


local config = {
	redTeam = 1,
	blueTeam = 2,
	gametime = 2000,
	redTeamStorage = 2001,
	blueTeamStorage = 2002,
	outfitRed = {lookType = 128, lookHead = 94, lookAddons = 2, lookLegs = 94, lookBody = 94, lookFeet = 94},
	outfitBlue = {lookType = 128, lookHead = 88, lookAddons = 2, lookLegs = 88, lookBody = 88, lookFeet = 88},
	war = {
		fromPos = {x=638, y=711, z=7, stackpos=253},
		toPos = {x=751, y=780, z=7, stackpos=253},
		rewardRoom = {x=636,y=662,z=7,stackpos=1},
		removePlayer = {x=518, y=840, z=7, stackpos=253}
	}
}

local function TpWinners(cid)
	for _, pid in ipairs(getPlayersOnline()) do
		if isInArea(getPlayerPosition(pid), config.war.fromPos, config.war.toPos) then
			doTeleportThing(pid, config.war.rewardRoom, false)
		end
	end
end

local function winKill(cid, team)
	addEvent(TpWinners, 5000, cid)
	setGlobalStorageValue(config.redTeamStorage, 0)
	setGlobalStorageValue(config.blueTeamStorage, 0)
	doTeleportThing(cid, config.war.removePlayer)
	if team == 1 then
		doBroadcastMessage("Red Team has won the event!")
	elseif team == 2
		doBroadcastMessage("Blue Team has won the event!")
	end
end

local function arenaDeath(cid, team)
	doTeleportThing(cid, config.war.removePlayer)
	doPlayerSendTextMessage(cid,MESSAGE_EVENT_ADVANCE,'You have died, you are eliminated from the event')
	setPlayerStorageValue(cid, 1001, 0)
	setPlayerStorageValue(cid, 1002, 1)
	doRemoveCondition(cid,CONDITION_INFIGHT)
	doRemoveCondition(cid, CONDITION_OUTFIT)
	if team == 1 then
		setGlobalStorageValue(config.redTeamStorage, getGlobalStorageValue(2001) - 1)
	elseif team == 2 then
		setGlobalStorageValue(config.blueTeamStorage, getGlobalStorageValue(2002) - 1)
	end

	if getGlobalStorageValue(2001) == 1 then -- redStorage
		winKill(cid, 2)
	elseif getGlobalStorageValue(2002) == 1 then -- blueStorage
		winKill(cid, 1)
	end
end

function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)

	if isPlayer(cid) == true and getPlayerStorageValue(cid, 1001) > 0 then
		arenaDeath(cid, team)
		return false
	end
	return true
end 

ctf_death 


local config = {
	redTeam = 3,
	blueTeam = 4,
	redSide = {x=676, y=499, z=7, stackpos=253},
	blueSide = {x=744, y=520, z=7, stackpos=253},
	flagDropRed = 'Red Team has dropped the flag.',
	flagDropBlue = 'Blue Team has dropped the flag.'
}

function onPrepareDeath(cid, deathList)
	if not isPlayer(cid) and getPlayerStorageValue(cid, 1001) < 1 then
		return true
	end

	local flagPosRed = {x=676,y=503,z=7,stackpos=0}
	local flagPosBlue = {x=744,y=523,z=7,stackpos=0}
	local hasFlag = getPlayerStorageValue(cid, 2015)

	local killer = 1
	local assister = 2
	local kills = 65530
	local deaths = 65529
	local getDeaths = getPlayerStorageValue(cid,deaths)
	local getKills = getPlayerStorageValue(deathList[killer],kills)

	if getPlayerStorageValue(cid, 1001) == config.redTeam or getPlayerStorageValue(cid, 1001) == config.blueTeam then
		
		if getPlayerStorageValue(cid, 1001) == config.redTeam then
			setPlayerStorageValue(cid, 1003, 1)
			doTeleportThing(cid, config.redSide)
		elseif getPlayerStorageValue(cid, 1001) == config.blueTeam then
			setPlayerStorageValue(cid, 1004, 1)
			doTeleportThing(cid, config.blueSide)
		end

		doRemoveCondition(cid,CONDITION_INFIGHT)

		if getPlayerStorageValue(deathList[killer],kills) < 1 then
			setPlayerStorageValue(deathList[killer], kills, 1)
		else
			setPlayerStorageValue(deathList[killer], kills, getKills + 1)
		end
		
		if getPlayerStorageValue(cid,deaths) < 1 then
			setPlayerStorageValue(cid,deaths, 1)
		else
			setPlayerStorageValue(cid,deaths, getDeaths + 1)
		end

		if hasFlag >= 1 then
			if getPlayerStorageValue(cid,1001) == config.redTeam then
				doSetItemActionId(getThingFromPos(flagPosBlue).uid, 100)
				doBroadcastMessage(config.flagDropRed)
			elseif getPlayerStorageValue(cid, 1001) == config.blueTeam then
				doSetItemActionId(getThingFromPos(flagPosRed).uid, 100)
				doBroadcastMessage(config.flagDropBlue)
			end

			doPlayerSendTextMessage(cid,MESSAGE_EVENT_ADVANCE,'You dropped the flag!')
			setPlayerStorageValue(cid,2015, 0)
		
			if getPlayerStorageValue(deathList[killer],65532) < 1 then
				setPlayerStorageValue(deathList[killer], 65532, 1)
			else
				setPlayerStorageValue(deathList[killer], 65532, getPlayerStorageValue(deathList[killer],65532) + 1)
			end
			
			if isPlayer(deathList[assister]) == true then
				if getPlayerStorageValue(deathList[assister],65531) < 1 then
					setPlayerStorageValue(deathList[assister], 65531, 1)
				else
					setPlayerStorageValue(deathList[assister], 65531, getPlayerStorageValue(deathList[assister],65531) + 1)
				end
			end
		end
		return false
	end
	return true
end 

 

 

opa, deu um erro no distro luan.

 

[Error - LuaScriptInterface::loadFile] data/creaturescripts/scripts/war arena/war_death.lua:33: 'then' expected near 'doBroadcastMessage'
[30/09/2019 20:43:34] [Warning - Event::loadScript] Cannot load script (data/creaturescripts/scripts/war arena/war_death.lua)
[30/09/2019 20:43:34] data/creaturescripts/scripts/war arena/war_death.lua:33: 'then' expected near 'doBroadcastMessage'

 

 

 

 

Luan, apesar do erro ter sido somente no war_death, eu fiz um teste para ver se da erro no ctf_death e o bug permanece, morreu vai para o templo.

Luan vou te passar todas os scripts dos eventos e vc da uma olhada se ha alguma duplicação ou algo nos códigos que possam esta entrando em conflito.

 

creaturescript: creaturescript, war_death, ctf_death, team_attack

globalevents: events

movements: movements, multi_block, stealth_ring, set_teams(war), blue_flag_plate, ctf_determine_winner, ctf_set_teams, red_flag_plate, blue_flag_score, ctf_score, red_flag_score.

 

caso não vá separado por pastas, eu descrevi aqui em cima o destino delas.

 

por via das duvidas, mandei tudo. 

 

mas uma vez obrigado Luan, não desista de mim pls.

creaturescripts.xml events.lua globalevents.xml ctf_death.lua team_attack.lua war_death.lua movements.xml Blue_Flag_Plate.lua ctf_determine_winner.lua ctf_set_teams.lua Blue_Flag_Score.lua ctf_score.lua Red_Flag_Score.lua Red_Flag_Plate.lua multi_block.lua stealth_ring.lua set_teams.lua

Editado por Lisbeky (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
local config = {
	redTeam = 1,
	blueTeam = 2,
	gametime = 2000,
	redTeamStorage = 2001,
	blueTeamStorage = 2002,
	outfitRed = {lookType = 128, lookHead = 94, lookAddons = 2, lookLegs = 94, lookBody = 94, lookFeet = 94},
	outfitBlue = {lookType = 128, lookHead = 88, lookAddons = 2, lookLegs = 88, lookBody = 88, lookFeet = 88},
	war = {
		fromPos = {x=638, y=711, z=7, stackpos=253},
		toPos = {x=751, y=780, z=7, stackpos=253},
		rewardRoom = {x=636,y=662,z=7,stackpos=1},
		removePlayer = {x=518, y=840, z=7, stackpos=253}
	}
}

local function TpWinners(cid)
	for _, pid in ipairs(getPlayersOnline()) do
		if isInArea(getPlayerPosition(pid), config.war.fromPos, config.war.toPos) then
			doTeleportThing(pid, config.war.rewardRoom, false)
		end
	end
end

local function winKill(cid, team)
	addEvent(TpWinners, 5000, cid)
	setGlobalStorageValue(config.redTeamStorage, 0)
	setGlobalStorageValue(config.blueTeamStorage, 0)
	doTeleportThing(cid, config.war.removePlayer)
	if team == 1 then
		doBroadcastMessage("Red Team has won the event!")
	elseif team == 2 then
		doBroadcastMessage("Blue Team has won the event!")
	end
end

local function arenaDeath(cid, team)
	doTeleportThing(cid, config.war.removePlayer)
	doPlayerSendTextMessage(cid,MESSAGE_EVENT_ADVANCE,'You have died, you are eliminated from the event')
	setPlayerStorageValue(cid, 1001, 0)
	setPlayerStorageValue(cid, 1002, 1)
	doRemoveCondition(cid,CONDITION_INFIGHT)
	doRemoveCondition(cid, CONDITION_OUTFIT)
	if team == 1 then
		setGlobalStorageValue(config.redTeamStorage, getGlobalStorageValue(2001) - 1)
	elseif team == 2 then
		setGlobalStorageValue(config.blueTeamStorage, getGlobalStorageValue(2002) - 1)
	end

	if getGlobalStorageValue(2001) == 1 then -- redStorage
		winKill(cid, 2)
	elseif getGlobalStorageValue(2002) == 1 then -- blueStorage
		winKill(cid, 1)
	end
end

function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)

	if isPlayer(cid) == true and getPlayerStorageValue(cid, 1001) > 0 then
		arenaDeath(cid, team)
		return false
	end
	return true
end 

 

Link para o post
Compartilhar em outros sites
7 horas atrás, luanluciano93 disse:

local config = {
	redTeam = 1,
	blueTeam = 2,
	gametime = 2000,
	redTeamStorage = 2001,
	blueTeamStorage = 2002,
	outfitRed = {lookType = 128, lookHead = 94, lookAddons = 2, lookLegs = 94, lookBody = 94, lookFeet = 94},
	outfitBlue = {lookType = 128, lookHead = 88, lookAddons = 2, lookLegs = 88, lookBody = 88, lookFeet = 88},
	war = {
		fromPos = {x=638, y=711, z=7, stackpos=253},
		toPos = {x=751, y=780, z=7, stackpos=253},
		rewardRoom = {x=636,y=662,z=7,stackpos=1},
		removePlayer = {x=518, y=840, z=7, stackpos=253}
	}
}

local function TpWinners(cid)
	for _, pid in ipairs(getPlayersOnline()) do
		if isInArea(getPlayerPosition(pid), config.war.fromPos, config.war.toPos) then
			doTeleportThing(pid, config.war.rewardRoom, false)
		end
	end
end

local function winKill(cid, team)
	addEvent(TpWinners, 5000, cid)
	setGlobalStorageValue(config.redTeamStorage, 0)
	setGlobalStorageValue(config.blueTeamStorage, 0)
	doTeleportThing(cid, config.war.removePlayer)
	if team == 1 then
		doBroadcastMessage("Red Team has won the event!")
	elseif team == 2 then
		doBroadcastMessage("Blue Team has won the event!")
	end
end

local function arenaDeath(cid, team)
	doTeleportThing(cid, config.war.removePlayer)
	doPlayerSendTextMessage(cid,MESSAGE_EVENT_ADVANCE,'You have died, you are eliminated from the event')
	setPlayerStorageValue(cid, 1001, 0)
	setPlayerStorageValue(cid, 1002, 1)
	doRemoveCondition(cid,CONDITION_INFIGHT)
	doRemoveCondition(cid, CONDITION_OUTFIT)
	if team == 1 then
		setGlobalStorageValue(config.redTeamStorage, getGlobalStorageValue(2001) - 1)
	elseif team == 2 then
		setGlobalStorageValue(config.blueTeamStorage, getGlobalStorageValue(2002) - 1)
	end

	if getGlobalStorageValue(2001) == 1 then -- redStorage
		winKill(cid, 2)
	elseif getGlobalStorageValue(2002) == 1 then -- blueStorage
		winKill(cid, 1)
	end
end

function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)

	if isPlayer(cid) == true and getPlayerStorageValue(cid, 1001) > 0 then
		arenaDeath(cid, team)
		return false
	end
	return true
end 

 

 

bom dia luan... fiz um teste rapidinho agora de manha, antes de ir trabalhar e nao deu erro na distro, fiz um teste dentro do evento e o player que morre dentro do war_event ele teleporta para o templo, mas a diferenca esta em que a msg de eliminação é mostrada e é removida o outifit. Se ficasse assim estava otimo, mas aconteceu que o player que sobrou no evento, agora nao foi teleportado para a sala de recompensas.

 

sobre o ctf eu testei tambem, e esta teleportando para o templo ainda e nao para o ponto inicial do evento.

 

um detalhe que eu nao disse, os testes que eu estou fazendo , eu nao estou deixando o evento executar no tempo, no globalevents, estou testando pisando no tile diretamente. será que pode ser esse o motivo do bug?

Link para o post
Compartilhar em outros sites
local config = {
	redTeam = 1,
	blueTeam = 2,
	gametime = 2000,
	redTeamStorage = 2001,
	blueTeamStorage = 2002,
	outfitRed = {lookType = 128, lookHead = 94, lookAddons = 2, lookLegs = 94, lookBody = 94, lookFeet = 94},
	outfitBlue = {lookType = 128, lookHead = 88, lookAddons = 2, lookLegs = 88, lookBody = 88, lookFeet = 88},
	war = {
		fromPos = {x=638, y=711, z=7, stackpos=253},
		toPos = {x=751, y=780, z=7, stackpos=253},
		rewardRoom = {x=636,y=662,z=7,stackpos=1},
		removePlayer = {x=518, y=840, z=7, stackpos=253}
	}
}

local function TpWinners(cid)
	for _, pid in ipairs(getPlayersOnline()) do
		if isInArea(getPlayerPosition(pid), config.war.fromPos, config.war.toPos) then
			doTeleportThing(pid, config.war.rewardRoom, false)
		end
	end
end

local function winKill(cid, team)
	addEvent(TpWinners, 5000, cid)
	setGlobalStorageValue(config.redTeamStorage, 0)
	setGlobalStorageValue(config.blueTeamStorage, 0)
	if team == 1 then
		doBroadcastMessage("Red Team has won the event!")
	elseif team == 2 then
		doBroadcastMessage("Blue Team has won the event!")
	end
end

local function arenaDeath(cid, team)
	doTeleportThing(cid, config.war.removePlayer)
	doPlayerSendTextMessage(cid,MESSAGE_EVENT_ADVANCE,'You have died, you are eliminated from the event')
	setPlayerStorageValue(cid, 1001, 0)
	setPlayerStorageValue(cid, 1002, 1)
	doRemoveCondition(cid,CONDITION_INFIGHT)
	doRemoveCondition(cid, CONDITION_OUTFIT)
	if team == 1 then
		setGlobalStorageValue(config.redTeamStorage, getGlobalStorageValue(2001) - 1)
	elseif team == 2 then
		setGlobalStorageValue(config.blueTeamStorage, getGlobalStorageValue(2002) - 1)
	end

	if getGlobalStorageValue(2001) == 1 then -- redStorage
		winKill(cid, 2)
	elseif getGlobalStorageValue(2002) == 1 then -- blueStorage
		winKill(cid, 1)
	end
end

function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)

	if isPlayer(cid) == true and getPlayerStorageValue(cid, 1001) > 0 then
		arenaDeath(cid, team)
		return false
	end
	return true
end 

 

Link para o post
Compartilhar em outros sites
11 horas atrás, luanluciano93 disse:

local config = {
	redTeam = 1,
	blueTeam = 2,
	gametime = 2000,
	redTeamStorage = 2001,
	blueTeamStorage = 2002,
	outfitRed = {lookType = 128, lookHead = 94, lookAddons = 2, lookLegs = 94, lookBody = 94, lookFeet = 94},
	outfitBlue = {lookType = 128, lookHead = 88, lookAddons = 2, lookLegs = 88, lookBody = 88, lookFeet = 88},
	war = {
		fromPos = {x=638, y=711, z=7, stackpos=253},
		toPos = {x=751, y=780, z=7, stackpos=253},
		rewardRoom = {x=636,y=662,z=7,stackpos=1},
		removePlayer = {x=518, y=840, z=7, stackpos=253}
	}
}

local function TpWinners(cid)
	for _, pid in ipairs(getPlayersOnline()) do
		if isInArea(getPlayerPosition(pid), config.war.fromPos, config.war.toPos) then
			doTeleportThing(pid, config.war.rewardRoom, false)
		end
	end
end

local function winKill(cid, team)
	addEvent(TpWinners, 5000, cid)
	setGlobalStorageValue(config.redTeamStorage, 0)
	setGlobalStorageValue(config.blueTeamStorage, 0)
	if team == 1 then
		doBroadcastMessage("Red Team has won the event!")
	elseif team == 2 then
		doBroadcastMessage("Blue Team has won the event!")
	end
end

local function arenaDeath(cid, team)
	doTeleportThing(cid, config.war.removePlayer)
	doPlayerSendTextMessage(cid,MESSAGE_EVENT_ADVANCE,'You have died, you are eliminated from the event')
	setPlayerStorageValue(cid, 1001, 0)
	setPlayerStorageValue(cid, 1002, 1)
	doRemoveCondition(cid,CONDITION_INFIGHT)
	doRemoveCondition(cid, CONDITION_OUTFIT)
	if team == 1 then
		setGlobalStorageValue(config.redTeamStorage, getGlobalStorageValue(2001) - 1)
	elseif team == 2 then
		setGlobalStorageValue(config.blueTeamStorage, getGlobalStorageValue(2002) - 1)
	end

	if getGlobalStorageValue(2001) == 1 then -- redStorage
		winKill(cid, 2)
	elseif getGlobalStorageValue(2002) == 1 then -- blueStorage
		winKill(cid, 1)
	end
end

function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)

	if isPlayer(cid) == true and getPlayerStorageValue(cid, 1001) > 0 then
		arenaDeath(cid, team)
		return false
	end
	return true
end 

 

 

Luan, fiz um teste aqui agora. 

 

o player que morre ele é teleportado para o local de eliminação, sem life, entao rapidamente, é teleportado para o templo, com a msg de eliminação e não deu erro na distro.

outra coisa esta acontecendo, quando o time vermelho ou azul ganha, tanto faz, a msg de vitoria aparece como se o time azul fosse ganhador sempre, mesmo se o vermelho ganhar. na hora de teleportar para a sala de recompensas, esta certinho. so as msgs de vitorias.

 

obrigado irmao putiz rsrs to feliz, esta quase 100%.

 

mas sendo que o capture the flag, ainda esta dando problema... ele morre e volta para o templo, mas ele vai para o templo com o outifit do evento ainda, ou seja ele deveria voltar para o evento. é so esse problema que esta dando.

 

 

Luan... estou dando uma olhada aqui, tipo entendo pouco de script, mas tudo se forma em uma logica de funçoes correto? pois bem, reparou que vc ja mudou varias vezes e o problema em si esta ruim de ser resolvido(apesar de ter dado uma avanço otimo neste ultimo feedback q vc deu). 

 

então eu estava analisando aqui os scripts e reparei que no:

 

war event: a função de morte esta nesta linha aqui...

 

function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)

    if isPlayer(cid) == true and getPlayerStorageValue(cid, 1001) > 0 then
        arenaDeath(cid, team)

_________________________________________________________________________________________________

 

Ctf : a função de morte esta nesta linha aqui...

 

function onPrepareDeath(cid, deathList)
    if not isPlayer(cid) and getPlayerStorageValue(cid, 1001) < 1 then

_________________________________________________________________________________________________

 

se parar para analisar há uma coisa em comum com as mortes comuns de player... vejamos isso no script de morte comum.

 

Morte comum: a função da morte esta nesta linha aqui...

 

function onPrepareDeath(cid, deathList)
           if (isPlayer(cid) and (math.abs(config.deadProtection) >= getPlayerLevel(cid))) then
            doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
            setPlayerStorageValue(cid, 6612, 1)
            addEvent(relogPlayer, 1000, cid)

_______________________________________________________________________________________________

 

resumindo, essa função onPrepareDeath ela aparece nos 3 eventos. 

 

vendo ele no creaturescript.xml :

 

<event type="preparedeath" name="Death" event="script" value="playerdeath.lua"/>

<event type="preparedeath" name="WarDeath" event="script" value="war arena/war_death.lua"/>

<event type="preparedeath" name="CtfDeath" event="script" value="capture the flag/ctf_death.lua"/>

 

 

concluindo minha analise, os 3 eventos : war, ctf e morte comuns estão com o mesmo eventtype.

 

como um mero curioso de script(copie e cole kkkkk), será que nao tem como mudar o eventtype do war e do capture the flag? para fzer um teste.

 

ou vc quem conhece bem sobre script, ja descarta esta possibilidade? 

Editado por Lisbeky (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
Em 01/10/2019 em 09:49, luanluciano93 disse:

local config = {
	redTeam = 1,
	blueTeam = 2,
	gametime = 2000,
	redTeamStorage = 2001,
	blueTeamStorage = 2002,
	outfitRed = {lookType = 128, lookHead = 94, lookAddons = 2, lookLegs = 94, lookBody = 94, lookFeet = 94},
	outfitBlue = {lookType = 128, lookHead = 88, lookAddons = 2, lookLegs = 88, lookBody = 88, lookFeet = 88},
	war = {
		fromPos = {x=638, y=711, z=7, stackpos=253},
		toPos = {x=751, y=780, z=7, stackpos=253},
		rewardRoom = {x=636,y=662,z=7,stackpos=1},
		removePlayer = {x=518, y=840, z=7, stackpos=253}
	}
}

local function TpWinners(cid)
	for _, pid in ipairs(getPlayersOnline()) do
		if isInArea(getPlayerPosition(pid), config.war.fromPos, config.war.toPos) then
			doTeleportThing(pid, config.war.rewardRoom, false)
		end
	end
end

local function winKill(cid, team)
	addEvent(TpWinners, 5000, cid)
	setGlobalStorageValue(config.redTeamStorage, 0)
	setGlobalStorageValue(config.blueTeamStorage, 0)
	if team == 1 then
		doBroadcastMessage("Red Team has won the event!")
	elseif team == 2 then
		doBroadcastMessage("Blue Team has won the event!")
	end
end

local function arenaDeath(cid, team)
	doTeleportThing(cid, config.war.removePlayer)
	doPlayerSendTextMessage(cid,MESSAGE_EVENT_ADVANCE,'You have died, you are eliminated from the event')
	setPlayerStorageValue(cid, 1001, 0)
	setPlayerStorageValue(cid, 1002, 1)
	doRemoveCondition(cid,CONDITION_INFIGHT)
	doRemoveCondition(cid, CONDITION_OUTFIT)
	if team == 1 then
		setGlobalStorageValue(config.redTeamStorage, getGlobalStorageValue(2001) - 1)
	elseif team == 2 then
		setGlobalStorageValue(config.blueTeamStorage, getGlobalStorageValue(2002) - 1)
	end

	if getGlobalStorageValue(2001) == 1 then -- redStorage
		winKill(cid, 2)
	elseif getGlobalStorageValue(2002) == 1 then -- blueStorage
		winKill(cid, 1)
	end
end

function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)

	if isPlayer(cid) == true and getPlayerStorageValue(cid, 1001) > 0 then
		arenaDeath(cid, team)
		return false
	end
	return true
end 

 

 

@luanluciano93 caso vc não queira mais me dar um suporte em meu poster, teria como vc me comunicar ? só para eu não ficar aguardando e criando expectativa. 

Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Conteúdo Similar

    • Por cloudrun2023
      CloudRun - Sua Melhor Escolha para Hospedagem de OTServer!
      Você está procurando a solução definitiva para hospedar seu OTServer com desempenho imbatível e segurança inigualável? Não procure mais! Apresentamos a CloudRun, sua parceira confiável em serviços de hospedagem na nuvem.
       
      Recursos Exclusivos - Proteção DDoS Avançada:
      Mantenha seu OTServer online e seguro com nossa robusta proteção DDoS, garantindo uma experiência de jogo ininterrupta para seus jogadores.
       
      Servidores Ryzen 7 Poderosos: Desfrute do poder de processamento superior dos servidores Ryzen 7 para garantir um desempenho excepcional do seu OTServer. Velocidade e estabilidade garantidas!
       
      Armazenamento NVMe de Alta Velocidade:
      Reduza o tempo de carregamento do jogo com nosso armazenamento NVMe ultrarrápido. Seus jogadores vão adorar a rapidez com que podem explorar o mundo do seu OTServer.
       
      Uplink de até 1GB:
      Oferecemos uma conexão de alta velocidade com até 1GB de largura de banda, garantindo uma experiência de jogo suave e livre de lag para todos os seus jogadores, mesmo nos momentos de pico.
       
      Suporte 24 Horas:
      Estamos sempre aqui para você! Nossa equipe de suporte está disponível 24 horas por dia, 7 dias por semana, para resolver qualquer problema ou responder a qualquer pergunta que você possa ter. Sua satisfação é a nossa prioridade.
       
      Fácil e Rápido de Começar:
      Configurar seu OTServer na CloudRun é simples e rápido. Concentre-se no desenvolvimento do seu jogo enquanto cuidamos da hospedagem.
       
      Entre em Contato Agora!
      Website: https://central.cloudrun.com.br/index.php?rp=/store/cloud-ryzen-brasil
      Email: [email protected]
      Telefone: (47) 99902-5147

      Não comprometa a qualidade da hospedagem do seu OTServer. Escolha a CloudRun e ofereça aos seus jogadores a melhor experiência de jogo possível. Visite nosso site hoje mesmo para conhecer nossos planos e começar!
       
      https://central.cloudrun.com.br/index.php?rp=/store/cloud-ryzen-brasil
       
      CloudRun - Onde a Velocidade Encontra a Confiabilidade!
       

    • Por FeeTads
      SALVE rapaziada do TK, esses dias vim pensando em novos scripts pro meu OT, e em um deles eu precisava que determinada area não contasse frag pro player que matasse outros, PORÉM eu precisava que os players que morressem nessa area ainda assim tivessem as penalidades da sua morte, procurei por ai, achei alguns scripts que apenas tiravam o SKULL e não realmente o FRAG do player.

      **script atualizado 22/10/2023** - melhorado e otimizado, levei o script pra puxar as infos por .lua / creatureScripts

      vou disponibilizar o code aqui, e o que fazer pra determinada area não contar frag.

      SOURCE OTX 2 / TFS 0.x, Funciona em TFS 1.x mudando as tags e ajeitando as sintaxes.

      vá em creatureevent.cpp

      procure por:
      else if(type == "preparedeath") _type = CREATURE_EVENT_PREPAREDEATH;
      Adiciona abaixo:
      else if(type == "nocountfrag") _type = CREATURE_EVENT_NOCOUNTFRAG;

      procure por:
      case CREATURE_EVENT_PREPAREDEATH: return "onPrepareDeath";  
      Adicione abaixo: 
      case CREATURE_EVENT_NOCOUNTFRAG: return "noCountFragArea";

      procure por:
      case CREATURE_EVENT_PREPAREDEATH: return "cid, deathList";
      Adicione abaixo:
      case CREATURE_EVENT_NOCOUNTFRAG: return "cid, target";

      agora no mesmo arquivo, vá até o final do arquivo e adicione essa função:
      uint32_t CreatureEvent::executeNoCountFragArea(Creature* creature, Creature* target) { //noCountFragArea(cid, target) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { env->setRealPos(creature->getPosition()); std::ostringstream scriptstream; scriptstream << "local cid = " << env->addThing(creature) << std::endl; scriptstream << "local target = " << env->addThing(target) << std::endl; if(m_scriptData) scriptstream << *m_scriptData; bool result = true; if(m_interface->loadBuffer(scriptstream.str())) { lua_State* L = m_interface->getState(); result = m_interface->getGlobalBool(L, "_result", true); } m_interface->releaseEnv(); return result; } else { #ifdef __DEBUG_LUASCRIPTS__ std::ostringstream desc; desc << creature->getName(); env->setEvent(desc.str()); #endif env->setScriptId(m_scriptId, m_interface); env->setRealPos(creature->getPosition()); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(creature)); lua_pushnumber(L, env->addThing(target)); bool result = m_interface->callFunction(2); m_interface->releaseEnv(); return result; } } else { std::clog << "[Error - CreatureEvent::noCountFragArea] Call stack overflow." << std::endl; return 0; } }

      agora vá em creatureevent.h

      procure por:
      CREATURE_EVENT_PREPAREDEATH
      adicione abaixo:
      CREATURE_EVENT_NOCOUNTFRAG

      procure por:
      uint32_t executePrepareDeath(Creature* creature, DeathList deathList);
      Adicione abaixo:
      uint32_t executeNoCountFragArea(Creature* creature, Creature* target);

      agora vá em player.cpp

      procure por:
      bool Player::onKilledCreature(Creature* target, DeathEntry& entry)
      abaixo de:
      War_t enemy; if(targetPlayer->getEnemy(this, enemy)) { if(entry.isLast()) IOGuild::getInstance()->updateWar(enemy); entry.setWar(enemy); }
      Adicione o seguinte código:
      if (targetPlayer){ CreatureEventList killEvents = getCreatureEvents(CREATURE_EVENT_NOCOUNTFRAG); for (const auto &event : killEvents) { if (!event->executeNoCountFragArea(this, target)) { return true; } } }

      //

      Feito isso, tudo completo na sua source, agora é necessário adicionar o creaturescript dentro do servidor

      vá até creaturescripts/scripts
      crie um arquivo chamado, "noCountFragInArea.lua"
      e dentro dele cole o código:
       
      --[[ script feito por feetads / TibiaKing ]]-- --[[ discord: feetads / FeeTads#0246 ]]-- -- Add positions here for which you do not want to count frags local areas = { [1] = {from = {x = 91, y = 122, z = 7}, to = {x = 98, y = 127, z = 7}}, -- from = area superior esquerda / to = area inferior direita (formando um quadrado) } local onlyKillerInArea = false -- only killer need to be in area? function noCountFragArea(cid, target) if not isCreature(cid) or not isCreature(target) then return true end local posKiller = getPlayerPosition(cid) local posTarget = getPlayerPosition(target) for i = 1, #areas do local area = areas[i] if isInArea(posKiller, area.from, area.to) then if onlyKillerInArea then return false elseif isInArea(posTarget, area.from, area.to) then return false end end end return true end
      agora em creaturescripts.xml
      <event type="nocountfrag" name="fragarea" event="script" value="noCountFragInArea.lua"/>
      agora em creaturescripts/scripts/login.lua
       procure por OU semelhante a esse:
      registerCreatureEvent(cid, "AdvanceSave")
      e abaixo adicione:
      registerCreatureEvent(cid, "fragarea")

      //


      Agora tudo certo, quando quiser adiciona uma area que não pega frag, vá até o script e apenas coloque a area, igual o demonstrado no script

      Exemplo:
      local areas = { [1] = {from = {x = 91, y = 122, z = 7}, to = {x = 98, y = 127, z = 7}}, [2] = {from = {x = 1000, y = 1000, z = 7}, to = {x = 1100, y = 1100, z = 7}}, }
      assim somente colocando a area no script e abrindo o server ou dando /reload, já funcionará a area como não pegar frag.
      Esse sistema pode ser bom pra areas de pvp ativo, onde você ainda quer que o player que morrer perca os atributos, como se fosse uma morte normal, porém não conta frag pra quem matar.
      Bom pra sistemas tipo castle 48h (guild war), onde há diversas mortes e risco de pegar red, atrapalhando a war.

      Façam bom proveito dos scripts, e deixem os créditos no script rsrs

      **Eu fiz as alterações e o simples código por isso vim disponibilizar, créditos meus**
    • Por Muvuka
      Abri canal a força creaturescript acho que funcione no creaturescript cria script creaturescript
       
      <channel id="9" name="HELP" logged="yes"/>
      <channel id="12" name="Report Bugs" logged="yes"/>
      <channel id="13" name="Loot" logged="yes"/>
      <channel id="14" name="Report Character Rules Tibia Rules" logged="yes"/>
      <channel id="15" name="Death Channel"/>
      <channel id="6548" name="DexSoft" level="1"/>
      <channel id="7" name="Reports" logged="yes"/>
       
      antes de 
              if(lastLogin > 0) then adicione isso:
                      doPlayerOpenChannel(cid, CHANNEL_HELP) doPlayerOpenChannel(cid, 1,  2, 3) = 1,2 ,3 Channels, entendeu? NÃO FUNCIONA EU QUERO UM MEIO DE ABRI SEM USA A SOURCE
       
      EU NÃO CONSEGUI ABRI EU NÃO TENHO SOURCE
       
       
    • Por bolachapancao
      Rapaziada seguinte preciso de um script que ao utilizar uma alavanca para até 4 jogadores.
      Os jogadores serão teleportados para hunt durante uma hora e depois de uma hora os jogadores serão teleportados de volta para o templo.
       
      Observação: caso o jogador morra ou saia da hunt o evento hunt é cancelado.

      Estou a base canary
      GitHub - opentibiabr/canary: Canary Server 13.x for OpenTibia community.
       
    • Por RAJADAO
      .Qual servidor ou website você utiliza como base? 
      Sabrehaven 8.0
      Qual o motivo deste tópico? 
      Ajuda com novos efeitos
       
      Olá amigos, gostaria de ajuda para introduzir os seguintes efeitos no meu servidor (usando o Sabrehaven 8.0 como base), adicionei algumas runas novas (avalanche, icicle, míssil sagrado, stoneshower & Thunderstorm) e alguns novos feitiços (exevo mas san, exori san, exori tera, exori frigo, exevo gran mas frigo, exevo gran mas tera, exevo tera hur, exevo frigo hur) mas nenhum dos efeitos dessas magias parece existir no servidor, alguém tem um link para um tutorial ou algo assim para que eu possa fazer isso funcionar?
      Desculpe pelo mau inglês, sou brasileiro.

      Obrigado!


      AVALANCHE RUNE id:3161 \/
      (COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE)
      (COMBAT_PARAM_EFFECT, CONST_ME_ICEAREA)
      (COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ICE)

      STONESHOWER RUNE id:3175 \/
      (COMBAT_PARAM_TYPE, COMBAT_EARTHDAMAGE)
      (COMBAT_PARAM_EFFECT, CONST_ME_STONES)
      (COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_EARTH)

      THUNDERSTORM RUNE id:3202 \/
      (COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
      (COMBAT_PARAM_EFFECT, CONST_ME_E NERGYHIT)
      (COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGYBALL)

      ICICLE RUNE id:3158 \/
      COMBAT_ICEDAMAGE
      CONST_ME_ICEAREA
      CONST_ANI_ICE

      SANTO MÍSSIL RUNA id:3182 \/
      (COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE)
      (COMBAT_PARAM_EFFECT, CONST_ME_HOLYDAMAGE)
      (COMBAT_PARAM_EFFECT, CONST_ME_HOLYAREA)
      (COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_HOLY)

      CONST_ME_PLANTATTACK (exevo gran mas tera)
      CONST_ME_ICETORNADO (exevo gran mas frigo)
      CONST_ME_SMALLPLANTS (exevo tera hur)
      CONST_ME_ICEAREA (exevo frigo hur)
      CONST_ME_ICEATTACK (exori frigo)
      CONST_ME_CARNIPHILA (exori tera)

      EXORI SAN \/
      (COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SMALLHOLY)
      CONST_ME_HOLYDAM IDADE

      EXEVO MAS SAN \/
      CONST_ME_HOLYAREA
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo