Postado Dezembro 17, 2011 13 anos 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 Março 4, 2012 13 anos por gpedro (veja o histórico de edições)
Postado Dezembro 17, 2011 13 anos Eu usava um sistema parecido com esse no 7.6... Ta muito foda! Parabéns!
Postado Janeiro 6, 2012 13 anos 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 Janeiro 7, 2012 13 anos por fireelement (veja o histórico de edições)
Postado Janeiro 7, 2012 13 anos REP+ Sempre bom ve alguma coisa mais "inteligente" muito bem feita rsrs. Amo Source.
Postado Março 2, 2012 13 anos 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 Março 2, 2012 13 anos 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.