Ir para conteúdo

Death System 2016 versão frag consecutivo!


Yan Liima

Posts Recomendados

  • Diretor

Eae galera do xtibia beleza? hoje venho trazer o Death System um sisteminha que um amigo meu fez, é bem utilizado atualmente.
 
Antes de tudo gostaria de deixar bem claro que não fui eu que fiz.
 
Créditos no final do tópico.
 

Testado em OTX Server 8.60 e TheForgottenServer 0.4 8.60...

 

Como funciona?
Death System em alguns servidores possui um channel chamado "Mortes" ou "Death Channel",
mas há alguns servidores que preferem que seja anunciado no default mesmo e a função é informar
quem matou quem, ou quem foi morto por certo monstro.
 
O que há de novo?
Bom, agora quem matar x jogadores(configurável) e essa quantia for uma consecutiva, será anunciado isso :
O0RuGx1.png
 
E se algum jogador derrotá-lo dentro a consecutiva, será anunciado isso :
iWZ5wGY.png
 
Vamos ao sistema :
em data/XML/channels.xml, adicione isso :

<channel id="15" name="Death Channel"/>

em data/creaturescripts/creaturescripts.xml :

<event type="death" name="deathchannel" event="script" value="deathchannel.lua"/>

em data/creaturescripts/login.lua, adicione isso antes do último return true :

registerCreatureEvent(cid, "deathchannel")

em data/creaturescripts/scripts, crie um arquivo deathchannel.lua e cole isso dentro :
 
TFS:

Spoiler

-- Coded by Zoom..
local info, win, lose = "%s [Level: %s] foi mort%s pelo %s %s%s", "%s obteve %s frags seguidos após derrotar %s.", "%s acabou de impedir que %s fizesse uma sequência de %s frags seguidos."
local frags, storage = {10, 15, 20, 25, 30, 35, 40, 45, 50}, 30045

function onDeath(cid, corpse, deathList)
if(not isPlayer(cid)) then
return true
end

local target = deathList[1]
doCreatureSetStorage(target, storage, getCreatureStorage(target, storage) + (getCreatureStorage(target, storage) == -1 and 2 or 1))

for _, pid in ipairs(getPlayersOnline()) do
doPlayerSendChannelMessage(pid, '', info:format(getCreatureName(cid), getPlayerLevel(cid), getPlayerSex(cid) == 1 and "o" or "a", isPlayer(target) and "player" or "monstro", getCreatureName(target), isPlayer(target) and " [Level: "..getPlayerLevel(target).."]." or "."), TALKTYPE_CHANNEL_O, 0xF)
for _, frag in ipairs(frags) do
if(getCreatureStorage(target, storage) == frag) then
doPlayerSendChannelMessage(pid, '', win:format(getCreatureName(target), frag, getCreatureName(cid)), TALKTYPE_CHANNEL_W, 0xF)
end

if(getCreatureStorage(cid, storage) >= frag) then
doPlayerSendChannelMessage(pid, '', lose:format(getCreatureName(target), getCreatureName(cid), getCreatureStorage(cid, storage)+1), TALKTYPE_CHANNEL_RN, 0xF)
end
end
end

doCreatureSetStorage(cid, storage, 0)
return true
end

 

OTX:

Spoiler

-- Coded by Zoom..
local info, win, lose = "%s [Level: %s] foi mort%s pelo %s %s%s", "%s obteve %s frags seguidos após derrotar %s.", "%s acabou de impedir que %s fizesse uma sequência de %s frags seguidos."
local frags, storage = {10, 15, 20, 25, 30, 35, 40, 45, 50}, 30045

function onDeath(cid, corpse, deathList)
if(not isPlayer(cid)) then
return true
end

local target = deathList[1]
doCreatureSetStorage(target, storage, getCreatureStorage(target, storage) + (getCreatureStorage(target, storage) == -1 and 2 or 1))

for _, pid in ipairs(getPlayersOnline()) do
doPlayerSendChannelMessage(pid, '', info:format(getCreatureName(cid), getPlayerLevel(cid), getPlayerSex(cid) == 1 and "o" or "a", isPlayer(target) and "player" or "monstro", getCreatureName(target), isPlayer(target) and " [Level: "..getPlayerLevel(target).."]." or "."), TALKTYPE_CHANNEL_ORANGE, 0xF)
for _, frag in ipairs(frags) do
if(getCreatureStorage(target, storage) == frag) then
doPlayerSendChannelMessage(pid, '', win:format(getCreatureName(target), frag, getCreatureName(cid)), TALKTYPE_CHANNEL_MANAGEMENT, 0xF)
end

