Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 02/13/14 em todas áreas

  1. Alexclusive

    Sobre a Administração

    Fala pessoal, tudo tranquilo? Hoje venho comunicar a vocês a minha saída da administração do Ekz, deixando nas mãos do Alessandro (Under). Alguns de vocês já o conhecem e outros vão gostar de de conhecer... Ele tem vários planos e ideias para engajar e fazer com que o Ekz volte de uma vez pro topo. Eu só tenho o que agradecer a todos e tudo que o fórum me proporcionou. Posso afirmar que aprendi e ensinei bastante. Não vou citar nomes de ninguém pra não esquecer de nenhum rs Quero deixar aqui um abraço um beijo e um queijo para todos que me seguiram e me apoiaram durante a minha passagem pela administração. O Xtibia foi e sempre será uma casa para mim e outros que por aqui passarem... Lutem por um melhor... (I'll be around...)
    5 pontos
  2. Gabriel Couto

    FIQUE POR DENTRO #4

    Assuntos do momento Nós, da Administração e Direção do XTibia queremos saber se você é a favor de bloquear conteúdo para visitantes, qual sua opinião? Vote nesse tópico: Enquete: Você é à favor de bloquear conteúdo para visitantes? Nessa sexta-feira dia 14 teremos um chat da equipe com os membros (vocês!), então, participe! Lembre-se que é para discutirmos assuntos do fórum, ok?! Começa após as 21 horas! Valeu galera, bora XTibia! Mais "Fique por Dentro" em breve! Att, Gabriel Couto.
    3 pontos
  3. Hunter Baiak 2.0 Baiak totalmente editado, e com sistema exclusivo. Novos monsters. Novas áreas. Com Apenas uma Vip Que dar Acesso a 2 áreas. Área Free Para Players level 200 ou mais. Novos items. Novas Quests. Foram Removidos todos os arquivos inúteis. Removido todos os erros e bugs . e Muito Mais... Para se tornar Vip, Fazer quest vip Localizada no Templo. (Quest Vip *Nova*, que ganha também Set Wanted 2º melhor do Ot). Área Free Para Players level 200 ou + , totalmente editada . (Agora com Quest Para ganhar item Vip, localizada nos teleports). Aréa Hunter Vip editada. (Com 2 salas de teleportes, e com Quest Nova para Ganhar Set Spanker ( Melhor do Ot ) ), (Também com Npc que Vende acesso a segunda Área Hunter Vip.. também localizada no Templo). Templo totalmente Editado (Agora com npc's localizados em cima do templo), (Localiza-se também no templo o Evento Imperador). Distro totalmente Limpa ( Não tem 1 Erro ). Evento Imperador * Torne-se o Imperador e terá acesso a áreas Exclusivas e ganhe 50% a mais de EXP . Outros Players Tomarão seu Império. (Recupere-o) Claro que Você pode criar mais áreas , items , spells .. é só usar a função : if getPlayerStorageValue(cid, 48828) >= 1 then Área ilustrativa Templo : Templo Area Para Players Level 200 + , e templo Hunter Vip : Área Vip Hunter 2 : Final das Quests { ( Set Vip ) , (Hunter Vip Quest) e (Set Spanker) } ... é isso ! para melhor funcionamento recomendo mysql. database na pasta do ot.. ​alguns antivírus podem acusar viros, pelo fato de não reconhecer o arquivo Gostou ? Rep ><
    2 pontos
  4. u n d e r

    Sobre a Administração

    Hail Xtibianos! Muito bom poder estar de volta a uma comunidade que devo minha profissão. Agradeço imensamente ao Alex e toda a equipe presente até o momento, que continuaram a colaborar com o crescimento do Xtibia. Espero ajudar ao máximo, estimulando o aprendizado, criatividade e trazendo novidades durante o ano. @Lord, Eu não estava na administração nesta época, apenas ajudei nos ajustes do portal e temporariamente tive as permissões de um administrador. Mas oficialmente, está acontecendo hoje.
    2 pontos
  5. zipter98

    [Encerrado] [Ajuda] 2 Moves

    O Dig, depois eu faço. if spell == "Reflect" or spell == "Magic Coat" or spell == "Mimic" then if spell == "Magic Coat" then eff = 11 elseif spell == "Mimic" then eff = 172 else eff = 135 end doSendMagicEffect(getThingPosWithDebug(cid), eff) setPlayerStorageValue(cid, 21099, 1)
    2 pontos
  6. MarcelloMendes

    [Advanced Reset System 2.0]

    -= Advanced Reset System 2.0 =- By: MarcelloMkez Fala galerinha, to aqui dinovo , mas agora e com a versão 2.0 do meu 'Advanced Reset System'. E como prometido, trazendo algumas novidades: _________________________________________________________________________________________________________________________________ - Resets agora armazenados diretamente na 'DataBase', acabando com o sistema de Storages, e com o problema dos resets atrasados no look; - Opções para Abilitar e Desabilitar Condições como por exemplo: 'look = true' , [true,false] configurando como achar melhor; - E agora '[sTAGES]', para 'premmy' (Premium Account) e 'free' (Free Account); - Instala o System e cria a Tabela de Resets com o comando "/installreset"; OBS: Sistema testado em 'Mysql' não tenho certeza si funciona em 'sql'; e Testando em: 8.50 (TFS 0.3.6) e 8.6 (TFS 0.4.0) __________________________________________________________________________________________________________________________________ Vá em data/Talkactions, e crie um arquivo .lua e nomeie para advancedResetSystem.lua e Adicione Isso: --[[ <(Advanced Reset System 2.0)> Autor: MarcelloMkez. Contato: (marcello_dirt@hotmail.com) Versão: 2.0 Testado em: 8.50 e 8.60 TFS: 0.3.6 and 0.4.0 Fórum: http://www.xtibia.com/forum/topic/142463-advanced-reset-system-20/ -=[Características]=- ~( Versão 2.0 )~ - Resets agora Armazenados na DataBase; (Sem Valor de Storage) - Instala o System e cria a Tabela de Resets com o comando "/installreset"; - Resets no Look do jogador ex: 22:10 You see Marcello [Reset 2] (Level 8). He is an elder druid.; - [sTAGES] para "Premium Account" e "Free Account"; ]] --=[Functions]=-- -- installReset()' [instala o Sistema.] -- tableResetInstall()' [Verifica Se o Sistema ja foi instaladao.] -- nowReseting()' [Verifica, retorna o erro ou reseta.] -- getPlayerReset(cid)' [Pega numero de resets do player.] -- checLevelStageReset(cid)' [Verifica o Level para Resetar.] -- newReset(cid)' [Verifica todas as Condições de Reset.] -- addValue(value)' [Adiciona numero de resets.] --=[Comandos de Jogadores]=-- -- "/installreset" -- Só será usado uma vez, para instalar o sistema. -- "!resetar" -- Para Resetar. function onSay(cid, words, param) if words =="!resetar" then --[ Condições de Reset ] -- local coNdConf = { needPz = true, -- Precisa estar em Pz pra resetar? [true, false] needPa = false, -- Precisa ser Premium Account Pra resetar? [true, false] withe = false, -- Players com Pk Withe podem resetar? [true, false] red = false, -- Players com Pk Red pode resetar? [true, false] battle = false, -- Players precisão estar sem battle pra resetar? [true, false] teleport = true, -- Teleportar Player para o templo após resetar? [true, false] look = false, -- Aparecer Resets no Look do Player? [true, false] pid = getPlayerGUID(cid), -- Não Mexer. --[ Configurações do Reset ] -- resetConf = { Level = 350, -- Level Necessário para Resetar. [Valor] backLvl = 8, -- Level que voltará após o Reset. [Valor] time = 5, -- Tempo para o Player deslogar ao resetar, em segundos. [Valor] }, } --[[>> STAGES <<]]-- x=true;X=true -- Não Mexer. local stage = {Abilitar = {x}, Desabilitar = {}, --<< Abilitar Stages?? >>-- [{x};{}] -- [RESETS] | [PREMMY] | [FREE] stage1= {resets= 4, premmy= 330, free= 350}, stage2= {resets= 9, premmy= 340, free= 355}, -- EXPLICANDO e Configurando stages. (Se estiver Abilitado [Abilitar = {x}]) stage3= {resets= 14, premmy= 355, free= 360}, -- resets = Número de resets para o Stage; stage4= {resets= 19, premmy= 360, free= 365}, -- premmy = Level necessário para Premium Accounts; stage5= {resets= 24, premmy= 370, free= 380}, -- free = Level necessário para Free Accounts; stage6= {resets= 29, premmy= 380, free= 390}, -- Coloque em Ordem... stage7= {resets= 35, premmy= 400, free= 410}, -- [OBS: MARQUE UM "X" PARA ABILITAR OU DESABILITAR OS STAGES] stage8= {resets= 40, premmy= 410, free= 440}, -- EX: para desabilitar mude: Abilitar = {}, Desabilitar = {x} stage9= {resets= 45, premmy= 450, free= 450}, stage10={resets= 50, premmy= 465, free= 465}, } --[[>> FIM STAGES <<]]-- --=[Pega Valor de Resets]=-- function getPlayerReset(cid) local qr = db.getResult("SELECT `reset` FROM `players` WHERE `id`= "..coNdConf.pid..";") rss = qr:getDataInt("reset", coNdConf.pid) if rss < 0 then rss = 0 end return rss end local success = " ~~ Sucesso! ~~ \nVocê tem agora "..(getPlayerReset(cid)+1).." resets. \nVocê será deslogado em "..coNdConf.resetConf.time.." segundos." ;err = doPlayerSendTextMessage local qrt = db.getResult("SELECT `reset` FROM `players` WHERE `id`= "..coNdConf.pid..";");rss_db = qrt:getDataInt("reset", coNdConf.pid) local lvl_query = "UPDATE `players` SET `level` = "..(coNdConf.resetConf.backLvl)..", `experience` = 0 WHERE `id`= " .. coNdConf.pid .. ";" local reset_query = "UPDATE `players` SET `reset` = "..(getPlayerReset(cid)+(1)).." WHERE `id`= " .. coNdConf.pid .. ";" local nolook_query = "UPDATE `players` SET `description` = '' WHERE `players`.`id`= " .. coNdConf.pid .. ";" local look_query = "UPDATE `players` SET `description` = ' [Reset "..(getPlayerReset(cid)+(1)).."]' WHERE `players`.`id`= " .. coNdConf.pid .. ";" --=[Reseta]=-- function addValue(value) if coNdConf.look == false then doRemoveCreature(cid) db.executeQuery(lvl_query);db.executeQuery(reset_query);db.executeQuery(nolook_query) else doRemoveCreature(cid) db.executeQuery(lvl_query);db.executeQuery(reset_query);db.executeQuery(look_query) return LUA_NO_ERROR end end function nowReseting() if (getPlayerLevel(cid) < coNdConf.resetConf.Level) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "- Level Necessário Para o Reset ["..coNdConf.resetConf.Level.."]. Faltam "..coNdConf.resetConf.Level-getPlayerLevel(cid).." level's para você Resetar. -") return true end if getPlayerLevel(cid) >= coNdConf.resetConf.Level and (coNdConf.teleport == false) then doPlayerPopupFYI(cid, success) addEvent(addValue, coNdConf.resetConf.time*1000, value) else doPlayerPopupFYI(cid, success) addEvent(doTeleportThing, coNdConf.resetConf.time*900, cid, getTownTemplePosition(getPlayerTown(cid))) addEvent(addValue, coNdConf.resetConf.time*1000, value) return true end end --[sTAGES Nao mexer em nada.]-- function checkLevelStageReset(cid) local stages = { {resets= stage.stage1.resets, premmy= stage.stage1.premmy, free= stage.stage1.free}, {resets= stage.stage2.resets, premmy= stage.stage2.premmy, free= stage.stage2.free}, {resets= stage.stage3.resets, premmy= stage.stage3.premmy, free= stage.stage3.free}, {resets= stage.stage4.resets, premmy= stage.stage4.premmy, free= stage.stage4.free}, {resets= stage.stage5.resets, premmy= stage.stage5.premmy, free= stage.stage5.free}, {resets= stage.stage6.resets, premmy= stage.stage6.premmy, free= stage.stage6.free}, {resets= stage.stage7.resets, premmy= stage.stage7.premmy, free= stage.stage7.free}, {resets= stage.stage8.resets, premmy= stage.stage8.premmy, free= stage.stage8.free}, {resets= stage.stage9.resets, premmy= stage.stage9.premmy, free= stage.stage9.free}, {resets=stage.stage10.resets, premmy=stage.stage10.premmy, free=stage.stage10.free}, } local resets = getPlayerReset(cid) for i, tab in ipairs(stages) do if resets <= tab.resets then coNdConf.resetConf.Level = isPremium(cid) and tab.premmy or tab.free break end end if (getPlayerLevel(cid) < coNdConf.resetConf.Level) then err(cid, MESSAGE_STATUS_CONSOLE_BLUE, "- Level Necessário Para o Reset ["..coNdConf.resetConf.Level.."]. Faltam "..coNdConf.resetConf.Level-getPlayerLevel(cid).." level's para você Resetar. -") return TRUE end if getPlayerLevel(cid) >= coNdConf.resetConf.Level and (coNdConf.teleport == false) then doPlayerPopupFYI(cid, success) addEvent(addValue, coNdConf.resetConf.time*1000, value) else doPlayerPopupFYI(cid, success) addEvent(addValue, coNdConf.resetConf.time*1000, value) addEvent(doTeleportThing, coNdConf.resetConf.time*900, cid, getTownTemplePosition(getPlayerTown(cid))) return true end end function newReset(cid) if(coNdConf.needPz == true) and (getTilePzInfo(getCreaturePosition(cid)) == LUA_ERROR) then err(cid,MESSAGE_STATUS_CONSOLE_BLUE,"- Você Precisa estar em Protection Zone Para Resetar. -") return TRUE end if(coNdConf.needPa == true) and not isPremium(cid) then err(cid,MESSAGE_STATUS_CONSOLE_BLUE,"- Você Precisa ser Premium Account para Resetar. -") return TRUE end if(coNdConf.withe == false) and (getCreatureSkullType(cid) == 3) then err(cid,MESSAGE_STATUS_CONSOLE_BLUE,"- Você não pode resetar em condições de PK Withe. -") return TRUE end if(coNdConf.red == false) and (getCreatureSkullType(cid) == 4) then err(cid,MESSAGE_STATUS_CONSOLE_BLUE,"- Você não pode resetar em condições de PK Red. -") return TRUE end if(coNdConf.battle == true) and (getCreatureCondition(cid, CONDITION_INFIGHT) == TRUE) then err(cid,MESSAGE_STATUS_CONSOLE_BLUE,"- Você Precisa estar sem Battle para Resetar. -") return TRUE end local xy = {true,false} table.insert(stage.Abilitar, false) table.insert(stage.Desabilitar, false) if stage.Abilitar[1] == xy[1] and stage.Desabilitar[1] == xy[2] then checkLevelStageReset(cid) elseif stage.Abilitar[1] == xy[2] and stage.Desabilitar[1] == xy[1] then nowReseting() else doPlayerPopupFYI(cid, "LUA_ERROR; Configure corretamente o Sistema de STAGES!") end return true end function tableResetInstall() print(not rss_db and LUA_ERROR or "Tabela de Resets: Instalada ... [success] ") addEvent(newReset, 1000, cid) return false end if tableResetInstall() then end end --=[install System]=-- function installReset() if db.executeQuery("ALTER TABLE `players` ADD reset INT(11) NOT NULL DEFAULT 0;") then print("[MarcelloMkez] -= Advanced Reset System 2.0 por DataBase =- Instalado com sucesso!") return TRUE end print('[Advanced Reset System/MarcelloMkez] Não foi possível instalar o Sistema.') return FALSE end local tt = { "Preparando Instalação...", "Instalando: TableReset Db...", "Instalando: getPlayerReset()...", "Instalando: addValue()...", "Instalando: checkLevelStageReset()...", "Instalando: newReset() and nowReseting()...", "Finalizando Instalação...", "...", success = { "Iniciando...", "function: TableReset Db... [success]", "function: getPlayerReset()... [success]", "function: addValue(value)... [success]", "function: checkLevelStageReset()... [success]", "function: newReset() and nowReseting()... [success]", "Fim da Instalação. ", "by: ~~ MarcelloMkez ~~ \nContato: marcello_dirt@hotmail.com", inst = {"MarcelloMkez","Advanced Reset System 2.0 por DataBase" }, }, } if words == "/installreset" and getPlayerAccess(cid) >= 3 then function install() if installReset() then print(""..tt.success[7].."") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,""..tt.success[8].."") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "["..tt.success.inst[1].."] -="..tt.success.inst[2].."=- Instalado com sucesso!") else print("["..tt.success.inst[1].."] FALHA NA INSTALAÇÃO! [O sistema ja foi instalado].") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "["..tt.success.inst[1].."] FALHA NA INSTALAÇÃO! [O sistema ja foi instalado].") end return 1 end function concl(cid) local typetx = MESSAGE_STATUS_CONSOLE_BLUE print(""..tt.success[7].."") print(""..tt[8].."") doPlayerSendTextMessage(cid, typetx,""..tt.success[7].."") doPlayerSendTextMessage(cid, typetx,""..tt[8].."") addEvent(install, 1000,cid) end function finall(cid) local typetx = MESSAGE_STATUS_CONSOLE_BLUE print(""..tt.success[6].."") print(""..tt[7].."") doPlayerSendTextMessage(cid, typetx,""..tt.success[6].."") doPlayerSendTextMessage(cid, typetx,""..tt[7].."") addEvent(concl, 3000,cid) end function installDd(cid) local typetx = MESSAGE_STATUS_CONSOLE_BLUE print(""..tt.success[5].."") print(""..tt[6].."") doPlayerSendTextMessage(cid, typetx,""..tt.success[5].."") doPlayerSendTextMessage(cid, typetx,""..tt[6].."") addEvent(finall, 1000,cid) end function installCc(cid) local typetx = MESSAGE_STATUS_CONSOLE_BLUE print(""..tt.success[4].."") print(""..tt[5].."") doPlayerSendTextMessage(cid, typetx,""..tt.success[4].."") doPlayerSendTextMessage(cid, typetx,""..tt[5].."") addEvent(installDd, 1000,cid) end function installBb(cid) local typetx = MESSAGE_STATUS_CONSOLE_BLUE print(""..tt.success[3].."") print(""..tt[4].."") doPlayerSendTextMessage(cid, typetx,""..tt.success[3].."") doPlayerSendTextMessage(cid, typetx,""..tt[4].."") addEvent(installCc, 1000,cid) end function installAa(cid) local typetx = MESSAGE_STATUS_CONSOLE_BLUE print(""..tt.success[2].."") print(""..tt[3].."") doPlayerSendTextMessage(cid, typetx,""..tt.success[2].."") doPlayerSendTextMessage(cid, typetx,""..tt[3].."") addEvent(installBb, 1000,cid) end function toInstall() local typetx = MESSAGE_STATUS_CONSOLE_BLUE print(""..tt.success[1].."") print(""..tt[2].."") doPlayerSendTextMessage(cid, typetx,""..tt.success[1].."") doPlayerSendTextMessage(cid, typetx,""..tt[2].."") addEvent(installAa, 1000,cid) end function preparation() local typetx = MESSAGE_STATUS_CONSOLE_BLUE print(""..tt[1].."") doPlayerSendTextMessage(cid, typetx,""..tt[1].."") addEvent(toInstall, 3000,cid) end if preparation() then end end return 1 end --=[by: MarcelloMkez]=-- E em Talkactions.xml adicione isso: <talkaction words="!resetar;/installreset" event="script" value="advancedResetSystem.lua"/> Instalando o Sistema - Após adicionar o script em TalkActions e em Talkactions.xml Use o comando "/installreset" em jogo, OBS: o System so pode ser Instalado pelo GOD! A a instalação será mostrada no default, e no Distro! Apos isso, Sistema Instalado! 'Explicando stages: Stage 1: stage1= {resets= 4, premmy= 330, free= 350}, resets: ---- Quantidade de Resets para o stage. premmy: ---- Level que Premmium Accounts podera Resetar. (no caso ate 4 resets) free: ------ Level que Free Accounts podera Resetar. (no caso ate 4 resets) --- Bom como vcs pode ver, vai ate o 'Stage 10': stage10={resets= 50, premmy= 465, free= 465}, --- Intao irei explicar, caso queiram adicionar mais stages... Use 'Ctrl + G' com o script aberto, e digite 71, e aperte enter, logo ira direcionar para linha 71 que no caso é esta: stage10={resets= 50, premmy= 465, free= 465}, - Abaixo dela adicione uma exatamente igual, so modificando o numero do stage ficando assim: stage10={resets= 50, premmy= 465, free= 465}, stage11={resets= 55, premmy= 465, free= 465}, Agora na linha 134 vai ta esta: {resets=stage.stage10.resets, premmy=stage.stage10.premmy, free=stage.stage10.free}, Voce faz a mesma coisa adicionando embaixo da linha 134 porem mudando os numeros, ficando assim: {resets=stage.stage10.resets, premmy=stage.stage10.premmy, free=stage.stage10.free}, {resets=stage.stage11.resets, premmy=stage.stage11.premmy, free=stage.stage11.free}, Pronto, Ja esta adicionado o 'Stage 11' xD, Assim voce pode adicionar quantos stages quiser, basta configurar corretamente... Mais duvidas postem aqui. Aqui termino o post! espero que gostem, grato: ~~MarcelloMkez~~
    1 ponto
  7. caotic

    doCreateMonsterNick(monster, nick, pos)

    Tudo bem galera xtibiana? Resolvi trazer a vocês um sistema de nick que permite mudar o nome do monstro in-game. A função e simples de se usar e não tem nenhum tipo de limitação ela foi desenvolvida na versão 8.6 com a tfs 0.3.6. Lets go: Vá em monster.h e procure isto: typedef std::list<Creature*> CreatureList; class Monster : public Creature { private: Monster(MonsterType* _mType); public: #ifdef __ENABLE_SERVER_DIAGNOSTIC__ static uint32_t monsterCount; #endif virtual ~Monster(); E coloque este codigo em baixo: std::string nick,realname; Continue em monster.h e procure: static Monster* createMonster(const std::string& name); E coloque embaixo: static Monster* createMonsterNick(const std::string& name, std::string nick); Procure também: virtual const std::string& getName() const {return mType->name;} E substitua por isto: virtual const std::string& getName() const {return nick;} Depois vá em monster.cpp e procure: Monster* Monster::createMonster(const std::string& name) { MonsterType* mType = g_monsters.getMonsterType(name); if(!mType) return NULL; return createMonster(mType); } Substitua por: Monster* Monster::createMonster(const std::string& name) { MonsterType* mType = g_monsters.getMonsterType(name); if(!mType) return NULL; mType->name = name; return createMonster(mType); } Monster* Monster::createMonsterNick(const std::string& name, std::string nick) { MonsterType* mType = g_monsters.getMonsterType(name); if(!mType) return NULL; if (!(nick == "")) { mType->name = nick; } return createMonster(mType); } Continuando em monster.cpp procure: currentOutfit = mType->outfit; Adicionar embaixo: nick = mType->name; Vá em luascript.h e procure isto static int32_t luaDoCreateNpc(lua_State* L); Embaixo coloque: static int32_t luaDoCreateMonsterNick(lua_State* L); static int32_t luaGetCreatureNickRealName(lua_State* L); Em luascript.cpp procure: //doPlayerSetIdleTime(cid, amount) lua_register(m_luaState, "doPlayerSetIdleTime", LuaScriptInterface::luaDoPlayerSetIdleTime); Coloque embaixo: //doCreateMonster(monster, nick, pos) lua_register(m_luaState, "doCreateMonsterNick", LuaScriptInterface::luaDoCreateMonsterNick); Continue em luascript.cpp e procure isto: int32_t LuaScriptInterface::luaGetCreatureName(lua_State* L) { //getCreatureName(cid) ScriptEnviroment* env = getEnv(); if(Creature* creature = env->getCreatureByUID(popNumber(L))) lua_pushstring(L, creature->getName().c_str()); else { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } Coloque isto: int32_t LuaScriptInterface::luaGetCreatureNickRealName(lua_State* L) { //getCreatureNickRealName(cid) ScriptEnviroment* env = getEnv(); if(Monster* monster = env->getCreatureByUID(popNumber(L))->getMonster()) lua_pushstring(L, monster->realname.c_str()); else { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } int32_t LuaScriptInterface::luaDoCreateMonsterNick(lua_State* L) { //doCreateMonsterNick(monster, nick, pos) ScriptEnviroment* env = getEnv(); PositionEx pos; popPosition(L, pos); std::string nick = popString(L); const std::string name = popString(L).c_str(); Monster* monster = Monster::createMonsterNick(name, nick); if(!monster) { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); return 1; } if(!g_game.placeCreature(monster, pos)) { delete monster; errorEx("Cannot create monster: " + name); lua_pushboolean(L, false); return 1; } monster->realname = name; lua_pushnumber(L, env->addThing((Thing*)monster)); return 1; } -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Exemplo de uso: function onSay(cid, words, param, channel) local t = string.explode(param, ",") doCreateMonsterNick(t[1], t[2], getThingPos(cid)) return true end
    1 ponto
  8. HenrikDiamond

    Moto System para PDA

    Olá Galera do Xtibia, hoje vim trazer esse script que faz o seguinte: •Ao Clicar em determinador item, o player fica numa moto. Pois é, sem demora vamos ao script! • Crie um Arquivo no formato .lua no pasta seuserver/actions/scipts e renomeie para moto.lua. •Abra o arquivo, apague tudo oque esta dentro e coloque isto! •Você poder fazer alterações nestas partes: •looktype = 1482 - Nessa parte você irá colocar o id da outfit quando o player montar na moto. •Text = Mount, moto! - Aki você colocará a mensagem que aparecerá quando o player montar na moto. •speed = 9999 - Aqui é a velocidade que o player ganhará, altere de acordo com seus critérios! ~~ Agora vá no arquivo action.xml e adicione esta tag Explicação em itemid="13053" você colocará o id em que quando o player der USE, irá montar na bike. No PDA, o item 13053 é uma moto comum, sem ninguém e que não pode ficar na mochila. Obrigado, Até a próxima. Se ajudei Deixe um Rep+ aew. Flw
    1 ponto
  9. Crie lógo sua conta e venha ser TÓP! Chame seu TEAM, venha fazer quests, e as war's mais emocionantes.. Mythera-Global está fazendo sua reabertura DOMINGO DIA 16/02/2014 AS 13:00 HÓRAS. Informações: Server Map: Global Full World Type: Open-PVP IP/Site: IP: http://mythera.zapto.org/ IP: mythera.zapto.org Port: 7171 Client: 8.60 Rates: EXP: 100x (stages) Skills: 25x Magic: 10x Loot: 2x Características: Mapa global 8.6 completo. Servidor 8.60 atual mais semelhante ao "TIBIA ORIGINAL" que existe Todas as quests do Tibia RL. Vocações equilibradas, para um jogo mais balanceado. Ganhe vários prêmios ao upar de level. Guild War, Guild Points, Top Guilds, Top Frags, etc.. Vários eventos semanais. RAIDS diárias, para um jogo mais divertido. Equipe séria e dedicada ao servidor. Proteção anti-DDoS. Servidor totalmente livre de bugs. E muito mais!!! Quests com questlog: Annihilator; Demon Helmet; Pits of Inferno; The Inquisition Quest; In Service of Yalahar; Isle of Evil; The Ancient Tombs; Banshee Quest; Dreamer's Challenge; The Travelling Trader Quest; The Unnatural Selection Quest; Postman Quest; Wrath of Emperor; Demon Oak; Svargrond Arena; Sistemas Task system com ranking e bosses; Firewalker boots protegendo contra fire fields; Raid system (configurado semanalmente); Boat system 100% global; Folda e Senja completos e acessíveis; Premio system (diversos prêmios nos níveis 20, 50, 100 e 150); Fullhpmana system (ao subir level a mana e a life enchem); Suporte para war system com escudos; 4 cidades vips (Pyre, Oken, Gengia e Vilarejo); Partner System Guild Shop: Os players terão que formar guild com no mínimo 10 players, todos devem estar online e ser level 200+ para quando o leader digitar (!guildpoints) todos receberem 20 pontos, para gastaram no SHOP GUILD do site; Venha lógo e crie sua conta: http://mythera.zapto.org/ (basta clicar na imagem escrita 'crie sua conta aqui').
    1 ponto
  10. akira021

    Nota de Esclarecimento || Sky's Heart

    Olá a todos, antes de tudo irei me apresentar, meu nome é Marcelo, mas podem me chamar pelo meu nick Akira, eu sou um dos ADMs do Sky's Heart, antes eram Eu e o Pititão, mas como vou explicar nessa nota eu sou o único membro e ADM atualmente no projeto, está nota tem o fundamento de explicar os motivos que levaram o Sky's Heart a ficar sumido. Eu estiver com varios problemas pessoais, esses mesmos problemas se deram no mesmo tempo em que o projeto estava passando por uma crise, pois tínhamos um rodizio muito grande de membros, principalmente na área de mapeamento, alem da falta de responsabilidade de alguns, que apos o Sky's Heart ser incentivado pelo Xtibia, deixaram de executar os seus trabalhos e correram atras de fama aqui no site. Você pode ter percebido no antigo tópico de Show Off Sprites do Sky"s Heart, la os sprites criavam os monstros e outfits e postavam, mas não terminavam os mesmos, assim eles ganhavam reputação e não terminavam os seus trabalhos e isso aconteceu muito. Como eu estava com os meus problemas eu não pude voltar a minha devida atenção ao projeto, então deixei a supervisão das atividades do projeto nas mãos do outro ADM o Pititao, logo tivemos mais problemas, agora pela constante troca de mapers, fomos roubados em sprites e ate com os mapas, apos isso tudo eu decidi tentar dar mais atenção ao projeto, porem meus problemas não pararam, mesmo assim tiver uma reunião com o Pititão e decidimos retirar alguns membros, tais que estejam prejudicando a equipe, logo o Pititão, que ficou responsável pela divulgação e recrutamento, conseguiu novos membros, então o projeto foi tocado, mas ficou sem rumo. Muitos membros tinham ideias contrarias sobre a jogabilidade do servidor, isso causou uma divisão na equipe, pelo nosso ideal de divisão de poder, que todos os membros tinham liberdade e poder nas decisões do projeto. Assim varias ideias foram surgindo e toda semana o projeto tinha um rumo diferente, por isso a ideia de novos gráficos não foi pra frente, pelas constantes mudanças o projeto não avançava, devido aos meu problemas eu decidir sair da equipe, deixei a responsabilidade com o Pititão que em pouco tempo me pediu pra retornar, assim eu o fiz, mas tivemos uma reunião e novamente tiramos os membros inativos e os que estavam prejudicando a equipe, assim sobrando apenas três membros, Eu, Pititão e Marcelo (maper), o maper era muito bom, porem os meus problemas apenas aumentaram, assim decidir sair de vez da equipe e deixei o Sky's Heart na mão do Pititão, assim o projeto seguiu por um tempo e logo depois ele foi fechado. Guardei tudo o que tinha para algum dia eu retorna o projeto, pois o Sky's Heart é muito importante para mim, me dediquei muito a este projeto e não pretendo abandoná esse objetivo e sonho, por isso decidi retorna com o projeto. Obs: citarei aqui os meus problemas pessoais, primeiro doença da minha esposa, logo depois o meu sogro ficou muito doente,ficando internado e em seguida a minha sogra também foi internada, apos um tempo todos ficaram bons, menos a minha sogra, ela piorou e voltou a ser internada, ficando na UTI por sete dias e infelizmente veio a óbito... estou citando os meu problemas pessoais para que todos tenham a certeza que eu tive sérios motivos para ter me afastado do projeto. Sky's Heart Hoje: O projeto está sendo finalizado por mim, como citei antes eu estou nesse caminho só e não pretendo recrutar ninguém, pelo menos por enquanto. Venho aqui reafirmar a todos o meu compromisso com todos as pessoas que estavam acompanhando e esperando o projeto ser lançado, por isso vim publicar está nota, logo irei reformular todos os tópicos do Sky's Heart e postar as novidades, junto com o que já está feito e o que ainda falta para o lançamento do Beta, espero que todos compreendam os meus motivos e continuem acompanhando o projeto, irei me esforça para postar as novidades no tópico uma ou duas vezes por semana... Atenciosamente Akira.
    1 ponto
  11. Zoobu

    Galeria [Keviz]

    Bom como o outro tópico é voltado a remakes de pokemons top down, decidir criar outro tópico para minhas sprites na perspectiva. Minha primeira. Superman Gogeta ssj4 (fan art) Ino Uchiha Itachi Deidara Sasuke Hebi e Akatsuki Sakura Naruto Nami Tentarei fazer outros e postar aqui ^^ Criticas e dicas bem vindas.
    1 ponto
  12. fsg

    Artes Finais

    Boa noite pessoal! Então, já finalizei o logotipo, agora gostaria de apresentar para vocês o cartão de visita e gostaria que avaliassem. -- Aproveitando o tópico, gostaria de apresentar o logotipo de um Salão de Beleza e um cartão de visita para uma Doutora aqui da região.
    1 ponto
  13. Primeiramente quero deixar bem claro que já conheço os sistemas de refinamentos ou "upgrades" para itens aqui do forum... Porém esse que eu desejo é um pouco mais real e preciso dele para colocar no servidor que estou desenvolvendo... Vamos lá, irei tentar explicar passo a passo: 1° Passo (Extraindo o Minerio) O player da vocação (11, 16, 21) usa o item (ID: 2553) Nessas Pedras (ID's: 5619, 5620), Com isso ele PODE OU NÂO Obter (70% Obter, 30% não obter) um Iron Ore (ID:5880) OBS² : Ao player usar a pick nas pedras e obter sucesso aparecerá o efeito na pedra (CONST_ME_BLOCKHIT = 3) Menssagem no server log: (Você obteve 1 iron ore!) OBS³: Caso o player use a pick e não obter sucesso aparecerá o efeito na pedra (CONST_ME_HITAREA = 9 ) Menssagem no server log: (Você Falhou!) OBS³: Após 20 "pikaretadas" (use da pick na pedra) as pedras vão se "quebrar" transformando-as nos itens (ID's: 5621,5622) 2° Ultimo Passo (Refinamento) Após o player de vocação (11, 16, 21) ter o Iron Ore ele usará o iron hammer nos itens definidos abaixo: O player só pode refinar: (Sword's, Axe's, Club's, Helmet's. Armor's, Leg's, Shield's) Nas Armas só aumentará o ATK e não a defesa. Obviamente nas armaduras e nos shields a defesa. Abaixo segue a porcentagem de obter sucesso: +1 (60%) +2 (50%) +3 (40%) +4 (30%) +5 (20%) +6 (10%) +7 (6%) +8 (4%) +9 (3%) +10 MÁXIMO (1%) OBS¹: Caso o player obtenha sucesso Aparecerá o efeito no item (CONST_ME_CRAPS = 26) e a Mensagem no server log (Você Refinou com sucesso) OBS²: Caso o player não obtenha sucesso o item será transformado em um metal trash (ID: 2256) ainda com o efeito (CONST_ME_CRAPS = 26) . e a Mensagem no server log (Você Falhou !) Bom, esse sistema é de um servidor ao qual eu jogava, caso fiquem algumas duvidas eu fiz um video em 2012 (por isso essa voz mimi) de como funciona o sistema. Bom pessoal então é isso ! espero que vocês possam me ajudar. Obrigado. UP
    1 ponto
  14. Slicer

    Sobre a Administração

    ja foi tarde... ps: eh soh minha opiniao ¬¬
    1 ponto
  15. Stigal

    Sobre a Administração

    Sempre elogiei suas posturas Alex, para mim você e um cara a seguir como exemplo, sempre disponível para trocar uma idéia e aquelas ajudinhas básicas. Espero que tenha sucesso em tudo que vier em sua vida daqui para frente, hoje, amanham e sempre! Você é show cara! Aquele abraço, e precisando estarei aqui e no skype para te dar aquela enchida Ale, você é show cara! Espero que ajude tanto quanto o Alex e que sempre esteja disponível e a disposição de seus membros! Já vi você na administração, desejar sorte para um veterano é a mesma coisa que tentar ensinar um programador a programar kkkk' Aquele abraço!
    1 ponto
  16. caotic

    Sobre a Administração

    Ficou muito feliz que o under vai assumir a adminstração. Uma pena você não ficar conosco.
    1 ponto
  17. lol ? tu não setou uma senha e colocou uma lá ? wtf, reportado para a equipe ..
    1 ponto
  18. coloca issu: sqlType = "sqlite" sqlHost = "localhost" sqlPort = 3306 sqlUser = "root" sqlPass = "" sqlDatabase = "theforgottenserver" sqlFile = "forgottenserver.s3db" sqlKeepAlive = 0 mysqlReadTimeout = 10 mysqlWriteTimeout = 10 encryptionType = "plain" no lugar : sqlType = "mysql" sqlHost = "localhost" sqlPort = 3306 sqlUser = "root" sqlPass = "minhasenha" sqlDatabase = "forgottenserver" sqlFile = "forgottenserver" sqlKeepAlive = 0 mysqlReadTimeout = 10 mysqlWriteTimeout = 10 encryptionType = "plain"
    1 ponto
  19. Lucasmml

    Galeria De LuquitossML

    Mais alguns concepts meus com a mesa espero que gostem.
    1 ponto
  20. Ali onde esta sqlDatabase = "forgottenserver" tu poe o nome da database que tu tem no phpmyadmin!!
    1 ponto
  21. ta ai cada parte ja ta dizendo oque faz qualquer coisa muda ali depois do "=" qualque duvida fala ai caso queira buff apenas em 1 abilidade coloca no resto 0!!
    1 ponto
  22. Procure por cada db.query nos arquivos e substitua por db.executeQuery.
    1 ponto
  23. iTwx

    Spell

    Nao é uma spell é um talkaction, mais se ajudar tamo junto ^^, se precisar de ajuda a editar ai manda pm
    1 ponto
  24. dalvorsn

    Piso Por Vocation

    é só usar um onStepIn, e da pra fazer em um script só, dai tu pega pela vocation sendo o índice de uma tabela. Nessa tabela cada índice será a vocação e o valor um numero correspondente ao tile, seja la qual identificador queira usar, itemid, actionid e etc. Dai é so fazer algo similar a isso: "if getPlayerLevel(cid) >= 200 and tabela[getPlayerVocation(cid)] == item.itemid then return true end"
    1 ponto
  25. DuuhCarvalho

    Piso Por Vocation

    ta ae .. druid lvl 200 ou mais function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor) if getPlayerLevel(cid) >= 200 then if getPlayerVocation(cid) == 2 or getPlayerVocation(cid) == 6 then doPlayerSendCancel(cid, "Parabéns "..getPlayerName(cid)..", agora você esta dentro de algum lugar.") doSendMagicEffect(getPlayerPosition(cid), 28) else doTeleportThing(cid, lastPosition) doPlayerSendCancel(cid, "Desculpe "..getPlayerName(cid)..", sómente um druid pode passar por aqui.") doSendMagicEffect(getPlayerPosition(cid), 2) end else doTeleportThing(cid, lastPosition) doPlayerSendCancel(cid, "Desculpe "..getPlayerName(cid)..", sómente players aparti do level 200 pode passar por aqui.") doSendMagicEffect(getPlayerPosition(cid), 2) end return TRUE end
    1 ponto
  26. dai depende de que site se ta usando e de como voce quer usar! pelo menos para o gesior tem varias formas de usar!
    1 ponto
  27. Baixe o arquivo >> Aqui << Para configurar basta editar no index.php TargetDate = "01/31/2017 07:00 PM"; Sabendo-se que o formato é Mês/Dia/Ano
    1 ponto
  28. a posição do stater.lua serve exatamente pra isso., portanto nao precisa de action id mas unique sim BOTA UM UNIQUE ID DIFERENTE PARA CADA BAÚ ,
    1 ponto
  29. <p class="bbc_center"><img alt="pu6a.png" src="http://imageshack.us/scaled/landing/32/pu6a.png" /></p> <p class="bbc_center"><span style="font-size:14px;"><strong>Biohazard Online</strong> é um servidor alternativo de <span style="color:#b22222;"><strong>Tibia</strong></span> baseado em <span style="color:#b22222;"><strong>RESIDENT EVIL</strong></span>, e com gameplay inspirado em DayZ e Infestation. Em Biohazard Online, <span>seu principal objetivo será a sobrevivência</span>, porem você poderá <span><strong>triunfar</strong></span> após concluir missões, destruir inimigos e derrotar a organização rival.</span></p> <p class="bbc_center"><span style="font-size:14px;"><span><strong>Descubra meios de conseguir comida, fuja de grande hordas de zumbis, elimine seus inimigos, se torne importante para sua organização, tudo isso em Biohazard Online.</strong></span></span></p> <p class="bbc_center"> </p> <p class="bbc_center"><strong><span style="color:rgb(105,105,105);"><span style="font-size:18px;">-Reputação-</span></span></strong>[importante]</p> <p class="bbc_center"><span><strong>Sua reputação</strong></span> irá influenciar em todo o jogo. Desde <span>como os jogadores te verão</span>, até <span>novas missões</span> e como você vai conseguir <strong><span>mercadorias</span></strong>.</p> <p class="bbc_center"> </p> <p class="bbc_center"><strong>-NPC's: </strong>Os NPC's iram <span><strong>interagir</strong></span> com você <span><strong>de forma diferente</strong></span>, podendo te receber muito bem e te dando <span><strong>descontos, ou</strong></span> em outros casos, <span><strong>nem querendo negociar com você.</strong></span></p> <p class="bbc_center"> </p> <p class="bbc_center">O <span><strong>rumo das missões</strong></span> também poderá mudar, você poderá concluir a missão com npcs de sua organização, ou com npcs que são inimigos dela, fazendo com que, mude a recompensa, e também seu bônus de reputação.</p> <p><span style="color:#b22222;"><span><strong>Reputação Negativa:</strong></span></span></p> <br /> <p class="bbc_center">Fará com que você seja mal recebido em sua organização, não consiga negociar com alguns npcs dentro da organização e também que fique com <span><strong>Status Bandit</strong></span>, <span><strong>i<strong>ss</strong>o não irá beneficia-lo dentro de sua organização, fazendo com que você possa até ser expulso da própria, <span style="color:#b22222;">seja ela qual for.</span></strong></span></p> <p class="bbc_center"> Porem, fora de sua organização, ira beneficia-lo com npcs que vendem mercadoria ilegal, e com npcs que se oponham a sua antiga organização.</p> <p> </p> <p class="bbc_center"><span><strong>Para conseguir reputação negativa</strong> você deve sempre negociar com npcs "Ilegais para sua organização" e também concluir as missões com npcs que prejudiquem a sua organização.</span></p> <p class="bbc_center"> </p> <p><span style="color:#006400;"><span><strong>Reputação Positiva:</strong></span></span></p> <br /> <p class="bbc_center">Fará com que você seja bem recebido dentro de sua organização, possibilitando missões extras, descontos com npcs e até mesmo melhores recompensas em algumas missões e também que fique com <span><strong>Status Hero</strong></span>,<span><strong> isso irá beneficia-lo dentro de sua organização, <span style="color:#b22222;">seja ela qual for.</span></strong></span> Porem, Fora de sua organização, você não conseguira comprar mercadorias ilegais direto dos NPC's, que podem ou não ser mais baratas, e também não consegui-rá interagir com inimigos de sua organização.</p> <p> </p> <p class="bbc_center"><span><strong>Para conseguir reputação positiva</strong></span> <span>sempre negocie dentro de sua organização, elimine jogadores de organizações rivais e também conclua as missões sempre dentro de sua organização, ou com npcs que não queiram prejudicá-la.</span></p> <p class="bbc_center"> </p> <p class="bbc_center"> </p> <p class="bbc_center"> </p> <p class="bbc_center"><strong><span style="color:rgb(105,105,105);"><span style="font-size:18px;">-Cenário-</span></span></strong></p> <p class="bbc_center"><strong>O cenário</strong> de Biohazard Online, é um cenário <strong>contemporâneo</strong> que se difere ao do Tibia em muitos elementos, encontrando formas de entende-lo, ou em outras palavras, decifrando o cenário você poderá ter um melhor desenvolvimento In-Game, isto é, poderá construir <span><strong>estrategias que vão te levar mais longe com mais facilidade.</strong></span></p> <p> </p> <p class="bbc_center"> </p> <p class="bbc_center"> </p> <p class="bbc_center"> </p> <p class="bbc_center"> </p> <p class="bbc_center"> </p> <p class="bbc_center"><span><strong>Um cenário apocalíptico, sujo, com muitas dificuldades ira pregar peças em você</strong></span>, te encurralando e colocando-o em situações que você nunca irá gostar de estar, porem este mesmo cenário que <span><strong>condena</strong></span>, irá lhe ajudar <span><strong>contra seus inimigos da organização rival.</strong></span></p> <p class="bbc_center"> </p> <p class="bbc_center">O jogo se passa na maioria de seu tempo em <span><strong>Raccoon City</strong></span> onde a maioria das missões estão concentradas, fora de Raccoon City pode-se encontrar novas organizações, como Tricell por exemplo. <span><strong>Estas outras organizações pouco interferem em sua jornada, a não ser que você queira participar delas.</strong></span></p> <p class="bbc_center"> </p> <p class="bbc_center"><span style="color:rgb(105,105,105);"><span style="font-size:18px;"><strong>-Organizações Primarias-</strong></span></span></p> <p class="bbc_center"> </p> <p class="bbc_center"><span style="color:rgb(105,105,105);"><span style="font-size:18px;"><strong>Umbrella Corporation.</strong></span></span></p> <p class="bbc_center"> </p> <p class="bbc_center"><span style="color:rgb(128,128,128);"><span style="font-family:'courier new';">Saiba mais sobre a Umbrella Corp.</span></span></p> <p class="bbc_center"><span style="color:rgb(128,128,128);"><span style="font-family:'courier new';"> </span></span></p> <p class="bbc_center"> </p> <p class="bbc_center"><strong>Raccoon Police Department(RPD).</strong></p> <p class="bbc_center"><strong>(Governo)</strong></p> <p class="bbc_center"><span style="color:rgb(128,128,128);"><span style="font-family:'courier new';">Saiba mais sobre o governo.</span></span></p> <p class="bbc_center"> </p> <p class="bbc_center"><span style="color:rgb(128,128,128);"><span style="font-family:'courier new';"> </span></span></p> <p class="bbc_center"> </p> <p class="bbc_center"><strong><span style="color:rgb(105,105,105);"><span style="font-size:18px;">-Inimigos-</span></span></strong></p> <p class="bbc_center">Você não enfrenta-rá apenas zumbis em Biohazard Online, você também poderá batalhar contra as mais potentes armas Biológicas criadas pelas corporações.</p> <p class="bbc_center"> </p> <p class="bbc_center"><img alt="ihgl.png" src="http://imageshack.us/a/img203/7436/ihgl.png" /></p> <p class="bbc_center">Breve estarei ajeitando este tópico.</p> <p class="bbc_center"> </p> <p class="bbc_center"><span style="color:rgb(178,34,34);"><strong><span style="font-size:18px;">-Equipe-</span></strong></span></p> <p class="bbc_center"><span style="color:rgb(128,128,128);"><span style="font-family:'courier new';">Como estou voltando com o projeto, ainda estou sem equipe. Vagas:</span></span></p> <p class="bbc_center">Administrador - <span style="color:rgb(178,34,34);">[</span><span style="color:rgb(0,128,128);"><strong>BrenoNeto</strong></span><span style="color:rgb(178,34,34);">]</span></p> <p class="bbc_center">Spriter - <span style="color:rgb(255,0,0);">[</span><span style="color:rgb(255,0,0);">Livre</span><span style="color:rgb(255,0,0);">, Livre]</span></p> <p class="bbc_center">Scripter - <span style="color:rgb(255,0,0);">[Livre]</span></p> <p class="bbc_center">Mapper - <span style="color:rgb(255,0,0);">[</span><span style="color:rgb(255,0,0);">Livre</span><span style="color:rgb(255,0,0);">, Livre]</span></p> <p class="bbc_center">RPG Maker, ou historiador.[Obs: É necessário conhecer muito sobre o tema.] - <span style="color:rgb(255,0,0);">[</span><strong><span style="color:rgb(0,128,128);">Incoveniente</span></strong><span style="color:rgb(255,0,0);">, Livre]</span></p> <p class="bbc_center">Designer Geral - <span style="color:rgb(255,0,0);">[Livre]</span></p> <p class="bbc_center"> </p> <p class="bbc_center"><span style="color:rgb(128,128,128);"><span style="font-family:'courier new';">Obrigado a todos, estarei esperando respostas. </span></span><span style="color:rgb(255,0,0);"><span style="font-family:'courier new';">[Meu skype: breno.ale21]</span></span></p>
    1 ponto
  30. se quer que seja um piso é so colocar a actionid no piso pelo RME .. não precisa colocar id nenhum no script ;s.. a tag do outro é .. <movevent type="StepIn" uniqueid="UNIQUEID" event="script" value="NomedoArquivo.lua"/>
    1 ponto
  31. Bom galera, primeiramente gostaria de dizer logo que eu testei no server do PDA by Slicer e tb eu ja tinha visto um topico com price system feito pelo ZerefShirou, porem ele so dava o price para itens... vamos logo aos scripts: Em /creaturescripts/scripts/look.lua procure por: substitua por: agora você so precisa fazer a tabela, va em /lib/configuration.lua e coloque no final, laaaaaa em baixo: ai é so ir colocando, lembrando, se vc n colocar o pokemon vai aparecer "Price: unsellable." print de como ta ake no meu: OBS: Se caso achem bugs, porfavor me avisem!!! OBS²: Se eu postei no lugar errado, desculpa, reportem para moverem para o local correto!!!
    1 ponto
  32. Oneshot

    Login Server com vários mundos.

    Login Server com Vários Mundos 1. Introdução Olá, pessoal. Já vi diversas vezes, sendo uma delas muito recente, uma dúvida bastante pertinente sobre a configuração do sistema de vários mundos para um único IP de servidor. Sim, tem muita gente que não sabe fazer isso e acaba tendo que criar vários IPs, por exemplo: sv1.fulanoot.com.br sv2.fulanoot.com.br Sim, é mais fácil fazer isso, mas perde toda a graça, pois o Tibia oficial, é dividido em mundos e com um único servidor de login. 1.1 Servidor de Login? Sim, existe um servidor responsável por aceitar o login dos jogadores e distribuir o login nos servidores secundários, ou mundos, a ele damos o nome de servidor de login. Para entender como funciona, olhe a seguinte imagem: O jogador conecta no servidor de login, pode ir para o Mundo 1 que é o próprio servidor de login, ou ir para outros mundos como na imagem, já que conectado no primeiro servidor, ele pode ser direcionado para lá. 2. Como configurar A configuração desse sistema é muito simples, primeiro tenha em mente que você irá precisar separar seus vários servidores, que se comportarão como mundos, em pastas diferentes. Cada executável com sua própria pasta, config.lua, pasta data/ e afins. O primeiro servidor, que será o nosso login server, precisará ser compilado com um parâmetro a mais, OU SEJA, você precisa ter acesso as sources do seu servidor. O parâmetro que você deverá adicionar é: -D__LOGIN_SERVER__ ATENÇÃO, você só deve compilar o primeiro executável, o primeiro servidor, com esse parâmetro, os outros não devem ser compilados assim. Servidores compilados, organizados em suas pastas, configure os servidores para acessar o banco de dados MySQL (não testei com SQLite, acredito que não funciona.) Abra o servers.xml no diretório data/XML do nosso login server, ele vai estar assim, provavelmente: <?xml version="1.0" encoding="UTF-8"?> <servers> <server id="0" name="Example" versionMin="860" versionMax="860" address="127.0.0.1" port="7171"/> </servers> Configure seus servidores aqui, por exemplo: <?xml version="1.0" encoding="UTF-8"?> <servers> <server id="1" name="Caramelo" versionMin="860" versionMax="860" address="127.0.0.1" port="7172"/> <server id="2" name="Biscoito" versionMin="860" versionMax="860" address="127.0.0.1" port="7173"/> <server id="3" name="Chocolate" versionMin="860" versionMax="860" address="127.0.0.1" port="7174"/> </servers> No campo address, você irá colocar o IP do servidor (Não testei com redirecionamento, IP fixo), e no campo port, todas as portas diferentes de 7171, ou seja vá aumentando de 1 em 1 para cada servidor/mundo. Depois de configurado, vamos ao config.lua. É mais simples, no config.lua de cada servidor, você vai mudar o campo: worldId = 0 Para cada valor que você colocou no servers.xml. Nosso login server pode ter o valor 1 por exemplo e os outros os valores 2 e 3. Você vai mudar também: gamePort = 7172 Para todas as portas que usou no servers.xml, ou seja, 7172 para o primeiro servidor, 7173 para o segundo e assim em diante. Em todos os outros servidores, com exceção do login server, você vai mudar: loginOnlyWithLoginServer = false Para: loginOnlyWithLoginServer = true Lembrando, com exceção do login server. Depois é só desbloquear as portas 7171 e 7172 e, outras que você usar, abrir todos os executáveis (não esquecendo do que compilamos como login server) e correr para o abraço. Não vou ensinar como configurar Account Manager para selecionar o mundo do personagem, pois são edições trabalhosas, talvez isso fique para outro release. Há também edições C++ que você pode fazer para poder deixar todos servidores em uma única pasta. Abraços, Oneshot
    1 ponto
  33. Shoguns

    [pedido] item editor 8.60

    Ta ai, eu mesmo que botei no 4Shared: http://www.4shared.com/rar/6NXX0SFmce/oteditor.html?
    1 ponto
  34. Omega

    [5] - Aplicações em OTservers (I)

    Aplicando em OTServers - I Muito foi desenvolvido desde o início dos OTServers e, embora muitos não tenham observado isso, esse desenvolvimento foi lento. Inicialmente, era muito difícil criar scripts para OTS's, porque o suporte para tal era pequeno. Os primeiros scripts desenvolvidos eram somente actions e spells. Movements, globalevents, talkactions e, finalmente, creaturescripts foram introduzidos posteriormente. Por isso, vamos começar com aplicações básicas de actions, que são scripts que definem uma função chamada quando o jogador usa um item. Antes disso, vamos começar entendendo como funcionam os OTServers: o código-fonte, que é compilado e se transforma, em última instância, naquele executável que serve para abrir o servidor, é feito em C++, uma outra linguagem de programação. Essa parte define toda a base do servidor e é mais complicada de se editar, pois toda vez ele terá que ser compilado novamente. Por isso, utiliza-se Lua, uma linguagem de fácil edição. O código-fonte ou source code ou simplesmente, sources do servidor define o que acontecerá com as informações recebidas pelo cliente. Quando um jogador clica em um item, esse clique é enviado para o servidor, que encaminha essa resposta para um script Lua do tipo action. O servidor, então, lê esse código Lua e o executa. E é aí que nós, scripters Lua, entramos. Até agora abordamos um código para um baú de quest, mas com funções fictícias. Os códigos-fonte mais usados são os desenvolvidos pelo The Forgotten Server Team, mais conhecidos como TFS. Nele, existem várias funções que podemos usar em nossos códigos Lua. Vamos usar algumas funções dele a seguir, para criarmos um script de um baú de quest de verdade. Primeiramente, vamos pensar nas restrições: um baú de quest deve poder ser aberto apenas uma vez, certo? Essa é nossa primeira condição. Além disso, talvez queiramos fazer um baú específico para uma vocação. Essa será nossa segunda condição. Então, o jogador terá duas condições para cumprir e deverá receber uma mensagem avisando se não cumprir cada condição. Caso ambas sejam cumpridas, ele deverá ganhar a recompensa e algo que evite que ele abra novamente o baú. Vamos criar um esboço do código: Agora precisamos traduzir isso para as funções utilizadas e entendidas pelo servidor: a função básica, que é chamada quando um item é usado, se chama onUse e seus dois primeiros parâmetros são cid e item. Precisamos entender o que é o cid. Cada criatura dentro do servidor tem um número de identificação único para ela. Esse número é denominado cid – creature identification. Para executarmos alguma função para uma criatura ou para conseguirmos informação sobre essa criatura, precisaremos fornecer seu número de identificação como parâmetro dessa função. Segue no link uma lista de algumas das várias funções existentes nos servidores 8.6 – aqui. Várias informações dos jogadores podem ser guardadas no banco de dados do servidor (mais sobre isso no capítulo de Banco de dados e SQL). Inclusive informações que chamamos de storages, que podem ser usados para guardar números e strings e não são apagados quando o jogador loga ou morre. Para manipulá-los, podemos utilizar a função setPlayerStorageValue(cid, storageKey, value) e getPlayerStorageValue(cid, storageKey). Cada storage tem uma chave de identificação (storageKey). Se ele não tiver um valor definido, seu valor padrão é -1. Portanto, podemos utilizar essas funções para verificar se o jogador já fez ou não a quest, dessa forma: if getPlayerStorageValue(cid, storageKey) == -1 then jogador não fez a quest! else jogador já fez a quest! end Utilizando a lista das funções, tente selecionar as que você deverá usar para o script do baú. OBS.: deve-se ter cuidado para não repetir o número de um storageKey, pois pode haver conflito entre dois scripts diferentes. Assim, você pode escolher aleatoriamente um número com 6 ou mais algarismos, fazendo com que a chance de repetição seja muito pequena ou listando os storages que você já usou e conferindo para não repetir. Para verificar quais storages já foram usadas, utilize essa talkaction. Assim como várias outras constantes do servidor, cada vocação é associada a um número: sorcerer = 1, druid = 2, paladin = 3 e knight = 4. Para promotions, soma-se 4 ao número da vocação. Para ver o valor dessas e das outras constantes, vá na pasta data do seu servidor e procure pelo arquivo 000-constant.lua dentro da pasta lib. O script do nosso baú deverá ficar com uma cara mais ou menos assim: http://pastebin.com/BVQVzqhi Não se preocupe se você ainda não entendeu totalmente esse código, em breve você poderá fazê-lo completamente sozinho, se já não pode. Essa foi apenas uma introdução a aplicações em OTServers.
    1 ponto
  35. não tem como eu testar aqui mais tenta ae. não conseguir fazer tudo em apenas 1 script então... em movements/scripts cria um arquivo.lua e coloca isso ... local positions = { [1] = {x = 157, y = 711, z = 7}, -- posição 1 [2] = {x = 156, y = 739, z = 7}, -- posição 2 [3] = {x = 157, y = 768, z = 7}, -- posição 3 } function onStepIn(cid, item, fromPosition) doTeleportThing(cid, positions[math.random(1, #positions)]) setPlayerStorageValue(cid, 90972, 1) return TRUE end coloca a tag em movements.xml com o ActionID que vc quiser .. coloca a ActionID no teleporte e o teleporte vai te transportar pra uma dessas 3 posições aleatoriamente .. <movevent type="StepIn" actionid="ActionID" event="script" value="NomedoArquivo.lua" /> agora para aparecer os monster você vai ter que colocar um UniqueID no tile que o player será transportado.. ex : se o teleporte enviar o player para a posição 1 , nessa posição vai ter um UniqueID que vai sumar o monster .. em movements/scripts cria um arquivo.lua e coloca isso dentro.. function onStepIn(cid, item, fromPosition, toPosition) local monsters = { {"Demon", {x = 164 , y = 144, z = 7}}, -- monster 1, coloca o nome do monster e a posição onde ele vai aparecer {"Orshabaal", {x = 165 ,y = 144, z = 7}}, -- nome do monster, e a pos que ele vai aparecer {"Medusa", {x = 166 ,y = 144, z = 7}}, -- faça o mesmo com todos os monsters {"Dragon", {x = 164 ,y = 145, z = 7}}, -- ... {"Dragon Lord", {x = 164 ,y = 146, z = 7}}, -- ... {"Skeleton", {x = 164 ,y = 147, z = 7}}, -- ... {"Frost Dragon", {x = 165 ,y = 148, z = 7}}, -- ... {"Morgaroth", {x = 163 ,y = 149, z = 7}} -- ... } if isPlayer(cid) then if getPlayerStorageValue(cid, 90972) >= 1 then for i = 1, #monsters do doCreateMonster(monsters[i][1], monsters[i][2]) setPlayerStorageValue(cid, 90972, 0) end end end return true end assim que o player for transportado ele vai pisar no tile e os monster serão sumonados . faz o mesmo com todas as posições que o teleporte vai transportar o player ... .. é isso , testa ae se der algum erro posta ae ! ajudei, rep ><
    1 ponto
  36. ston94

    [Encerrado]Equipe Global Team

    Boa noite. Gostaria de saber oque você tem pronto. Se você já possui um mapa, se você tem scripts, quais você tem, etc.. Queria saber também o tempo que você tem investido no seu OT até agora. Fico à disposição, no skype ston94, no facebook Lucas Grannier. Me contate antes para gente conversar à respeito ! A partir daí te mando meus trabalhos e projetos. Obrigado.
    1 ponto
  37. iTwx

    Ajuda tira uma duvida!

    Colocque sua tibia.spr e dat. na area de trabalho e localize o mapa, se pedir pra localizar tibia spr e dat clica na area de trabalho. espero ter ajudado
    1 ponto
  38. (Esta enquete é pra saber se você é ou não, a favor de ter quer ser registrado para poder ter acesso ao nosso conteúdo) Esse é um assunto delicado, no qual precisamos e queremos a ajuda de vocês. Nossos membros frequentes, os que realmente dão valor e fazer o possível para o crescimento de nossa comunidade. Participem da enquete com um sim ou não. Seu voto é importante para nós. Atenciosamente, Equipe.
    1 ponto
  39. Gabriel Couto

    Sua Foto no Nosso Facebook!

    Faaala XTibia, tranquilo? Estamos iniciando agora um novo evento, um evento contínuo no XTibia! Agora você pode enviar uma foto sua em seu char, sendo de OTServer ou Tibia Global! Escolheremos a cada dia, uma foto para ser postada lá, escolheremos a melhor, então, sejam criativos, pois isso é quase uma competição! Aaah! Outra novidade: As 5 melhores de cada mês concorrerão à um prêmio de medalha especial! Esses cinco ganharão também pontos de reputação! Fique atento aos requesitos: | Sua Foto deve ter a frase: "Hail Facebook XTibia.com!" | | Sua Foto deve ser de tamanho 480 x 352 | | Ao tirar sua foto, você deve ir em "Graphics > Advanced" e clicar em "Don't Stretch/Shrink Game Window" | | Sua foto precisa ser boa ou criativa! | | SUA FOTO NÃO PODE SER EDITADA! (Somente cortada no tamanho descrito) | Como Enviar? | Envie o link de sua foto para: anyur@xtibia.com | | Lembre-se de Informar o seu nome no Fórum XTibia | | Caso você falhe nos 7 pontos acima, sua foto será descartada sem aviso prévio | Exemplo de Foto: *Essa foto foi adicionada ao Facebook, mas não concorre ao prêmio!* Como Atender ao Requisito do Tamanho e do "Don't Stretch/Shrink Game Window": Comecem a participar, e lembrem-se que o melhor ganhará a medalha especial a cada mês! Acessem o Facebook do XTibia: https://www.facebook.com/XTibia Abraços, Gabriel Couto.
    1 ponto
  40. garep

    Emblemas na Skill Bar

    ->Emblemas na Skill Bar Pxg <- Pra quem esta fazendo um otserv de poketibia ta um script. >Tudo isso no Client< 1 - paga tudo que esta em Skills.OTUI e add esse SkillFirstWidget < UIWidget SkillButton < UIButton height: 21 margin-bottom: 2 &onClick: onSkillButtonClick SkillNameLabel < GameLabel font: verdana-11px-monochrome anchors.left: parent.left anchors.top: parent.top anchors.bottom: parent.bottom SkillValueLabel < GameLabel id: value font: verdana-11px-monochrome text-align: topright anchors.right: parent.right anchors.top: parent.top anchors.bottom: parent.bottom anchors.left: prev.left SkillPercentPanel < ProgressBar id: percent background-color: green height: 5 image-source: /modules/game_skills/img/skillprogress image-border-left: 2 image-border-right: 3 margin-top: 15 anchors.left: parent.left anchors.right: parent.right anchors.top: parent.top phantom: false MiniWindow id: skillWindow !text: tr('Skills') height: 150 icon: /modules/game_skills/img/perfil_icon @onClose: modules.game_skills.onMiniWindowClose() &save: true MiniWindowContents padding-left: 5 padding-right: 5 layout: verticalBox SkillButton margin-top: 5 id: experience height: 13 SkillValueLabel width: 130 text-align: top anchors.horizontalCenter: parent.horizontalCenter margin-left: 15 UIButton id: clanicon width: 37 height: 36 image-source: /modules/game_skills/img/skillicon anchors.top: parent.top anchors.left: parent.left SkillButton margin-top: 5 id: experiencee height: 13 SkillValueLabel width: 130 font: sans-bold-16px text-align: top anchors.horizontalCenter: parent.horizontalCenter margin-top: -6 margin-left: 15 SkillButton id: level SkillNameLabel !text: tr('Experience') SkillValueLabel SkillPercentPanel background-color: red SkillButton id: skillId6 SkillNameLabel !text: tr('Fishing') SkillValueLabel SkillPercentPanel SkillButton id: skillId3 SkillNameLabel !text: tr('Headbutt') SkillValueLabel SkillPercentPanel SkillButton id: health height: 15 SkillNameLabel !text: tr('Hit Points') SkillValueLabel visible: false SkillButton id: mana height: 15 SkillNameLabel !text: tr('Mana') SkillValueLabel visible: false SkillButton id: capacity height: 15 SkillNameLabel !text: tr('Capacity') SkillValueLabel visible: false SkillButton id: regenerationTime SkillNameLabel !text: tr('Regeneration Time') SkillValueLabel visible: false SkillButton id: offlineTraining SkillNameLabel !text: tr('Offline Training') SkillValueLabel SkillPercentPanel visible: false SkillButton id: magiclevel SkillNameLabel !text: tr('Magic Level') SkillValueLabel SkillPercentPanel background-color: red visible: false SkillButton id: stamina height: 15 SkillNameLabel !text: tr('Stamina') SkillValueLabel margin-top: 8 HorizontalSeparator height: 7 anchors.top: parent.top anchors.left: parent.left anchors.right: parent.right margin-top: -6 SkillButton id: soul height: 15 SkillNameLabel !text: tr('All Catches') SkillValueLabel SkillButton id: speed height: 15 SkillNameLabel !text: tr('Speed') SkillValueLabel SkillButton id: skillId1 margin-top: 8 height: 15 SkillNameLabel !text: tr('Duels Won') SkillValueLabel HorizontalSeparator height: 7 anchors.top: parent.top anchors.left: parent.left anchors.right: parent.right margin-top: -6 SkillButton id: skillId0 height: 15 SkillNameLabel !text: tr('Duels Lost') SkillValueLabel SkillButton id: skillId2 SkillNameLabel !text: tr('Sword Fighting') SkillValueLabel SkillPercentPanel visible: false SkillButton id: skillId4 SkillNameLabel !text: tr('Distance Fighting') SkillValueLabel SkillPercentPanel visible: false SkillButton id: skillId5 SkillNameLabel !text: tr('Shielding') SkillValueLabel SkillPercentPanel visible: false 2 - agora vai em skills.lua paga tudo e add esse ai skillsWindow = nil skillsButton = nil local imgs = { [-1] = "/modules/game_skills/img/trainer", -- -1 quer dizer esta sem clan... [1] = "/modules/game_skills/img/volcanic", [2] = "/modules/game_skills/img/seavell", [3] = "/modules/game_skills/img/orebound", [4] = "/modules/game_skills/img/wingeon", [5] = "/modules/game_skills/img/malefic", [6] = "/modules/game_skills/img/gardestrike", [7] = "/modules/game_skills/img/psycraft ", [8] = "/modules/game_skills/img/naturia", [9] = "/modules/game_skills/img/raibolt", } function init() connect(LocalPlayer, { onExperienceChange = onExperienceChange, onLevelChange = onLevelChange, onHealthChange = onHealthChange, onManaChange = onManaChange, onSoulChange = onSoulChange, onFreeCapacityChange = onFreeCapacityChange, onTotalCapacityChange = onTotalCapacityChange, onStaminaChange = onStaminaChange, onOfflineTrainingChange = onOfflineTrainingChange, onRegenerationChange = onRegenerationChange, onSpeedChange = onSpeedChange, onBaseSpeedChange = onBaseSpeedChange, onMagicLevelChange = onMagicLevelChange, onBaseMagicLevelChange = onBaseMagicLevelChange, onSkillChange = onSkillChange, onBaseSkillChange = onBaseSkillChange }) connect(g_game, { onGameStart = refresh, onGameEnd = offline }) connect(g_game, 'onTextMessage', getParams) connect(g_game, {onGameStart = changeImg}) skillsButton = modules.client_topmenu.addCustomRightButton('skillsButton', tr('skills') .. ' (Ctrl+S)', '/modules/game_skills/img/perfil_icon', toggle, true) skillsButton:setOn(true) skillsWindow = g_ui.loadUI('skills', modules.game_interface.getRightPanel()) -- skills g_keyboard.bindKeyDown('Ctrl+S', toggle) refresh() skillsWindow:setup() end function terminate() disconnect(LocalPlayer, { onExperienceChange = onExperienceChange, onLevelChange = onLevelChange, onHealthChange = onHealthChange, onManaChange = onManaChange, onSoulChange = onSoulChange, onFreeCapacityChange = onFreeCapacityChange, onTotalCapacityChange = onTotalCapacityChange, onStaminaChange = onStaminaChange, onOfflineTrainingChange = onOfflineTrainingChange, onRegenerationChange = onRegenerationChange, onSpeedChange = onSpeedChange, onBaseSpeedChange = onBaseSpeedChange, onMagicLevelChange = onMagicLevelChange, onBaseMagicLevelChange = onBaseMagicLevelChange, onSkillChange = onSkillChange, onBaseSkillChange = onBaseSkillChange }) disconnect(g_game, { onGameStart = refresh, onGameEnd = offline }) disconnect(g_game, 'onTextMessage', getParams) disconnect(g_game, {onGameStart = changeImg}) g_keyboard.unbindKeyDown('Ctrl+S') skillsWindow:destroy() skillsButton:destroy() end function changeImg() local player = g_game.getLocalPlayer() if not player then return end g_game.talk("#getSto# 86228") end function getParams(mode, text) if not g_game.isOnline() then return end if mode == MessageModes.Failure then if text:find("#getSto#") then local icon = skillsWindow:recursiveGetChildById("clanicon") if icon then local t = string.explode(text, " ") icon:setImageSource(imgs[tonumber(t[2])]) end end end end function expForLevel(level) return math.floor((50*level*level*level)/3 - 100*level*level + (850*level)/3 - 200) end function expToAdvance(currentLevel, currentExp) return expForLevel(currentLevel+1) - currentExp end function resetSkillColor(id) local skill = skillsWindow:recursiveGetChildById(id) local widget = skill:getChildById('value') widget:setColor('#bbbbbb') end function setSkillBase(id, value, baseValue) if baseValue <= 0 or value < 0 then return end local skill = skillsWindow:recursiveGetChildById(id) local widget = skill:getChildById('value') if value > baseValue then widget:setColor('#008b00') -- green skill:setTooltip(baseValue .. ' +' .. (value - baseValue)) elseif value < baseValue then widget:setColor('#b22222') -- red skill:setTooltip(baseValue .. ' ' .. (value - baseValue)) else widget:setColor('#bbbbbb') -- default skill:removeTooltip() end end function setSkillValue(id, value) local skill = skillsWindow:recursiveGetChildById(id) local widget = skill:getChildById('value') widget:setText(value) end function setSkillColor(id, value) local skill = skillsWindow:recursiveGetChildById(id) local widget = skill:getChildById('value') widget:setColor(value) end function setSkillTooltip(id, value) local skill = skillsWindow:recursiveGetChildById(id) local widget = skill:getChildById('value') widget:setTooltip(value) end function setSkillPercent(id, percent, tooltip) local skill = skillsWindow:recursiveGetChildById(id) local widget = skill:getChildById('percent') widget:setPercent(math.floor(percent)) if tooltip then widget:setTooltip(tooltip) end end function checkAlert(id, value, maxValue, threshold, greaterThan) if greaterThan == nil then greaterThan = false end local alert = false -- maxValue can be set to false to check value and threshold -- used for regeneration checking if type(maxValue) == 'boolean' then if maxValue then return end if greaterThan then if value > threshold then alert = true end else if value < threshold then alert = true end end elseif type(maxValue) == 'number' then if maxValue < 0 then return end local percent = math.floor((value / maxValue) * 100) if greaterThan then if percent > threshold then alert = true end else if percent < threshold then alert = true end end end if alert then setSkillColor(id, '#b22222') -- red else resetSkillColor(id) end end function update() local offlineTraining = skillsWindow:recursiveGetChildById('offlineTraining') if not g_game.getFeature(GameOfflineTrainingTime) then offlineTraining:hide() else offlineTraining:show() end local regenerationTime = skillsWindow:recursiveGetChildById('regenerationTime') if not g_game.getFeature(GamePlayerRegenerationTime) then regenerationTime:hide() else regenerationTime:show() end end function refresh() local player = g_game.getLocalPlayer() if not player then return end if expSpeedEvent then expSpeedEvent:cancel() end expSpeedEvent = cycleEvent(checkExpSpeed, 30*1000) onExperienceChange(player, player:getExperience()) onLevelChange(player, player:getLevel(), player:getLevelPercent()) onHealthChange(player, player:getHealth(), player:getMaxHealth()) onManaChange(player, player:getMana(), player:getMaxMana()) onSoulChange(player, player:getSoul()) onFreeCapacityChange(player, player:getFreeCapacity()) onStaminaChange(player, player:getStamina()) onMagicLevelChange(player, player:getMagicLevel(), player:getMagicLevelPercent()) onOfflineTrainingChange(player, player:getOfflineTrainingTime()) onRegenerationChange(player, player:getRegenerationTime()) onSpeedChange(player, player:getSpeed()) for i=0,6 do onSkillChange(player, i, player:getSkillLevel(i), player:getSkillLevelPercent(i)) onBaseSkillChange(player, i, player:getSkillBaseLevel(i)) end update() local contentsPanel = skillsWindow:getChildById('contentsPanel') skillsWindow:setContentMinimumHeight(110) skillsWindow:setContentMaximumHeight(210) end function offline() if expSpeedEvent then expSpeedEvent:cancel() expSpeedEvent = nil end end function toggle() if skillsButton:isOn() then skillsWindow:close() skillsButton:setOn(false) else skillsWindow:open() skillsButton:setOn(true) skillsButton:setOpacity(1.0) end end function checkExpSpeed() local player = g_game.getLocalPlayer() if not player then return end local currentExp = player:getExperience() local currentTime = g_clock.seconds() if player.lastExps ~= nil then player.expSpeed = (currentExp - player.lastExps[1][1])/(currentTime - player.lastExps[1][2]) onLevelChange(player, player:getLevel(), player:getLevelPercent()) else player.lastExps = {} end table.insert(player.lastExps, {currentExp, currentTime}) if #player.lastExps > 30 then table.remove(player.lastExps, 1) end end function onMiniWindowClose() skillsButton:setOn(false) skillsButton:setOpacity(0.5) end function onSkillButtonClick(button) local percentBar = button:getChildById('percent') if percentBar then percentBar:setVisible(not percentBar:isVisible()) if percentBar:isVisible() then button:setHeight(21) else button:setHeight(21 - 6) end end end function onExperienceChange(localPlayer, value) setSkillValue('level', value) end function onLevelChange(localPlayer, value, percent) setSkillValue('experience', localPlayer:getName()) setSkillValue('experiencee', value) local text = tr('You have %s percent to go', 100 - percent) .. '\n' .. tr('%s of experience left', expToAdvance(localPlayer:getLevel(), localPlayer:getExperience())) if localPlayer.expSpeed ~= nil then local expPerHour = math.floor(localPlayer.expSpeed * 3600) if expPerHour > 0 then local nextLevelExp = expForLevel(localPlayer:getLevel()+1) local hoursLeft = (nextLevelExp - localPlayer:getExperience()) / expPerHour local minutesLeft = math.floor((hoursLeft - math.floor(hoursLeft))*60) hoursLeft = math.floor(hoursLeft) text = text .. '\n' .. tr('%d of experience per hour', expPerHour) text = text .. '\n' .. tr('Next level in %d hours and %d minutes', hoursLeft, minutesLeft) end end setSkillPercent('level', percent, text) end function onHealthChange(localPlayer, health, maxHealth) setSkillValue('health', health) checkAlert('health', health, maxHealth, 30) end function onManaChange(localPlayer, mana, maxMana) setSkillValue('mana', mana) checkAlert('mana', mana, maxMana, 30) end function onSoulChange(localPlayer, soul) setSkillValue('soul', soul) end function onFreeCapacityChange(localPlayer, freeCapacity) setSkillValue('capacity', freeCapacity) checkAlert('capacity', freeCapacity, localPlayer:getTotalCapacity(), 20) end function onTotalCapacityChange(localPlayer, totalCapacity) checkAlert('capacity', localPlayer:getFreeCapacity(), totalCapacity, 20) end function onStaminaChange(localPlayer, stamina) local hours = math.floor(stamina / 60) local minutes = stamina % 60 if minutes < 10 then minutes = '0' .. minutes end setSkillValue('stamina', hours .. ":" .. minutes) end function onOfflineTrainingChange(localPlayer, offlineTrainingTime) if not g_game.getFeature(GameOfflineTrainingTime) then return end local hours = math.floor(offlineTrainingTime / 60) local minutes = offlineTrainingTime % 60 if minutes < 10 then minutes = '0' .. minutes end local percent = 100 * offlineTrainingTime / (12 * 60) -- max is 12 hours setSkillValue('offlineTraining', hours .. ":" .. minutes) setSkillPercent('offlineTraining', percent, tr('You have %s percent', percent)) end function onRegenerationChange(localPlayer, regenerationTime) if not g_game.getFeature(GamePlayerRegenerationTime) or regenerationTime < 0 then return end local minutes = math.floor(regenerationTime / 60) local seconds = regenerationTime % 60 if seconds < 10 then seconds = '0' .. seconds end setSkillValue('regenerationTime', minutes .. ":" .. seconds) checkAlert('regenerationTime', regenerationTime, false, 300) end function onSpeedChange(localPlayer, speed) setSkillValue('speed', speed) onBaseSpeedChange(localPlayer, localPlayer:getBaseSpeed()) end function onBaseSpeedChange(localPlayer, baseSpeed) setSkillBase('speed', localPlayer:getSpeed(), baseSpeed) end function onMagicLevelChange(localPlayer, magiclevel, percent) setSkillValue('magiclevel', magiclevel) setSkillPercent('magiclevel', percent, tr('You have %s percent to go', 100 - percent)) onBaseMagicLevelChange(localPlayer, localPlayer:getBaseMagicLevel()) end function onBaseMagicLevelChange(localPlayer, baseMagicLevel) setSkillBase('magiclevel', localPlayer:getMagicLevel(), baseMagicLevel) end function onSkillChange(localPlayer, id, level, percent) setSkillValue('skillId' .. id, level) setSkillPercent('skillId2', percent, tr('You have %s percent to go', 100 - percent)) setSkillPercent('skillId3', percent, tr('You have %s percent to go', 100 - percent)) setSkillPercent('skillId4', percent, tr('You have %s percent to go', 100 - percent)) setSkillPercent('skillId5', percent, tr('You have %s percent to go', 100 - percent)) setSkillPercent('skillId6', percent, tr('You have %s percent to go', 100 - percent)) onBaseSkillChange(localPlayer, id, localPlayer:getSkillBaseLevel(id)) end function onBaseSkillChange(localPlayer, id, baseLevel) setSkillBase('skillId'..id, localPlayer:getSkillLevel(id), baseLevel) end --------------------------------------------------------------Client----------------------------------------------- --------------------------------------------------------------Serve-------------------------------------------- 1- data>talkactions> e crie um arquivo chamado. talkClan.lua e add isso nele. function onSay(cid, words, param) if not tonumber(param) then return true end doPlayerSendCancel(cid, "#getSto# ".. getPlayerStorageValue(cid, tonumber(param))) return true end 2- agora vai em talkactions.xml e add essa tag. <talkaction words="#getSto#" event="script" value="talkClan.lua"/> pronto agora é so testa, somente para PDA, pois so testei la... agora vamos la esse script peguei do client do "pokemon world" e a talk quem fez foi eu. Gosto da +rep
    1 ponto
  41. Gabrieltxu

    Erondino Poketibia Revolution 1.0

    Apresentação Prezados Amigos, com muito prazer a ERONDINO TEAM está aqui para disponibilizar a melhor versão FULL de Poketibia, totalmente OPEN. Nossa politica é sempre disponibilizar versões totalmente editáveis, com muita estabilidade e poucos bugs, demoramos para está nova versão mas fizemos um grande UPGRADE, um grande passo para o avanço dos Poketibia Servers. Abaixo estarei descriminando tudo o que a versão oferece, com pequenos tutoriais sobre algumas funcionalidades, bem como imagens para Preview. Mas podem Baixar com toda certeza a revolução de Poketibia, e como reforçamos a mais aberta e editavel versão deste seguimento, pois fazemos nossos servidores pensando em você, que edita e abre seus servidores. Características do Servidor Imagens Download Erondino Poketibia rev1.0 + DLLS http://www.mediafire.com/?xdiea94go7bb7y9 Client http://www.mediafire.com/?l75j1t6pxvpyfz8 Scan Scan Server: https://www.virustotal.com/file/269b...is/1330231300/ Scan Client: https://www.virustotal.com/file/117c...is/1330231519/ WebSite Erondino Team (Tutoriais, duvidas, sugestões) Atenciosamente, equipe Erondino. Enfim agradecemos também a todos que de certo modo participaram para a evolução do Poketibia pois todos eles tem créditos! Como Svke e muitos outros pioneiros. FAQ SOBRE A VERSÃO Erondino Caioo (Spriter) Nic loeher (Scripter avançado) Andrey Nithack (WebMaster) Red Dragon (Scripter avançado) Kois (Scripter) [*] È isso galera espero ter ajudado Vocês Trazendo esse Novo conteudo de Poketibia base do Erondino!
    1 ponto
  42. Eu tbm gostaria de saber rep+ pra quem souber
    1 ponto
Líderes está configurado para São Paulo/GMT-03:00
×
×
  • Criar Novo...