Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 05/24/16 em todas áreas
-
Olá galera do Xtibia, venho hoje trazer um sistema muito útil como pode ver no Título ele remove casa dos players que não logam mais. Explicação: Sabe aqueles players filho da mãe que compram as melhores casas e não logam mais no servidor e enche a porra da casa de item pros novos players não comprar? Pois é esse sistema dara um jeito nesses safados! xD Este script é apenas um arquivo que você colocará em sua pasta mods e ele executará toda vez que o servidor for reiniciado/ligado, ou seja: Quando o servidor ligar ele irá verificar os players que não logam a X dias (configurável) e então expulsa-los da casa movendo seus items para o depot deixando a casa sem dono. Bom chega de explicação e vamos ao que interessa; Na pasta principal do servidor, onde fica a distro que roda o servidor e tudo mais, entre na pasta MODS e crie um arquivo com o nome de cleanhouses.xml e dentro coloque o seguinte codigo: <?xml version="1.0" encoding="UTF-8"?><mod name="Cleanhouses" version="1.04" author="Yan Liima-Night" contact="xtibia.com" enabled="yes"> <description> v.1.04 - Adicionado 'onlyNonPremium' configurável. Versão sem erros por favor caso não é avançado na área não modifique nada. Criado e modificado por Yan Liima Nick: [ADM] Night Este mod irá limpar casas de jogadores inativos e mover os seus itens para o depósito.explicação das configurações: days - Se o jogador não tiver logado para este número de dias de sua casa será liberado. log - true/false, é para habilitar o registro de quais casas foram limpas. file - caminho para o arquivo de log, onde os logs serão armazenados. Ignorado se 'log' definido como falso onlyNonPremium - se definido como 'true', o script irá limpar apenas as casas dos jogadores que não lougou X dias. Outras indicações: NÃO remova doSaveServer() no final, caso contrário, se o servidor parar de funciona antes que o servidor salve você vai se arrepender =) </description> <globalevent name="cleanhouses" type="start" event="buffer"><![CDATA[ local config = { days = 60, log = true, file = getDataDir() .. "/logs/cleanhouses.txt", onlyNonPremium = true } local ns_query =[[ SELECT houses.owner, houses.id as hid, houses.name as house_name ,players.name FROM houses LEFT JOIN players ON players.id=houses.owner LEFT JOIN accounts ON players.account_id=accounts.id WHERE players.lastlogin < (UNIX_TIMESTAMP() - ]] ..config.days.. [[*24*60*60) ]] ..(config.onlyNonPremium and ' AND accounts.premdays=0 ' or '')..[[ AND players.world_id =]] .. getConfigValue("worldId") local house = db.getResult(ns_query) local logs = " Houses cleaned:\n\n" if house:getID() ~= -1 then repeat logs = logs .. house:getDataString('house_name') ..", owned by " .. house:getDataString('name') .. "\n" setHouseOwner(house:getDataInt('hid'), 0) until not house:next() house:free() else logs = logs .. "There were no houses to clean." end if config.log then doWriteLogFile(config.file, logs) end addEvent(doSaveServer, 1000) ]]></globalevent></mod> Pronto, salve e feche. Toda vez que o servidor iniciar irá expulsar os players que não logam aos dias configuráveis. Como configurar: days = 60 * É o número em DIAS que o player terá que ficar sem logar para perder a casa. Aconselho a não mexer, caso queira modificar algo aconselho ser avançado na área para não causar error no sistema. Este sistema funciona em qualquer TFS. Créditos Yan Liima Bom eu tinha publicado um post igual esse faz anos so que não lembro minha conta, e pegaro meu post postaro em outro fórum que não merece ser citado com outros créditos estou apenas avisando. Te ajudei?? REP + e ficamos quites... Atenciosamente, Yan Liima Abraços!1 ponto
-
Objectbuilder 10.90
Gogetasaya reagiu a darkjaques por um tópico no fórum
1 ponto -
[LUA FUNCTION] getPlayerItems(cid[, id])
Bodak Reborn reagiu a Tony Araujo por um tópico no fórum
[LUA Function] getPlayerItems(cid[, id]) O que ela faz: Bom, esta função retorna todos os items do jogador, você também pode usa-la de modo que retorne todos os items, que tenha um certo ID. Modo de uso: for _, item in pairs(getPlayerItems(cid)) do -- Retornaria todos os id\'s dos items que o player tem. print(item.itemid)end for _, item in ipairs(getPlayerItems(cid, 2160)) do -- Retornaria todas as quantidade e o nome do item, cuja o ID fosse (2160). print(item.type.."x "..getItemNameById(item.itemid))end1 ponto -
Base Bolz 2.5 Com Source
boxxer321 reagiu a Scizorgame por um tópico no fórum
fiz um tutorial enquanto instalava o msvc2010 estou tendo uns problemas com o msvc mas vou postar logo o duelsystem para vocês irem testando, não sei se esta 100% TUTORIAL DUEL SYSTEM BASE BOLZ 2.5 1)vai no config.lua e troque o worldType para pvp e o protectionLevel para 1000 ficando assim: worldType = "pvp" protectionLevel = 1000 OBS: Isso vai liberar para que os players possam atacar pelo menos o summon de um dos outros. 2)vai em data/creaturescripts no creaturescripts.xml e adicione: <!-- TV SYSTEM e DUEL SYSTEM --> <event type="joinchannel" name="WatchTv" event="script" value="tvsys.lua"/> <event type="leavechannel" name="StopWatchingTv" event="script" value="tvsys.lua"/> <event type="walk" name="WalkTv" event="script" value="tvsys.lua"/> <event type="textedit" name="RecordTv" event="script" value="tvsys.lua"/> OBS: Apesar de estar como tvsystem tambem é o script responsavel para funcionar os channels do duel(1x1, numero de pokes, etc). 3)agora precisamos fazer funcionar para atacar só quando estiver em duel, para isso conto com a colaboração de vocês para me ajudar a relembrar tudo que eu fiz vou postar o que eu lembro vocês testam e qualquer erro postem de preferencia com o conteudo do script que a distro acusar, vamos trabalhar encima do storage 6598754, o que acredito eu antes liberava para atacar em duel e agora nos vamos fazer ele bloquear para não atacar fora do duel va em data/creaturescripts/scripts no login.lua e procure pelo storage 6598754 você vai encontrar algo como: if not getPlayerStorageValue(cid, 6598754) == -1 or not getPlayerStorageValue(cid, 6598755) == -1 then setPlayerStorageValue(cid, 6598754, -1) setPlayerStorageValue(cid, 6598755, -1) doRemoveCondition(cid, CONDITION_OUTFIT) --alterado v1.9 \/ doTeleportThing(cid, posBackPVP, false) doCreatureAddHealth(cid, getCreatureMaxHealth(cid)) end na segunda linha troque o -1 por "cant" e deixe só essa e a 3ª linha, desabilite ou delete as outras linhas ficando: --if not getPlayerStorageValue(cid, 6598754) == -1 or not getPlayerStorageValue(cid, 6598755) == -1 then setPlayerStorageValue(cid, 6598754, "cant") setPlayerStorageValue(cid, 6598755, -1) --doRemoveCondition(cid, CONDITION_OUTFIT) --alterado v1.9 \/ --doTeleportThing(cid, posBackPVP, false) --doCreatureAddHealth(cid, getCreatureMaxHealth(cid)) -- end ou só: setPlayerStorageValue(cid, 6598754, "cant") setPlayerStorageValue(cid, 6598755, -1) 4)vai em data/actions/scripts no revive.lua e procure por "if getPlayerStorageValue(cid,6598754)" bem no inicio, e delete e desabilite dali até o proximo end. OBS:isso era uma tentativa de proteção para não usar revive em duel mas logo embaixo tem outra proteção que faz o mesmo sem dar possiveis bugs e erros (do storage 52481). 5)vai em data/lib no some functions.lua procure por "function canAttackOther" e substitua toda função por: function canAttackOther(cid, pid) --Function q verifica se um poke/player pode atacar outro poke/player if not isCreature(cid) or not isCreature(pid) then return "Cant" end local master1 = isSummon(cid) and getCreatureMaster(cid) or cid local master2 = isSummon(pid) and getCreatureMaster(pid) or pid ---- if getPlayerStorageValue(master1, 6598754) ~= "cant" and getPlayerStorageValue(master2, 6598754) ~= "cant" then if getPlayerStorageValue(master1, 6598754) ~= getPlayerStorageValue(master2, 6598754) then if isDuelingAgainst(master1, master2) then --alterado v1.8 if isSummon(cid) and isPlayer(pid) then return "Cant" else return "Can" end end end end ---- pvp system if getPlayerStorageValue(cid, 6598754) == "cant" then return "Cant" else return "Can" end -- if getPlayerStorageValue(master1, 6598754) >= 1 and getPlayerStorageValue(master2, 6598755) >= 1 then -- return "Can" -- end -- if getPlayerStorageValue(master1, 6598755) >= 1 and getPlayerStorageValue(master2, 6598754) >= 1 then ---estar em times diferentes -- return "Can" -- end ---- if ehMonstro(cid) or ehMonstro(pid) then return "Can" end if getTileInfo(getThingPos(cid)).pvp then return "Can" end return "Cant" end 6)agora em data/lib no Duel System.lua procure por "function doEndDuel" e substitua toda função por: function doEndDuel(cid, desisto) if isCreature(cid) then if getPlayerStorageValue(cid, 52482) ~= -1 then t1 = string.explode(getPlayerStorageValue(cid, 52482), ",") t2 = string.explode(getPlayerStorageValue(cid, 52483), ",") end local invit = getPlayerByName(getPlayerStorageValue(cid, 52485)) if isCreature(invit) then table1 = string.explode(getPlayerStorageValue(invit, 52482), ",") table2 = string.explode(getPlayerStorageValue(invit, 52483), ",") end if getPlayerStorageValue(cid, 52484) ~= 10 then if getPlayerStorageValue(cid, 52482) ~= -1 then for a = 1, 3 do local pid, sid = getPlayerByName(t1[a]), getPlayerByName(t2[a]) if isCreature(pid) then doCreatureSetSkullType(pid, 0) doRemoveCondition(pid, CONDITION_INFIGHT) end if isCreature(sid) then doCreatureSetSkullType(sid, 0) doRemoveCondition(sid, CONDITION_INFIGHT) end for i = 1, #storagesDuel do if isCreature(pid) then setPlayerStorageValue(pid, storagesDuel, -1) setPlayerStorageValue(pid, 6598754, "cant") end if isCreature(sid) then setPlayerStorageValue(sid, storagesDuel, -1) setPlayerStorageValue(sid, 6598754, "cant") end end end else for i = 1, #storagesDuel do setPlayerStorageValue(cid, storagesDuel, -1) setPlayerStorageValue(cid, 6598754, "cant") end doCreatureSetSkullType(cid, 0) doRemoveCondition(cid, CONDITION_INFIGHT) --------------------------------- if table2 then local numero = 0 for i = 1, #table2 do local ppid = getPlayerByName(table2) if not isCreature(ppid) or getPlayerStorageValue(ppid, 52480) ~= -1 then numero = numero+1 end end if numero == 0 then doEndDuel(invit) sendMsgToPlayer(invit, 20, "The opponents are give up! Duel is canceled!") end end -------------------------------- end if desisto then doSendAnimatedText(getThingPosWithDebug(cid), "GIVE UP", COLOR_BLUE) end return true end for a = 1, #t1 do local pid, sid = getPlayerByName(t1[a]), getPlayerByName(t2[a]) removeFromTableDuel(pid, getCreatureName(cid)) removeFromTableDuel(sid, getCreatureName(cid)) end local t3 = string.explode(getPlayerStorageValue(cid, 52482), ",") local t4 = string.explode(getPlayerStorageValue(cid, 52483), ",") if (#t3 == 0 and #t4 >= 1) or (#t4 == 0 and #t3 >= 1) then for j = 1, (#t3 > 0 and #t3 or #t4) do local winner = #t3 > 0 and getPlayerByName(t3[j]) or getPlayerByName(t4[j]) if isCreature(winner) then addEvent(doSendAnimatedText, 500, getThingPosWithDebug(winner), "WIN", COLOR_ELECTRIC) for i = 1, #storagesDuel do setPlayerStorageValue(winner, storagesDuel, -1) setPlayerStorageValue(winner, 6598754, "cant") end doCreatureSetSkullType(winner, 0) doRemoveCondition(winner, CONDITION_INFIGHT) end end addEvent(doSendAnimatedText, 500, getThingPosWithDebug(cid), "LOSE", COLOR_BURN) for i = 1, #storagesDuel do setPlayerStorageValue(cid, storagesDuel, -1) setPlayerStorageValue(cid, 6598754, "cant") end doCreatureSetSkullType(cid, 0) doRemoveCondition(cid, CONDITION_INFIGHT) else for i = 1, #storagesDuel do setPlayerStorageValue(cid, storagesDuel, -1) setPlayerStorageValue(cid, 6598754, "cant") end doCreatureSetSkullType(cid, 0) doRemoveCondition(cid, CONDITION_INFIGHT) if desisto then doSendAnimatedText(getThingPosWithDebug(cid), "GIVE UP", COLOR_BLUE) else addEvent(doSendAnimatedText, 500, getThingPosWithDebug(cid), "LOSE", COLOR_BURN) end end end end 7)por ultimo va em data/lib no level system.lua procure pelo storage 6598754 e delete ou desabilite do if ao end assim: -- if getPlayerStorageValue(getCreatureMaster(pk), 6598754) >= 1 then -- setPlayerStorageValue(pk, 6598754, 1) -- elseif getPlayerStorageValue(getCreatureMaster(pk), 6598755) >= 1 then -- setPlayerStorageValue(pk, 6598755, 1) -- end1 ponto -
Base Bolz 2.5 Com Source
Josegvb reagiu a Scizorgame por um tópico no fórum
eu consegui adaptar o sistema de duel, 1x1 pelo menos, mas tive q mecher em muita coisa para deixar 10/10, vou tentar fazer um tutorial se eu conseguir compilar essa source, compilei com um dev c++ de todos jeitos mas n funcionou o .exe, vou tentar compilar com msvc2010 e depois informo aqui.1 ponto -
Base Bolz 2.5 Com Source
Justiceiro751 reagiu a Scizorgame por um tópico no fórum
fly só ir no data/movements/movements.xml e adicionar os ids 11675,11676 e 11677 nessa linha: <movevent type="StepIn" itemid="460;1022;1023" event="script" value="fly.lua"/> ficando assim: <movevent type="StepIn" itemid="460;1022;1023;11675-11677" event="script" value="fly.lua"/>1 ponto -
olá, ele está informando que os dados para conexão com o servidor de banco de dados estão incorretos. Verifique os dados informados novamente. esta rodando ele localmente?1 ponto
-
compila com flag de debug "-g" e habilite para gerar coredump, em linux basta o seguinte comando pra ele começar a gerar o dump: # ulimit -c unlimited Dai é só reproduzir o crash, e abrir o core quando gerar, algo assim: # gdb ./tfs core Isso vai dar um detalhamento do crash Não perca tempo tentando descobrir lendo o code, é mais rapido com o coredump Quanto ao código, se é para retornar a quantidade de pokemons, pra que raios usa double? Bom, não sei como é a implementaçao desse pokeball, mas acredito que esteja tentando fazer algo assim: double PlayerpokemonCountIn(const Item* item) const{ double count = 0.0f; if(item->getPokeball() >= 1.0f) count += 1.0f; const Container* container; if(container = item->getContainer()) for(ContainerIterator it = container->begin(), end = container->end(); it != end; ++it) if(Item* tmp = (*it)->getItem()) if(tmp->getPokeball() >= 1.0f) count++; return count;}1 ponto
-
Na source do seu servidor obviamente, isso so pode ser feito por la.1 ponto
-
#status.cpp Procure por: p = xmlNewNode(NULL,(const xmlChar*)"players");sprintf(buffer, "%d", g_game.getPlayersOnline()); Deixe assim: p = xmlNewNode(NULL,(const xmlChar*)"players");sprintf(buffer, "%d", 0); E em seguida procure por: if(requestedInfo & REQUEST_PLAYERS_INFO) { output->put<char>(0x20); output->put<uint32_t>(g_game.getPlayersOnline()); output->put<uint32_t>(g_config.getNumber(ConfigManager::MAX_PLAYERS)); output->put<uint32_t>(g_game.getPlayersRecord()); } Deixe: if(requestedInfo & REQUEST_PLAYERS_INFO) { output->put<char>(0x20); output->put<uint32_t>(0); output->put<uint32_t>(g_config.getNumber(ConfigManager::MAX_PLAYERS)); output->put<uint32_t>(g_game.getPlayersRecord()); }1 ponto
-
[Encerrado] Problemas com TalkAction
whitt1 reagiu a Liipe Silva3 por um tópico no fórum
Basta ir na sua database lá no phpmyadmin em accounts você procura por type e coloca o id do god que seria 3.1 ponto -
Contagem aonde? no status? se for, é só bloquear o pacote no status.cpp, ai ninguem acessa essa info1 ponto
-
Mensagem ao dropar loot
Luga03 reagiu a GuuhMaster por uma questão
Olá pessoal! Consegui achar um script que eu queria, precisa de algumas modificações.. Eu gostaria que o script fizesse essa função.. BroadcastMessage; MENSAGEM LOOT: O Jogador (FULANO) dropou um item (TAL) do bixo (Demon). Script: @Zipter981 ponto -
A Vivo anunciou em fevereiro que passaria a oferecer todos os seus planos de internet fixa com um limite de dados, seguindo o que operadoras como Oi e NET já têm feito há meses, e do mesmo modo como é cobrado na internet móvel. Por enquanto, as novas regras afetam apenas usuários de conexões ADSL, deixando "ilesos" os consumidores de internet por meio de fibra ótica. Na NET, o usuário que atingir o limite não tem a internet cortada, mas a velocidade contratada é reduzida. Os planos da empresa funcionam com as seguintes franquias: Velocidade de 2 Mbps: 30 GB por mês Velocidade de 15 Mbps: 80 GB por mês Velocidade de 30 Mbps: 100 GB por mês Velocidade de 60 Mbps: 150 GB por mês Velocidade de 120 Mbps: 200 GB por mês Já na Vivo, a cobrança franqueada começará a valer para todos os contratos estabelecidos desde o último dia 5 de fevereiro. Clientes mais antigos não terão suas contas alteradas (por enquanto), e a cobrança será mantida ilimitada até o dia 31 de dezembro de 2016 para os novos clientes. A partir de de janeiro de 2017, os valores para quem fez um contrato após o dia 5 de fevereiro serão ajustados segundo essa métrica: Banda Larga Popular de 200 kbps: 10 GB por mês Banda Larga Popular de 1 e 2 Mbps: 10 GB por mês Vivo Internet de 4 Mbps: 50 GB por mês Vivo Internet de 8 e 10 Mbps: 100 GB por mês Vivo Internet de 15 Mbps: 120 GB por mês Vivo Internet de 25 Mbps: 130 GB por mês Já os planos da Oi, que são um pouco mais generosos com quem possui planos de internet mais lenta, também são mais restritivos quando chega aos valores mais altos: Até 600 kbps: 20GB por mês Até 1 Mbps: 40 GB por mês Até 2 Mbps: 50 GB por mês Até 5 Mbps: 60 GB por mês Até 10 Mbps: 80 GB por mês Até 15 Mbps: 100 GB por mês A Tim, que também oferece serviço de internet por conexão ADSL, não possui planos sob franquia. Em nota à imprensa, a empresa afirmou que também não pretende mudar seu modo de cobrança por enquanto. As operadoras, porém, sugerem que os consumidores entrem em contato com os respectivos serviços de atendimento para conferir mais detalhes sobre possíveis mudanças em seus contratos. (isso é uma patifaria para fuder novamente com o brasileiro, parece que a galera vai ter que voltar aos anos 2000 usando internet discada, as leis estabelecida nesse pais simplesmente são para fuder com o consumidor!) Petição online contra, se vai funcionar eu não sei mais ajude e deixe sua assinatura: https://goo.gl/AwhlG01 ponto
-
Em movements.xml, adicione: <movevent event="StepIn" itemid="ID DO TP" script="checkpoint.lua" /> Bom, explicando: No tp que leva a quest, coloque action id 3000 no primeiro checkpoint coloque action id 3001 no segundo checkpoint coloque action id 3002 no terceiro checkpoint coloque action id 3003 no tp q leva a sala de premio coloque action id 3004 nas coordenadas: inicio= local de inicio da quest firstcheck = local para onde o primeiro checkpoint leva, ou seja, pra segunda parte da quest ... fim = local da sala de premio OBS: bugo o post de cima, tive q postar outro OBS2: coloquei "fimcheck" ali no fim do script, eh só "fim"1 ponto
-
Não Permitido Entrada de Itens em tal area
Drakopoulos reagiu a dalvorsn por uma questão
Primeiramente procure entender o que é a 'Logica de programação', é o mais básico e necessário que você irá precisar. Após isso aprenda sobre lua, existe o manual de referencia de lua e o luausers que é um forum que tem diversos exemplos, tutoriais e implementações. Somente após ter entendido o minimo necessário de lua vá para os scripts de otserv, entenda que lua é uma linguagem de script, ela geralmente é usada para implementar coisas auxiliares, não é aconselhável criar sistemas imensos e complexos somente através de lua, claro que isso varia muito de sistema pra sistema mas no geral começe com coisas simples, como actions e talkactions, spells e etc. Leia muito, veja exemplos dentro do otserv, modifique o que ja existe para testar e ver o que acontece, aprenda a ler erros de console, geralmente eles te dizem exatamente o que está errado e onde está o erro(a linha). E prática cara, não tenha medo de errar, é perfeitamente normal fazer gambiarras e cometer diversos erros no inicio. Pode ser que nada funcione bem quando ta começando, mas não desanima que você aprende. Vou deixar alguns links referentes a linguagem lua para que de uma olhada: http://www.lua.org/manual/5.1/pt/manual.html http://lua-users.org/ Já as coisas relativas a otserv aconselho a procurar por aqui mesmo, tem bastante conteúdo util, códigos interessantes, e caso não ache o que procura, pergunte que certamente terá alguém para lhe ajudar.1 ponto -
Vídeo demonstração Instalando: steal.lua (data/actions/scripts) Actions.xml (data/actions) <action itemid="id da runa/item" event="script" value="steal.lua"/> Créditos: CandleJack1 ponto
-
Roleta em vez de dados
kayk reagiu a Administrador por um tópico no fórum
Esse script, feito por Yamo (otland), é uma modificação no actionscript dos dados, o que torna uma roleta (tabela) function onUse(cid, item, fromPosition, itemEx, toPosition) if(fromPosition.x ~= CONTAINER_POSITION) then doSendMagicEffect(fromPosition, CONST_ME_CRAPS) end local value = math.random(5700, 5736) - 5700 local color = "" if(value == 0) then color = "green" elseif(value <= 10 and value % 2 == 0) then color = "black" elseif(value >= 11 and value <= 19 and value % 2 == 1) then color = "black" elseif(value >= 26 and value % 2 == 0) then color = "black" else color="red" end doCreatureSay(cid, getCreatureName(cid) .. ' rolled ' .. value .. ', ' .. color .. '!', TALKTYPE_ORANGE_1) return true end1 ponto