if(getCreatureStorage(cid, storage) >= frag) then
doPlayerSendChannelMessage(pid, '', lose:format(getCreatureName(target), getCreatureName(cid), getCreatureStorage(cid, storage)+1), TALKTYPE_GAMEMASTER_CHANNEL, 0xF)
end
end
end

doCreatureSetStorage(cid, storage, 0)
return true
end

 

Há uma única configuração, que é as consecutivas :

local frags = {10, 15, 20, 25, 30, 35, 40, 45, 50}

completou 10 frags? anuncia! e assim sucessivamente..

 

Créditos: Zoom

Editado por nedroesdoksdja
Link para o comentário
Compartilhar em outros sites

  • 3 weeks later...
  • Diretor

Gostei, otimo script haha o do Zoom ele so postou para otx né? e tu colocou tbm para tfs REP +

 

Não na verdade ele já havia colocado o da TFS porém não incrementou no tópico, então eu coloquei aqui para vocês xD

Link para o comentário
Compartilhar em outros sites

  • 4 months later...
  • Diretor
11 minutos atrás, Adolfohrq disse:

TFS 0.4

 

rev3884?

Se for basta colocar isso em seu login.lua

doPlayerOpenChannel(cid, 15)

Se for 3777 teria que adicionar a função na source, pois a rev3777 não vem com essa função adicionada.

Link para o comentário
Compartilhar em outros sites

  • Diretor

@Adolfohrq A alteração é muito simples, você tem as sources em mãos?

Se tiver vamos lá ...

 

no luascript.cpp procure por:

lua_register(m_luaState, "doPlayerSendToChannel", LuaInterface::luaDoPlayerSendToChannel);

Embaixo adicione isto:

//doPlayerOpenChannel(cid, channelId)
	lua_register(m_luaState, "doPlayerOpenChannel", LuaInterface::luaDoPlayerOpenChannel);

Depois procure por:

int32_t LuaInterface::luaDoPlayerSendToChannel(lua_State* L)
{
	//doPlayerSendToChannel(cid, targetId, SpeakClasses, message, channel[, time])
	ScriptEnviroment* env = getEnv();
	uint32_t time = 0;
	if(lua_gettop(L) > 5)
		time = popNumber(L);

	uint16_t channelId = popNumber(L);
	std::string text = popString(L);
	uint32_t speakClass = popNumber(L), targetId = popNumber(L);

	Player* player = env->getPlayerByUID(popNumber(L));
	if(!player)
	{
		errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND));
		lua_pushboolean(L, false);
		return 1;
	}

	Creature* creature = env->getCreatureByUID(targetId);
	if(!creature)
	{
		errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND));
		lua_pushboolean(L, false);
		return 1;
	}

	player->sendToChannel(creature, (SpeakClasses)speakClass, text, channelId, time);
	lua_pushboolean(L, true);
	return 1;
}

Embaixo adicione:

int32_t LuaInterface::luaDoPlayerOpenChannel(lua_State* L)
{
	//doPlayerOpenChannel(cid, channelId)
	uint16_t channelId = popNumber(L);
	uint32_t cid = popNumber(L);

	ScriptEnviroment* env = getEnv();
	if(env->getPlayerByUID(cid))
	{
		lua_pushboolean(L, g_game.playerOpenChannel(cid, channelId));
		return 1;
	}

	errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND));
	lua_pushboolean(L, false);
	return 1;
}

no luascript.h procure por:

static int32_t luaDoPlayerSendToChannel(lua_State* L);

Embaixo adicione:

static int32_t luaDoPlayerOpenChannel(lua_State* L);

Prontinho

 

Seria melhor verificar antes, vai que já tem essa linda função em suas sources. Dependendo da pessoa que disponibilizou deve ter adicionado ela.

Editado por nedroesdoksdja
Link para o comentário
Compartilhar em outros sites

  • 1 year later...
