Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

Testado: MySQL & SQLite

Distro: TFS 0.4_SVN & TFS 0.3.6

MySQL


ALTER TABLE `players` ADD `resets` INT(11) NOT NULL DEFAULT "0";

SQLite

ALTER TABLE players ADD resets INTEGER not null default 0

Adicionando nas sources player.h procure por:

uint32_t level;

logo abaixo, adicione:

uint32_t resets;

iologindata.cpp procure por

query << "SELECT `id`, `account_id`, `group_id`, `world_id`, `sex`, `vocation`, `experience`, `level`,"

substitua por:

query << "SELECT `id`, `account_id`, `group_id`, `world_id`, `sex`, `vocation`, `experience`, `level`, `resets`, "

procure por

player->level = std::max((uint32_t)1, (uint32_t)result->getDataInt("level"));

logo abaixo adicione:

player->resets = (uint32_t)result->getDataInt("resets");

procure por

query << "`maglevel` = " << player->magLevel << ", ";

logo abaixo adicione:

query << "`resets` = " << player->resets << ", ";

players.cpp procure por:

s << " (Level " << level << ")";

substitua por:

s << " (Level " << level << ") [Reset " << resets << "]";

players.h procure por:

void setPromotionLevel(uint32_t pLevel);

logo abaixo adicione:

uint32_t getResets() { return resets;}

void setResets(int32_t amount) { resets += amount; if (resets < 0) {resets = 0;} }

luascript.cpp para 0.3.6


static int32_t luaDoPlayerSetIdleTime(lua_State* L); 

logo abaixo adicione:


static int32_t luaGetResets(lua_State* L); 

static int32_t luaSetResets(lua_State* L); 

talkactions.xml

<talkaction words="!rank;/rank" event="script" value="ranks.lua"/>

<talkaction words="!reset;/reset" script="reset.lua"/>

ranks.lua

Créditos: Dark Skyllen, Marcryzius, Mock, Kydrai, Cykotitan, gpedro*.

* adaptação para 0.4

procure por:

int32_t LuaScriptInterface::luaDoPlayerSetIdleTime(lua_State* L)

{

	//doPlayerSetIdleTime(cid, amount)

	int64_t amount = popNumber(L);

	ScriptEnviroment* env = getEnv();

	if(Player* player = env->getPlayerByUID(popNumber(L)))

	{

		player->setIdleTime(amount);

		lua_pushboolean(L, true);

	}

	else

	{

		errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND));

		lua_pushboolean(L, false);

	}

	return 1;

}
logo abaixo adicione:

int32_t LuaScriptInterface::luaGetResets(lua_State* L)

{

	//getResets(cid)

	ScriptEnviroment* env = getEnv();

	if(Player* player = env->getPlayerByUID(popNumber(L)))

		lua_pushnumber(L, player->getResets());

	else

	{

		errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND));

		lua_pushboolean(L, false);

	}

	return 1;

}


int32_t LuaScriptInterface::luaSetResets(lua_State* L)

{

	//setResets(cid, amount)

	int32_t amount = popNumber(L);

	ScriptEnviroment* env = getEnv();

	if(Player* player = env->getPlayerByUID(popNumber(L)))

	{

		player->setResets(amount);

		lua_pushboolean(L, true);

	}

	else

	{

		errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND));

		lua_pushboolean(L, false);

	}

	return 1;

}

procure por:

//doPlayerSetIdleTime(cid, amount)

lua_register(m_luaState, "doPlayerSetIdleTime", LuaInterface::luaDoPlayerSetIdleTime);

logo abaixo adicione:

	//getResets(cid)

	lua_register(m_luaState, "getResets", LuaScriptInterface::luaGetResets);


//setResets(cid, amount)

lua_register(m_luaState, "setResets", LuaScriptInterface::luaSetResets);

para 0.4
procure por:

int32_t LuaInterface::luaDoPlayerSetIdleTime(lua_State* L)

{

//doPlayerSetIdleTime(cid, amount)

int64_t amount = popNumber(L);

ScriptEnviroment* env = getEnv();

if(Player* player = env->getPlayerByUID(popNumber(L)))

{

player->setIdleTime(amount);

lua_pushboolean(L, true);

}

else

{

errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND));

lua_pushboolean(L, false);

}


return 1;

}
logo abaixo adicione:

int32_t LuaInterface::luaGetResets(lua_State* L)

{

	//getResets(cid)

	ScriptEnviroment* env = getEnv();

	if(Player* player = env->getPlayerByUID(popNumber(L)))

		lua_pushnumber(L, player->getResets());

	else

	{

		errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND));

		lua_pushboolean(L, false);

	}

	return 1;

}


int32_t LuaInterface::luaSetResets(lua_State* L)

{

	//setResets(cid, amount)

	int32_t amount = popNumber(L);

	ScriptEnviroment* env = getEnv();

	if(Player* player = env->getPlayerByUID(popNumber(L)))

	{

		player->setResets(amount);

		lua_pushboolean(L, true);

	}

	else

	{

		errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND));

		lua_pushboolean(L, false);

	}

	return 1;

}

procure por:

//doPlayerSetIdleTime(cid, amount)

lua_register(m_luaState, "doPlayerSetIdleTime", LuaInterface::luaDoPlayerSetIdleTime);

logo abaixo adicione:

//getResets(cid)

	lua_register(m_luaState, "getResets", LuaInterface::luaGetResets);


//setResets(cid, amount)

lua_register(m_luaState, "setResets", LuaInterface::luaSetResets);

luascript.h procure por:

function getPlayerNameByGUID2(n)

		local c = db.getResult("SELECT `name` FROM `players` WHERE `id` = "..n..";")

		if c:getID() == -1 then

				return "SQL_ERROR["..n.."]"

		end

				return c:getDataString("name")

		end


function onSay(cid, words, param)

		local max = 10

		local letters_to_next = 20


local skills = {

		['fist'] = 0,

		['club'] = 1,

		['sword'] = 2,

		['axe'] = 3,

		['distance'] = 4,

		['shielding'] = 5,

		['fishing'] = 6,

		['dist'] = 4,

		['shield'] = 5,

		['fish'] = 6,

}

		local name_now

		local name = "Highscore for level\n"

		local rkn = 0

		local no_break = 0

				param = string.lower(param)

				dofile('config.lua')

	if param == "" or param == "level" and ( param ~= "magic" and param == "ml") and skills[param] == nil then

				name = name.."\n"

				name = name.."Rank Level - Nome do Jogador\n"

		local v = db.getResult("SELECT `name`, `level`, `experience` FROM `players` WHERE `group_id` <= 2 ORDER BY `experience` DESC LIMIT 0,"..(max)..";")

		repeat

				no_break = no_break +1

		if v:getID() == -1 then

		break

		end

				rkn = rkn+1

				name_now, l = v:getDataString("name"), string.len(v:getDataString("name"))

				space = ""

		for i=1, letters_to_next-l do

				space = space.." "

		end

				name = name..rkn..". "..v:getDataInt("level") .."  -  "..name_now..space.." ".."\n"

		if no_break >= 20 then

		break

		end

		until v:next() == false


		elseif param == "magic" or param == "ml" then

				name = name.."\n"

				name = name.."Rank Magic - Nome do Jogador\n"

		local v = db.getResult("SELECT `name`, `level`, `maglevel` FROM `players` WHERE `group_id` <= 2 ORDER BY `maglevel` DESC LIMIT 0,"..(max)..";")

		repeat

		if v:getID() == -1 then

		break

		end

				rkn = rkn+1

				name_now, l = v:getDataString("name"), string.len(v:getDataString("name"))

				space = ""

		for i=1, letters_to_next-l do

				space = space.." "

		end

				name = name..rkn..". "..v:getDataInt("maglevel").."  -  "..name_now..space.." ".." ".."".."\n"

		until v:next() == false


	elseif param == "reset" or param == "resets" then

		name = name.."Rank Reset - Nome do Jogador\n"

	local v = db.getResult("SELECT `player_id`, `value` FROM `player_storage` WHERE `key` = 1020 ORDER BY cast(value as INTEGER) DESC;")

	local kk = 0


	repeat

	if kk == max or v:getID() == -1 then

	break

	end

		kk = kk+1

		name_now, l = getPlayerNameByGUID2(v:getDataInt("player_id")), string.len(getPlayerNameByGUID2(v:getDataInt("player_id")))

		space = ""

	for i=1, letters_to_next-l do

		space = space.." "

	end

	if name_now == nil then

		name_now = 'sql error['..v:getDataInt("player_id")..']'

	end

		name = name..kk..". "..v:getDataInt("value").."  -  "..name_now..space.." ".." ".."".."\n"

	until v:next() == false


		elseif skills[param] ~= nil then

				name = name.."\n"

				name = name.."Rank "..param.." fighting - Nome do Jogador\n"

		local v = db.getResult("SELECT `player_id`, `value` FROM `player_skills` WHERE `skillid` = "..skills[param].." ORDER BY `value` DESC;")

		local kk = 0


		repeat

		if kk == max or v:getID() == -1 then

		break

		end

				kk = kk+1

				name_now, l = getPlayerNameByGUID2(v:getDataInt("player_id")), string.len(getPlayerNameByGUID2(v:getDataInt("player_id")))

				space = ""

		for i=1, letters_to_next-l do

				space = space.." "

		end

		if name_now == nil then

				name_now = 'sql error['..v:getDataInt("player_id")..']'

		end

				name = name..kk..". "..v:getDataInt("value").."  -  "..name_now..space.." \n"

		until v:next() == false

		end

		if name ~= "Highscore\n" then

				doPlayerPopupFYI(cid, name)

		end

		return true