Em 05/02/2016 at 14:05, Yan Liima disse:

Eae galera do xtibia beleza? hoje venho trazer o Death System um sisteminha que um amigo meu fez, é bem utilizado atualmente.
 
Antes de tudo gostaria de deixar bem claro que não fui eu que fiz.
 
Créditos no final do tópico.
 

Testado em OTX Server 8.60 e TheForgottenServer 0.4 8.60...

 

Como funciona?
Death System em alguns servidores possui um channel chamado "Mortes" ou "Death Channel",
mas há alguns servidores que preferem que seja anunciado no default mesmo e a função é informar
quem matou quem, ou quem foi morto por certo monstro.
 
O que há de novo?
Bom, agora quem matar x jogadores(configurável) e essa quantia for uma consecutiva, será anunciado isso :
O0RuGx1.png
 
E se algum jogador derrotá-lo dentro a consecutiva, será anunciado isso :
iWZ5wGY.png
 
Vamos ao sistema :
em data/XML/channels.xml, adicione isso :


<channel id="15" name="Death Channel"/>

em data/creaturescripts/creaturescripts.xml :


<event type="death" name="deathchannel" event="script" value="deathchannel.lua"/>

em data/creaturescripts/login.lua, adicione isso antes do último return true :


registerCreatureEvent(cid, "deathchannel")

em data/creaturescripts/scripts, crie um arquivo deathchannel.lua e cole isso dentro :
 
TFS:

  Mostrar conteúdo oculto

-- Coded by Zoom..
local info, win, lose = "%s [Level: %s] foi mort%s pelo %s %s%s", "%s obteve %s frags seguidos após derrotar %s.", "%s acabou de impedir que %s fizesse uma sequência de %s frags seguidos."
local frags, storage = {10, 15, 20, 25, 30, 35, 40, 45, 50}, 30045

function onDeath(cid, corpse, deathList)
if(not isPlayer(cid)) then
return true
end

local target = deathList[1]
doCreatureSetStorage(target, storage, getCreatureStorage(target, storage) + (getCreatureStorage(target, storage) == -1 and 2 or 1))

for _, pid in ipairs(getPlayersOnline()) do
doPlayerSendChannelMessage(pid, '', info:format(getCreatureName(cid), getPlayerLevel(cid), getPlayerSex(cid) == 1 and "o" or "a", isPlayer(target) and "player" or "monstro", getCreatureName(target), isPlayer(target) and " [Level: "..getPlayerLevel(target).."]." or "."), TALKTYPE_CHANNEL_O, 0xF)
for _, frag in ipairs(frags) do
if(getCreatureStorage(target, storage) == frag) then
doPlayerSendChannelMessage(pid, '', win:format(getCreatureName(target), frag, getCreatureName(cid)), TALKTYPE_CHANNEL_W, 0xF)
end

if(getCreatureStorage(cid, storage) >= frag) then
doPlayerSendChannelMessage(pid, '', lose:format(getCreatureName(target), getCreatureName(cid), getCreatureStorage(cid, storage)+1), TALKTYPE_CHANNEL_RN, 0xF)
end
end
end

doCreatureSetStorage(cid, storage, 0)
return true
end

 

OTX:

  Mostrar conteúdo oculto

-- Coded by Zoom..
local info, win, lose = "%s [Level: %s] foi mort%s pelo %s %s%s", "%s obteve %s frags seguidos após derrotar %s.", "%s acabou de impedir que %s fizesse uma sequência de %s frags seguidos."
local frags, storage = {10, 15, 20, 25, 30, 35, 40, 45, 50}, 30045

function onDeath(cid, corpse, deathList)
if(not isPlayer(cid)) then
return true
end

local target = deathList[1]
doCreatureSetStorage(target, storage, getCreatureStorage(target, storage) + (getCreatureStorage(target, storage) == -1 and 2 or 1))

for _, pid in ipairs(getPlayersOnline()) do
doPlayerSendChannelMessage(pid, '', info:format(getCreatureName(cid), getPlayerLevel(cid), getPlayerSex(cid) == 1 and "o" or "a", isPlayer(target) and "player" or "monstro", getCreatureName(target), isPlayer(target) and " [Level: "..getPlayerLevel(target).."]." or "."), TALKTYPE_CHANNEL_ORANGE, 0xF)
for _, frag in ipairs(frags) do
if(getCreatureStorage(target, storage) == frag) then
doPlayerSendChannelMessage(pid, '', win:format(getCreatureName(target), frag, getCreatureName(cid)), TALKTYPE_CHANNEL_MANAGEMENT, 0xF)
end

if(getCreatureStorage(cid, storage) >= frag) then
doPlayerSendChannelMessage(pid, '', lose:format(getCreatureName(target), getCreatureName(cid), getCreatureStorage(cid, storage)+1), TALKTYPE_GAMEMASTER_CHANNEL, 0xF)
end
end
end

doCreatureSetStorage(cid, storage, 0)
return true
end

 

Há uma única configuração, que é as consecutivas :

local frags = {10, 15, 20, 25, 30, 35, 40, 45, 50}

completou 10 frags? anuncia! e assim sucessivamente..

 

Créditos: Zoom

Muito bom!

 

Ao invés de:

<channel id="15" name="Death Channel"/>

Utilizei:

 

	<channel id="15" active="no" logged="yes" name="Death Channel"/>

Assim nenhum player consegue utilizar o channel!

 

Valeu REP+!

Link para o comentário
Compartilhar em outros sites

  • 11 months later...

@Yan Liima  Por favor, poderia adaptar o Script para que não mostrasse o level dos players no chat ? poderia também me dizer onde retiro os códigos de todos os lugares para que não possa mostrar o level dos players tanto no chat quando manda mensagem, quanto no death channel ?

Link para o comentário
Compartilhar em outros sites

  • Diretor
Em 08/09/2018 em 03:40, Hit ToPlay disse:

@Yan Liima  Por favor, poderia adaptar o Script para que não mostrasse o level dos players no chat ? poderia também me dizer onde retiro os códigos de todos os lugares para que não possa mostrar o level dos players tanto no chat quando manda mensagem, quanto no death channel ?

Testa ai

 

TFS:

-- Coded by Zoom..
local info, win, lose = "%s foi mort%s pelo %s %s%s", "%s obteve %s frags seguidos após derrotar %s.", "%s acabou de impedir que %s fizesse uma sequência de %s frags seguidos."
local frags, storage = {10, 15, 20, 25, 30, 35, 40, 45, 50}, 30045

function onDeath(cid, corpse, deathList)
if(not isPlayer(cid)) then
return true
end

local target = deathList[1]
doCreatureSetStorage(target, storage, getCreatureStorage(target, storage) + (getCreatureStorage(target, storage) == -1 and 2 or 1))

for _, pid in ipairs(getPlayersOnline()) do
doPlayerSendChannelMessage(pid, '', info:format(getCreatureName(cid), getPlayerSex(cid) == 1 and "o" or "a", isPlayer(target) and "player" or "monstro", getCreatureName(target), isPlayer(target) and "."), TALKTYPE_CHANNEL_O, 0xF)
for _, frag in ipairs(frags) do
if(getCreatureStorage(target, storage) == frag) then
doPlayerSendChannelMessage(pid, '', win:format(getCreatureName(target), frag, getCreatureName(cid)), TALKTYPE_CHANNEL_W, 0xF)
end

if(getCreatureStorage(cid, storage) >= frag) then
doPlayerSendChannelMessage(pid, '', lose:format(getCreatureName(target), getCreatureName(cid), getCreatureStorage(cid, storage)+1), TALKTYPE_CHANNEL_RN, 0xF)
end
end
end

doCreatureSetStorage(cid, storage, 0)
return true
end

 

Editado por nedroesdoksdja
Link para o comentário
Compartilhar em outros sites

  • 3 months later...

não achei na soruces - tfs 0.4, não lembro rev q é a minha, tem como eu algum arquivo da source eu descobrir ??

 

int32_t LuaInterface::luaDoPlayerSendToChannel(lua_State* L)
Link para o comentário
Compartilhar em outros sites

  • Diretor
23 horas atrás, bilaux disse:

não achei na soruces - tfs 0.4, não lembro rev q é a minha, tem como eu algum arquivo da source eu descobrir ??

 


int32_t LuaInterface::luaDoPlayerSendToChannel(lua_State* L)

Ao abrir a distro, nas primeiras linhas aparece a REV.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...