end

reset.lua

function onSay(cid, words, param)

	local t = {

		RemainingLvl = 8,

		exp = 4200,

		level = 350,

		redskull = true,

		battle = true,

		pz = true

	}

	if(t.redskull == true) and (getCreatureSkullType(cid) == 4) then

	  return doPlayerSendTextMessage(cid, 22, "Apenas player sem red skull podem resetar.")

	end

	if(t.pz == true) and (getTilePzInfo(getCreaturePosition(cid)) == false) then

	  return doPlayerSendTextMessage(cid, 22, "Você precisa estar em protection zone pra poder resetar.")

	end

	if(t.battle == true) and (getCreatureCondition(cid, CONDITION_INFIGHT) == true) then

	  return doPlayerSendTextMessage(cid, 22, "Você precisa estar sem battle pra poder resetar.")

	end

	if getPlayerLevel(cid) >= t.level then

		setResets(cid, 1)

		doRemoveCreature(cid, true)

		db.executeQuery("UPDATE `players` SET `level` = "..t.RemainingLvl..", `experience` = "..t.exp.." WHERE `id` = "..getPlayerGUID(cid))

	else

		doPlayerSendCancel(cid, "Você precisa do level "..t.level.." ou mais para resetar.")

		doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)

	end

	return true

end

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

  • Respostas 35
  • Visualizações 9.9k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • Testado: MySQL & SQLite Distro: TFS 0.4_SVN & TFS 0.3.6 MySQL ALTER TABLE `players` ADD `resets` INT(11) NOT NULL DEFAULT "0"; SQLite ALTER TABLE players ADD resets INT

  • Fiz essa talk pro sistema a um tempo, não sabia como funcionava o getPlayerGUID, arrumei o script:

  • Volta o player pro level 8, o resto mantém.

Posted Images

  • 3 weeks later...
Postado

Fiz essa talk pro sistema a um tempo, não sabia como funcionava o getPlayerGUID, arrumei o script:


function onSay(cid, words, param)

	local pid = getPlayerGUID(cid)

	config = {

		RemainingLvl = 8,

		exp = 4200,

		level = 350,

		redskull = true,

		battle = true,

		pz = true

	}

	if(t.redskull == true) and (getCreatureSkullType(cid) == 4) then

		return doPlayerSendTextMessage(cid, 22, "Apenas player sem red skull podem resetar.")

	end


	if(t.pz == true) and (getTilePzInfo(getCreaturePosition(cid)) == false) then

		return doPlayerSendTextMessage(cid, 22, "Você precisa estar em protection zone pra poder resetar.")

	end


	if(t.battle == true) and (getCreatureCondition(cid, CONDITION_INFIGHT) == true) then

		return doPlayerSendTextMessage(cid, 22, "Você precisa estar sem battle pra poder resetar.")

	end


	if getPlayerLevel(cid) >= t.level then

		setResets(cid, 1)

		doRemoveCreature(cid, true)

		db.executeQuery("UPDATE `players` SET `level` = "..t.RemainingLvl..", `experience` = "..t.exp.." WHERE `id` = "..pid)

	else

		doPlayerSendCancel(cid, "Você precisa do level "..t.level.." ou mais para resetar.")

		doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)

	end

	return true

end

Fiz um por stages também
^^


config = {

	RemainingLvl = 8,

	exp = 4200,

	redskull = true,

	battle = true,

	pz = true

}


stages = {

	{resets = 4, level = 350},

	{resets = 9, level = 400}

}

function onSay(cid, words, param)

	local pid = getPlayerGUID(cid)

	if(config.redskull) and (getCreatureSkullType(cid) == 4) then

		return doPlayerSendTextMessage(cid, 22, "Apenas player sem red skull podem resetar.")

	end


	if(config.pz) and (not getTilePzInfo(getCreaturePosition(cid))) then

		return doPlayerSendTextMessage(cid, 22, "Você precisa estar em protection zone pra poder resetar.")

	end


	if(config.battle) and (getCreatureCondition(cid, CONDITION_INFIGHT)) then

		return doPlayerSendTextMessage(cid, 22, "Você precisa estar sem battle pra poder resetar.")

	end


	for _, stage in ipairs(stages) do

		if getResets(cid) <= stage.resets then

			if getPlayerLevel(cid) >= stage.level then

				setResets(cid, 1)

				doRemoveCreature(cid, true)

				db.executeQuery("UPDATE `players` SET `level` = "..config.RemainingLvl..", `experience` = "..config.exp.." WHERE `id` = "..pid)

				else

				doPlayerSendCancel(cid, "Você precisa do level "..stage.level.." ou mais para resetar.")

				doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)

			end

		end

	end

	return true

end

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

  • 1 month later...
Postado

Tem algum problema si eu pular a parte do Luascript.cpp e colocar as functions direto na lib do servidor porque aqui deu erro na hora de compila.

Eu coloquei essas aqui ó.


function getResets(cid)

    local pid = getPlayerGUID(cid)

    local qr = db.getResult("SELECT `resets` FROM `players` WHERE `id`= "..pid..";")

        rss = qr:getDataInt("resets", pid)

    if rss < 0 then

        rss = 0

    end

        return rss

end

function setResets(cid, amount)


local acc = getPlayerAccountId(cid)

local resets = getResets(cid)


if isCreature(cid) then

doRemoveCreature(cid)

end


db.executeQuery("UPDATE `players` SET `resets` = ".. resets + amount .." WHERE `id` = " .. acc .. ";")

end

2174 D:\Users\Desktop\Entw\Ot Entwickeln\Sources\luascript.cpp 'luaGetResets' is not a member of 'LuaInterface'

2177 D:\Users\Desktop\Entw\Ot Entwickeln\Sources\luascript.cpp 'luaSetResets' is not a member of 'LuaInterface'

2177 D:\Users\Desktop\Entw\Ot Entwickeln\Sources\luascript.cpp At global scope:

9035 D:\Users\Desktop\Entw\Ot Entwickeln\Sources\luascript.cpp no 'int32_t LuaInterface::luaGetResets(lua_State*)' member function declared in class 'LuaInterface'

9049 D:\Users\Desktop\Entw\Ot Entwickeln\Sources\luascript.cpp no 'int32_t LuaInterface::luaSetResets(lua_State*)' member function declared in class 'LuaInterface'

9049 D:\Users\Desktop\Entw\Ot Entwickeln\Sources\luascript.cpp *** [obj//luascript.o] Error 1

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

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.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo