Histórico de Curtidas
-
Androgyno deu reputação a Caronte em [GLOBALEVENT] Tempo de jogo no seu OTServerTestado em TFS 0.4
Olá pessoal, esse é um sistemazinho de UpTime, ele funciona assim:
OBS: Coloquei interval 5000 para testar, que é 5 segundos, mas você pode alterar na TAG, que eu irei passar, onde tem o 5000, ajuste a gosto.
Para instalar ele é bem simples:
TFS 0.4
TFS 1.2 (Se pega 100% no 1.1 , Confirme no tópico)
É isso, pessoal
-
Androgyno deu reputação a grafit em [Função] getPlayersInAreaFunção que retorna os players que estão numa área específica
function getPlayersInArea(fromPos, toPos) -- function by amoeba13 playersInArea = {} for x = fromPos.x, toPos.x do for y = fromPos.y, toPos.y do for z = fromPos.z, toPos.z do totalArea = {x=x, y=y, z=z} playerz = getTopCreature(totalArea) if isPlayer(playerz.uid) then table.insert(playersInArea, playerz.uid) end end end end return playersInArea end Exemplo de uso:
function onSay(cid, words, param, channel) local area = getPlayersInArea({x = 153, y = 50, z = 7}, {x = 156, y = 53, z = 7}) if area then for i = 1, (#area) do doTeleportThing(area[i], {x = 160, y = 51, z = 7}, false) end end return true end Créditos: Killua
-
Androgyno deu reputação a rohfagundes em Variação de Dano Reformulada(Source)Ola, atualmente a variação de dano é enorme e não importa qual arma você usa e quanto de skill você tem, na formula o dano minimo é sempre 0. Então vou mostrar pra vocês onde pode ser editado para resolver esse problema
• Versão - Otx 2(final) -- Baseado na Tfs 0.3.7
• Em weapons.ccp procure por:
Nessa parte:
int32_t damage = -random_range(0, (int32_t)maxDamage, DISTRO_NORMAL); Troque por:
int32_t damage = -random_range((int32_t)maxDamage/2, (int32_t)maxDamage, DISTRO_NORMAL); Sendo assim o dano de fist tera uma variedade de danomaximo/2 a danomaximo
• Agora para editar o dano de arma, procure:
Nessa parte: return -random_range(0, ret, DISTRO_NORMAL); Troque por: return -random_range(ret/2, ret, DISTRO_NORMAL); Sendo assim o dano de (sword,axe e club) terá uma variedade de danomaximo/2 a danomaximo
• Agora dano de arma elemental, procure:
Nessa parte: return -random_range(0, ret, DISTRO_NORMAL); Troque por: return -random_range(ret/2, ret, DISTRO_NORMAL); Sendo assim o dano elemental de (sword,axe e club) terá uma variedade de danomaximo/2 a danomaximo • Agora distance, procure:
-
Androgyno deu reputação a xWhiteWolf em Critical Skill Systemsim, a chance do critical é definida por um storage:
if (getPlayerStorageValue(attacker, lvlcrit)*3) >= math.random (0,1000)
Se o valor do storage * 3 for igual ou maior que um numero aleatorio entre 0 e mil solta o crítico. Se vc quiser que todos os players tenham crítico é só colocar no login.lua pra se o player tiver esse valor de storage = -1 então setar pra 50. Daí todos os players terão 15% de chance de dar crítico. No creaturescripts onAdvance vc tb pode colocar pra ganhar 1 ponto por nível (setar o storage como sendo o storage +1).. Dá pra vc editar praticamente do jeito que vc quiser, por isso é um system
-
Androgyno deu reputação a xWhiteWolf em Critical Skill Systemagora dá
--[[Critical System By Night Wolf]] local lvlcrit = 48913 local multiplier = 1.5 local efeito = 2 --- efeito que vai sair do player/criatura que tomar o crítico function onStatsChange(cid, attacker, type, combat, value) if type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS and isCreature(attacker) then if (getPlayerStorageValue(attacker, lvlcrit)*3) >= math.random (0,1000) then dano = math.ceil(value*(multiplier)) doTargetCombatHealth(attacker, cid, combat, -dano, -dano, 255) doSendAnimatedText(getCreaturePos(attacker), "CRITICAL!!", 144) doSendMagicEffect(getCreaturePos(attacker), efeito) return false end end return true end -
Androgyno deu reputação a xWhiteWolf em Critical Skill SystemFala galera do TK, vejo que tem bastante gente procurando esse sisteminha que é praticamente igual ao dodge system, então eu decidi fazer visto que na realidade era só mudar 3 linhas kkkk em todo caso ta aí pra quem quiser:
creaturescripts.xml:
<!-- CRITICAL SYSTEM --> <event type="statschange" name="critical" event="script" value="critical.lua"/> creaturescripts\scripts\login.lua:
--- CRITICAL SYSTEM ---- registerCreatureEvent(cid, "critical") if getPlayerStorageValue(cid, 48913) == -1 then setPlayerStorageValue(cid, 48913, 0) end creaturescritps\scripts\critical.lua:
--[[Critical System ------------------------- By Night Wolf]] local lvlcrit = 48913 local multiplier = 1.5 function onStatsChange(cid, attacker, type, combat, value) if isPlayer(attacker) and (not (attacker == cid)) and (type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS) then if (getPlayerStorageValue(attacker, lvlcrit)*3) >= math.random (0,1000) then dano = math.ceil(value*(multiplier)) doTargetCombatHealth(attacker, cid, combat, -dano, -dano, 255) doSendAnimatedText(getCreaturePos(attacker), "CRITICAL!!", 144) return false end end return true end lvlcrit é o storage que fica salvo o seu level de critical e multiplier é o multiplicador do dano para ataques críticos.. nesse caso um ataque critico vai ser 1,5 vezes maior doque um ataque normal (50% maior)
Agora em actions.xml adicione:
<action itemid="1294" script="criticalrock.lua"/> e em actions\scripts\criticalrock.lua adicione:
--- CRITICAL System by Night Wolf local config = { effectonuse = 14, -- efeito que sai levelscrit = 100, --- leveis que terão storagecrit = 48913 -- storage que será verificado } function onUse(cid, item, frompos, item2, topos) if getPlayerStorageValue(cid, config.storagecrit) < config.levelscrit then doRemoveItem(item.uid, 1) doSendMagicEffect(topos,config.effectonuse) doPlayerSendTextMessage(cid,22,"You've Leveled your Critical Skill to ["..(getPlayerStorageValue(cid, config.storagecrit)+1).."/"..config.levelscrit.."].") setPlayerStorageValue(cid, config.storagecrit, getPlayerStorageValue(cid, config.storagecrit)+1) elseif getPlayerStorageValue(cid, config.storagecrit) >= config.levelscrit then doPlayerSendTextMessage(cid,22,"You've already reached the MAX level of Critical Skill.\nCongratulations!!!!") return 0 end return 1 end Feito isso tá pronto, pra editar o item que dá a skill de critical vc edita no actions.xml mesmo:
<action itemid="1294" << ID do item que será usado pra dar a skill.
A config tá bem simples:
effectonuse = 14, -- efeito que sai
levelscrit = 100, --- leveis que terão
storagecrit = 48913 -- storage que será verificado.
Lembrando que cada pedra utilizada dará 0,3% a mais de chance.. 10 pedras dão 3% de chance de dar critico a cada ataque e 100 pedras (NIVEL MÁXIMO PADRÃO) dará 30% de chance de dar crítico em cada ataque.
Espero que vcs gostem, qualquer coisa deixem os comentários aqui.
Obs: aqui tá uma foto
Note que esse script só funciona em players, se vc quiser que funcione em monstros você vai ter que abrir um por um todos os monstros do server e colocar essa tag aqui:
<script> <event name="critical"/> </script> coloque antes de </monster>
Minha dica: coloquem apenas no Trainer pra que o player consiga ver que ele tem o critical e quanto ele tira e deixem avisado que o sistema só vai funcionar em players.
-
Androgyno deu reputação a xWhiteWolf em Critical Skill SystemGalera, vieram me informar que em algumas versões do TFS, ele está diminuindo o dano ou mantendo o mesmo dano em players e só aumentando em monstros.. bom, eu refiz o script e agr vc pode configurar um multiplicador pra monstro e outro pra players:
local lvlcrit = 48913 function onStatsChange(cid, attacker, type, combat, value) if isPlayer(attacker) and (not (attacker == cid)) and (type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS) then if (getPlayerStorageValue(attacker, lvlcrit)*3) >= math.random (0,1000) then local multiplier = isPlayer(cid) and 3 or 1.5 -- multiplicador dano = math.ceil(value*(multiplier)) doTargetCombatHealth(attacker, cid, combat, -dano, -dano, 255) doSendAnimatedText(getCreaturePos(attacker), "CRITICAL!!", 144) return false end end return true end local multiplier = isPlayer(cid) and 3 or 1.5 isso significa que ele vai assumir 3 se for player e 1.5 se for monstro. Editem a vontade de acordo com o desejo e o server de vcs. Abraço
-
Androgyno deu reputação a Dr Slump BR em [MiniGame] Acerte o AlvoEu olhei diversos pedidos do MiniGame Ecerte o Pombo (Tiro ao Alvo), como eu tenho resolvi compartilhar com vocês vamos lá...
instalação: vai em data/lib crie um arquivo chamado Minigame Flecha.lua e cole isso dentro:
feche e salve.
agora vai em data/actions/scripts e crie um arquivo chamado Minigame Flecha.lua e cole isso dentro:
agora vai em actions.xml e adiciona essa tag:
<action actionid="4619-4624" event="script" value="Minigame Flecha.lua"/>
Pronto sistema implantado em seu servidor. agora vamos para a explicação:
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
explicação:
aqui em: if item.actionid == 4619 then é o action ID que você vai colocar na porta onde o player ira dar use para começar a jogar
aqui em: playerPos = {x = 391, y = 165, z = 7}, é a posição que o player vai quando clicar na porta
aqui em: birdPos = {x = 386, y = 165, z = 7}, é a posição que o monstro vai nascer (não precisa adiciona-lo no Map Editor)
aqui em: fromPos = {x = 385, y = 160, z = 7}, toPos = {x = 391, y = 169, z = 7}}) é a área em que o pombo vai andar para se esquivar do jogador.
veja as imagens como exemplo:
bom é isso, duvidas? poste nos comentários que eu irei responder.
Testado em: OTX Server 2, Versão 8.6
créditos:
Igor Souza Sena
Dr SLump BR
VictorSilva
-
Androgyno deu reputação a Adriano SwaTT em [NPC] Bank (Igual Tibia Global)Procurei aqui pelo forum, e não achei um NPC de Bank que fosse tão perfeito como este que estou postando...
Eu mesmo havia postado há alguns dias atrás um NPC de Bank, mas não é tão bom quanto este...
Detalhes do NPC:
Executa as funções como do Tibia Global.
Deposit, Transfer, Withdraw, Change Gold, Change Platinum, Change Crystal...
Funcionando perfeitamente...
#Testado'
Vamos ao que interessa.
Crie um arquivo chamado "bank.xml" na pasta "data / npc"... Cole o código abaixo dentro do arquivo:
<?xml version="1.0" encoding="UTF-8"?> <npc name="BankMan" script="data/npc/scripts/bank.lua" walkinterval="25" floorchange="0" access="5" > <health now="150" max="150"/> <look type="132" head="115" body="0" legs="114" feet="0" addons="3" corpse="2212"/> <parameters> <parameter key="message_greet" value="Welcome |PLAYERNAME|! Here, you can {deposit}, {withdraw} or {transfer} your money from your bank account. I can change your coins too."/> <parameter key="message_alreadyfocused" value="You are drunked ? I talk with you."/> <parameter key="message_farewell" value="Goodbye. I wanna see your money... oh you again."/> </parameters> </npc> Salve e feche o arquivo.
Agora vá na pasta Scripts e crie um arquivo chamado "bank.lua" e cole o código abaixo dentro do mesmo:
local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid --------------------MESSAGES------------------------------------------------------------------------------ if msgcontains(msg, 'deposit') then selfSay('Please tell me how much gold it is you would like to deposit.', cid) talkState[talkUser] = 1 elseif msgcontains(msg, 'withdraw') then selfSay('Please tell me how much gold you would like to withdraw.', cid) talkState[talkUser] = 3 elseif msgcontains(msg, 'transfer') then selfSay('Please tell me the amount of gold coins you would like to transfer.', cid) talkState[talkUser] = 5 elseif msgcontains(msg, 'change gold') then selfSay('How many platinum coins do you want to get?', cid) talkState[talkUser] = 8 elseif msgcontains(msg, 'change platinum') then selfSay('Do you want to change your platinum coins to gold or crystal?', cid) talkState[talkUser] = 10 elseif msgcontains(msg, 'change crystal') then selfSay('How many crystal coins do you want to change to platinum?', cid) talkState[talkUser] = 15 elseif msgcontains(msg, 'balance') then n = getPlayerBalance(cid) selfSay('Your balance are '..n..' golds.', cid) talkState[talkUser] = 0 ----------------------DEPOSIT------------------------------------------------------- elseif talkState[talkUser] == 1 then if msgcontains(msg, 'all') then n = getPlayerMoney(cid) selfSay('Do you want deposit '..n..' golds ?', cid) talkState[talkUser] = 2 else n = getNumber(msg) selfSay('Do you want deposit '..n..' golds ?', cid) talkState[talkUser] = 2 end elseif talkState[talkUser] == 2 then if msgcontains(msg, 'yes') then if getPlayerMoney(cid) >= n then doPlayerDepositMoney(cid,n) selfSay('Sucessfull. Now your balance account is ' ..getPlayerBalance(cid)..' golds.', cid) talkState[talkUser] = 0 else selfSay('You don\'t have money.', cid) end else selfSay('Ok then', cid) end ----------------------WITHDRAW------------------------------------------------------------------------------------- elseif talkState[talkUser] == 3 then if msgcontains(msg, 'all') then n = getPlayerBalance(cid) selfSay('Do you want withdraw '..n..' golds ?', cid) talkState[talkUser] = 4 else n = getNumber(msg) selfSay('Do you want withdraw '..n..' golds ?', cid) talkState[talkUser] = 4 end elseif talkState[talkUser] == 4 then if msgcontains(msg, 'yes') then if getPlayerBalance(cid) >= n then doPlayerWithdrawMoney(cid, n) selfSay('Here you are, '..n..' gold. Now your balance account is ' ..getPlayerBalance(cid)..' golds.', cid) talkState[talkUser] = 0 else selfSay('There is not enough gold on your account', cid) end else selfSay('Ok then', cid) end ----------------------TRANSFER---------------------------------------------------------------------------------------- elseif talkState[talkUser] == 5 then if msgcontains(msg, 'all') then n = getPlayerBalance(cid) selfSay('Who would you like transfer '..n..' gold to?', cid) talkState[talkUser] = 6 else n = getNumber(msg) selfSay('Who would you like transfer '..n..' gold to?', cid) talkState[talkUser] = 6 end elseif talkState[talkUser] == 6 then p = msg selfSay('So you would like to transfer '..n..' gold to '..p..'?', cid) talkState[talkUser] = 7 elseif talkState[talkUser] == 7 then if msgcontains(msg, 'yes') then if getPlayerBalance(cid) >= n then if doPlayerTransferMoneyTo(cid, p, n) == TRUE then selfSay('You have transferred '..n..' gold to '..p..' and your account balance is '..getPlayerBalance(cid)..' golds.', cid) talkState[talkUser] = 0 else selfSay('This player does not exist. Please tell me a valid name!', cid) talkState[talkUser] = 0 end else selfSay('There is not enough gold on your account', cid) talkState[talkUser] = 0 end else selfSay('Ok then', cid) talkState[talkUser] = 0 end ----------------------CHANGE GOLD--------------------------------------------------------------------------------- elseif talkState[talkUser] == 8 then n = getNumber(msg) b = n * 100 selfSay('So I should change '..b..' of your gold coins to '..n..' platinum coins for you?', cid) talkState[talkUser] = 9 elseif talkState[talkUser] == 9 then if msgcontains(msg, 'yes') then if doPlayerRemoveItem(cid, 2148, b) == TRUE then doPlayerAddItem(cid, 2152, n) talkState[talkUser] = 0 else selfSay('You don\'t have money.', cid) talkState[talkUser] = 0 end else selfSay('Ok. We cancel.', cid) talkState[talkUser] = 0 end ---------------------CHANGE PLATINUM------------------------------------------------------------------------- elseif talkState[talkUser] == 10 then if msgcontains(msg, 'gold') then selfSay('How many platinum coins do you want to change to gold?', cid) talkState[talkUser] = 11 elseif msgcontains(msg, 'crystal') then selfSay('How many crystal coins do you want to get?', cid) talkState[talkUser] = 13 end elseif talkState[talkUser] == 11 then n = getNumber(msg) b = n * 100 selfSay('So I should change '..n..' of your platinum coins to '..b..' gold coins for you?', cid) talkState[talkUser] = 12 elseif talkState[talkUser] == 12 then if msgcontains(msg, 'yes') then if doPlayerRemoveItem(cid, 2152, n) == TRUE then doPlayerAddItem(cid, 2148, b) talkState[talkUser] = 0 else selfSay('You don\'t have money.', cid) talkState[talkUser] = 0 end else selfSay('Ok. We cancel.', cid) talkState[talkUser] = 0 end elseif talkState[talkUser] == 13 then n = getNumber(msg) b = n * 100 selfSay('So I should change '..b..' of your platinum coins to '..n..' crystal coins for you?', cid) talkState[talkUser] = 14 elseif talkState[talkUser] == 14 then if msgcontains(msg, 'yes') then if doPlayerRemoveItem(cid, 2152, b) == TRUE then doPlayerAddItem(cid, 2160, n) talkState[talkUser] = 0 else selfSay('You don\'t have money.', cid) talkState[talkUser] = 0 end else selfSay('Ok. We cancel.', cid) talkState[talkUser] = 0 end ---------------------CHANGE CRYSTAL------------------------------------------------------------------------------- elseif talkState[talkUser] == 15 then n = getNumber(msg) b = n * 100 selfSay('So I should change '..n..' of your crystal coins to '..b..' platinum coins for you?', cid) talkState[talkUser] = 16 elseif talkState[talkUser] == 16 then if msgcontains(msg, 'yes') then if doPlayerRemoveItem(cid, 2160, n) == TRUE then doPlayerAddItem(cid, 2152, b) talkState[talkUser] = 0 else selfSay('You don\'t have money.', cid) talkState[talkUser] = 0 end else selfSay('Ok. We cancel.', cid) talkState[talkUser] = 0 end end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) -- function maded by Gesior-- function getNumber(txt) --return number if its number and is > 0, else return 0 x = string.gsub(txt,"%a","") x = tonumber(x) if x ~= nill and x > 0 then return x else return 0 end end
Salve o arquivo e feche-o.
Agora seu NPC está pronto, basta adicioná-lo ao seu mapa usando o Map Editor.
Espero que seja de utilidade de alguém...
Créditos: Tibiaa4e (outro forum)
Pequeno Tuto: Adriano Swatt
Testado em:
Versões do Client: 8.54 e 8.60.
Versões da Distro: TFS 3.4.5, TFS 0.4 e Alissow 0.4.1.
Espero que seja útil.
Abraços'
-
Androgyno deu reputação a Fir3element em [0.3.6pl1] Correção para o !disbandNão me lembro bem mas acho que esse bug foi fixado só na versão 8.62, então pode ajudar muita gente...
O comando !disband não funcionava direito, o player continuava na guild e acho que dava pra clonar items também.
Os créditos vão para o slawkens.
No arquivo ioguild.cpp, troque:
bool IOGuild::disbandGuild(uint32_t guildId) { Database* db = Database::getInstance(); DBQuery query; query << "UPDATE `players` SET `rank_id` = '' AND `guildnick` = '' WHERE `rank_id` = " << getRankIdByLevel(guildId, GUILDLEVEL_LEADER) << " OR rank_id = " << getRankIdByLevel(guildId, GUILDLEVEL_VICE) << " OR rank_id = " << getRankIdByLevel(guildId, GUILDLEVEL_MEMBER); if(!db->executeQuery(query.str())) return false; for(AutoList<Player>::iterator it = Player::autoList.begin(); it != Player::autoList.end(); ++it) { if(it->second->getGuildId() == guildId) it->second->leaveGuild(); } query.str(""); query << "DELETE FROM `guilds` WHERE `id` = " << guildId << " LIMIT 1"; if(!db->executeQuery(query.str())) return false; query.str(""); query << "DELETE FROM `guild_invites` WHERE `guild_id` = " << guildId; if(!db->executeQuery(query.str())) return false; query.str(""); query << "DELETE FROM `guild_ranks` WHERE `guild_id` = " << guildId; return db->executeQuery(query.str()); } Por:
bool IOGuild::disbandGuild(uint32_t guildId) { Database* db = Database::getInstance(); DBQuery query; query << "UPDATE `players` SET `rank_id` = '' AND `guildnick` = '' WHERE `rank_id` = " << getRankIdByLevel(guildId, GUILDLEVEL_LEADER) << " OR rank_id = " << getRankIdByLevel(guildId, GUILDLEVEL_VICE) << " OR rank_id = " << getRankIdByLevel(guildId, GUILDLEVEL_MEMBER); if(!db->executeQuery(query.str())) return false; InvitedToGuildsList::iterator iit; for(AutoList<Player>::iterator it = Player::autoList.begin(); it != Player::autoList.end(); ++it) { if(it->second->getGuildId() == guildId) it->second->leaveGuild(); else { iit = std::find(it->second->invitedToGuildsList.begin(), it->second->invitedToGuildsList.end(), guildId); if(iit != it->second->invitedToGuildsList.end()) it->second->invitedToGuildsList.erase(iit); } } query.str(""); query << "DELETE FROM `guilds` WHERE `id` = " << guildId << db->getUpdateLimiter(); if(!db->executeQuery(query.str())) return false; query.str(""); query << "DELETE FROM `guild_invites` WHERE `guild_id` = " << guildId; if(!db->executeQuery(query.str())) return false; query.str(""); query << "DELETE FROM `guild_ranks` WHERE `guild_id` = " << guildId; return db->executeQuery(query.str()); } -
Androgyno deu reputação a Adriano SwaTT em Sistema: Cassino Slots.Sim, ele selecionará o Item da Sorte, ou seja, um desses aí... e se cair repetido 3x o item selecionado, ele ganha o item + uma recompensa básica configurada no começo do script.
Lembre-se que são 10 itens, então de 1 à 10 que colocam ids.
-
Androgyno deu reputação a Adriano SwaTT em Sistema: Cassino Slots.Boa noite.
Abaixo, segue o script conforme combinado.
Testado e funcionando perfeitamente.
Boa sorte.
-
Androgyno deu reputação a Adriano SwaTT em Sistema: Cassino Slots.No caso, ganha o item que escolher se ele se repetir por 3x, certo?
Vou precisar sair e na volta edito pra você.
Abraços.
-
Androgyno deu reputação a Adriano SwaTT em Sistema: Cassino Slots.Primeiramente obrigado pelo elogio no comentário.
Sim, da pra adaptar também de ser teleportado ao usar a máquina.
No caso, poderia por para ganhar um ticket que use para jogar, assim players não abusariam da máquina.
Obrigado e valeu por comentar.
Muito obrigado Daniel.
Que bom que gostou.
Façam bom proveito.
-
Androgyno deu reputação a Adriano SwaTT em Sistema: Cassino Slots.Cada vez que o player jogar ele paga a taxa, não há outras chances.
Sobre ganhar brinde por acertar 1 ou 2 itens, basta desativar no script.
Use este:
Boa sorte. -
Androgyno deu reputação a Adriano SwaTT em ResidenTibia' [ShowOFF]Abaixo irei postando as imagens e conforme for atualizando o post adicionarei juntamente com o item postado a sua data de publicação.
Vamos lá pessoal, este projeto não é tão novo, mas como estou desenvolvendo sozinho, e também devido a várias pausas...estou voltando ao mesmo.
Projeto que estava sendo postado em outro forum, com as seguintes informações (visualizado por 521 usuários e com 185 postagens)
Não sei se aqui tem limite de imagem no poste, caso não tenho, vou atualizando e adicionando as imagens com suas respectivas datas para vocês poderem acompanhar direitinho.
(Texto acima editado por ser muito antigo)
Vale lembrar que o Projeto já está bem a frente de como estão as imagens aqui.
Enfim...
Essa é a "Capa" provisória do Launcher. (postado em 29/10/2012 às 01:05)
Sistema de Banco da Cidade Improvisada. (postado em 27/10/2012 às 11:00)
3 Novos Pisos. (postado em 30/10/2012 às 23:00)
Área da Ducha. (postado em 30/10/2012 às 23:40)
Tipos de Inventários, Propriedades & Informações. (última postagem em 30/10/2012 às 22:50)
Alguns Itens de Ataque. (postado em 31/01/2013 às 13:05)
Glock: Evoluções & Informações. (postado em 31/01/2013 às 13:05)
Ervas, Combinações e Informações. (postado em 05/11/2012 às 13:00)
Umbrella Corporation Bank (Obs: 92% concluído). (Imagem postada em 22/02/2013 às 22:15)
Obs: Os monitores são animados.
Obs: Terá uma sinalização horizontal para saberem onde será a fila para o NPC.
Obs: Como citei na própria imagem, são 5 NPC's Recepcionistas, não coloquei todos pra foto não ficar muito grande.
(Imagem postada em 06/01/2013 às 20:27)
(Imagem postada em 22/02/2013 às 22:15)
Obs: Nos sinais verticais verdes ficarão a fila de players, já no vermelho, o player será teleportado seguindo o sentido das setas, até a saída.
Obs: O player que estiver falando com o NPC, ficará livre do problema de ser empurrado, pois o próximo player ficará um SQM de distancia, até um nível de realismo "por razões de segurança".
Obs: Os pisos que não tem sinais verticais, não serão tiles comuns, sendo assim, players não passearão nos mesmos.
A sala da Gerente da Umbrella Bank. (Para players sem Debit Card)
(Imagem postada em 11/01/2013 às 10:52)
(Imagem postada em 22/02/2013 às 22:15)
Obs: O monitor também é animado.
Obs¹: Para entrar nesta Sala, precisará falar com um dos Recepcionistas sobre adquirir um Debit Card, então receberá um formulário que precisará ser entregue ao Gerente para continuar com as missões de aquisição.
Obs²: A sala ainda será enfeitada, só fiz ainda a parte "crítica" e "bruta" e breve estarei fazendo os detalhes.
Alguns zombies adicionados. (Imagem postada em 29/01/2013 às 20:45)
Alguns Carros Destruídos & Zombies adicionados. (Imagem postada em 30/01/2013 às 10:35)
Sistema de Save Individual (Obs: 100% concluído). (Imagem postada em 27/02/2013 às 04:10)
Área de Vídeo Show OFF'
ShowOFF 01 [Full HD 1080p] adicionado em 21/01/2013 às 8:30AM
Galera, conforme prometido está aí uma pequenina base do Projeto, o vídeo ficou muito pior do que esperava, mas breve faço outro melhor pois ainda estava praticamente testando os programas, formatos e codec's.
Sistema de Banho adicionado em 21/11/2013 às 12:05PM
ShowOFF 02 [Full HD 1080p] adicionado em 25/11/2013 às 02:20AM
Neste vídeo verás:
ShowOFF 02 - pt 2 [Full HD 1080p] adicionado em 01/12/2013 às 08:11AM ATUALIZADO
Neste vídeo verás:
ShowOFF 02 - pt 3 [Full HD 1080p] adicionado em 01/12/2013 às 13:45PM ATUALIZADO
Neste vídeo verás:
Desde já agradeço a todos.
Atenciosamente,
Adriano Swatt'
-
Androgyno deu reputação a xWhiteWolf em Magma Boots absorvendo danoEae galera do TK, vim trazer pra vocês um script do Fox World que já me pediram no suporte um monte de vezes, é a magma boots absorvendo metade do dano e podendo ser usado a cada 2 minutos.
Pra quem não entendeu tenta acompanhar aqui nas screenshots:
Nesse caso o player iria tomar 1124 de dano, mas ele tomou só 562 e a bota absorveu a outra metade do dano!
Bom, vamos ao script:
em actions.xml adicione:
<action itemid="7891" script="magmaboots.lua"/> agora em actions\scripts\magmaboots.lua adicione:
local config = { storagetempo = 19500, -- storage que contará os segundos storageskill = 19501, -- storage que vai dizer se a skill está ativada ou desativada itemid = 7891, -- id da boots itemplace = 8, -- feet tempo = 2*60 -- tempo em segundo (2 minutos) } function onUse(cid, item, frompos, item2, topos) if getPlayerStorageValue(cid, config.storageskill) <= 0 and (getPlayerSlotItem(cid, config.itemplace).itemid == config.itemid) then if getPlayerStorageValue(cid, config.storagetempo) - os.time() <= 0 then timenow = os.time() + config.tempo setPlayerStorageValue(cid, config.storagetempo, timenow) setPlayerStorageValue(cid, config.storageskill, 1) doPlayerSendTextMessage(cid, 23, "You activated your "..getItemNameById(config.itemid)..", it's ready to absorb damages!") for j= 0,(config.tempo -1) do addEvent(function() if isPlayer(cid) then doPlayerSendCancel(cid, "Time until next use: ".. config.tempo - j .." second(s)") end end, (50+(j*1000))) end else doPlayerSendTextMessage(cid, 23, "You have to wait ".. getPlayerStorageValue(cid, config.storagetempo) - os.time() .." second(s) until you can use it again!") end else doPlayerSendTextMessage(cid, 23, "Your "..getItemNameById(config.itemid).." is already active or it isn't equiped.") end return true end em creaturescripts.xml adicione essa linha:
<event type="statschange" name="magmaboots" event="script" value="magmaboots.lua"/> agora crie o script magmaboots.lua em creaturescripts\scripts e adicione o seguinte nele:
local config = { percent = 0.5, --- porcentagem do dano que irá levar (0.5 = 50%) storageskill = 19501, -- storage da skill itemplace = 8, -- lugar q ela deve estar (8 é o feet) itemid = 7891, -- id do item damagemin = 100 --- minimo de dano que deve ser pro player absorver } function onStatsChange(cid, attacker, type, combat, value) if type == STATSCHANGE_HEALTHLOSS and isCreature(attacker) and value >= config.damagemin then if getPlayerSlotItem(cid, config.itemplace).itemid == config.itemid then if getPlayerStorageValue(cid, config.storageskill) >= 1 then value = math.ceil(value*(config.percent)) setPlayerStorageValue(cid, config.storageskill, getPlayerStorageValue(cid, config.storageskill)-1) doTargetCombatHealth(attacker, cid, combat, -value, -value, 255) doPlayerSendTextMessage(cid, 23, "Your "..getItemNameById(config.itemid).." absorved "..value.." of damage.") return false end end end return true end feito isso você só vai ter que ir no login.lua que fica em creaturescripts\scripts e adicionar essas linhas antes do ultimo return true: ----------MAGMA BOOTS DO FOX---------------- registerCreatureEvent(cid, "magmaboots") if getPlayerStorageValue(cid, 19501) ~= 0 then setPlayerStorageValue(cid, 19501, 0) end --------------------------------------- Não tem muito oque configurar, no actions você pode editar isso daqui:
e em creaturescripts vc pode editar isso daqui:
Se vc ativar ela e deslogar, vc vai precisar ativar de novo quando logar.
Testei em 8.54 então se não funcionar no seu server 12.0 nao é problema meu, procura as funções que mudaram e faça as alterações necessárias.
Não me peça pra adaptar o script pra 7.51, eu não sou programmer e não sei fazer isso.
Bom é isso, qualquer coisa manda nos comentários que eu tento ajudar ou explicar melhor. Abraço pra vocês
-
Androgyno deu reputação a xWhiteWolf em New Library v. 1.2Fala galera, hoje vim trazer pra vocês uma nova biblioteca de funções que eu venho desenvolvendo, pretendo ir atualizando esse tópico constantemente sempre adicionando funções novas e explicando a utilização delas. Algumas funções que eu coloquei aqui estão presentes na OTAL também, porém algumas eu fiz pequenas correções de forma que essa lib poderia facilmente substituir a OTAL sem grandes problemas (pelo menos se você utilizava apenas as funções básicas da otal)
Todas as funções que não tem -- nome do autor do lado dela foram feitas por mim, xWhiteWolf ou Night Wolf (NW). O restante delas são créditos dos devidos autores, apenas coloquei pois considero funções vitais no server de cada um. Crie um arquivo em data/lib chamado 075 - White Wolf Functions.lua e coloque o seguinte código dentro:
Agora eu vou explicar oque cada função faz porque de nada adianta lançar uma lib e não explicar oque ela faz não é mesmo? hahaha
Obs inicial: quando uma função tiver em seus parametros um [] significa que oque está dentro do colchetes não é um parâmetro obrigatório.
Como usar: doShowTimeByPos(cid, getCreaturePosition(cid), 20, 20)
Irá fazer uma contagem regressiva na posição que o player se encontra começando de 20 e mandando a mensagem na mesma cor da fala dos monstros.
Essa função é bem útil em actions/spells para fazer contagem de tempo em runas como a magic wall e ver quanto tempo falta pra magic wall sumir)
Obs: Espero que ajude bastante pessoas a entender sobre funções, eu utilizei cid como o principal uid das funções nos exemplos mas você pode muito bem utilizar outros uids, fica a critério seu.
Qualquer dúvida comentem abaixo que eu vou tentar ajudar da melhor maneira.
Ahhh, isso daí foi testado em 8.54 mas deve funcionar em quase todas as versões que tenham as funções básicas do TFS.
EDIT: Pessoal, agora é sério, essa lib tem fácil umas 600 linhas, das quais umas 500 eu devo ter codado sozinho (na mão, linha por linha). Eu tive todo o trabalho de testar cada uma delas e oque eu peço é o mínimo de gratidão e respeito. Se eu te ajudei clique em Gostei, se você tiver alguma dúvida eu to me colocando a disposição de responder qualquer coisa relacionada ao tópico, mesmo que você não saiba nem oque é uma lib apenas venha aqui e escreva sua dúvida.
EDIT 2: Duas novas funções adicionas, espero que gostem!
EDIT 3: Três novas funções adicionadas juntamente com suas respectivas explicações.
-
Androgyno deu reputação a xWhiteWolf em Energy Strike++Eai galera, sei que ando meio ausente mas hoje vim trazer um script que fiz pra um amigo via skype, fiz em uns 15 minutos e gostei de como ficou então vim compartilhar com vcs.
Trata-se de um exori vis com chance de errar o alvo e acertar os sqms em volta dele com uma % definida.
<instant name="Energy Strike" words="exori vis2" lvl="12" mana="20" prem="1" range="4" needtarget="1" blockwalls="1" exhaustion="1000" needlearn="0" event="script" value="especiais/exoriviscomerro.lua"> <vocation id="1"/> <vocation id="2"/> <vocation id="5"/> <vocation id="6"/> </instant> Ela só vai funcionar com target mas assim dá pra vc usar a criatividade e fazer uma spell mais forte que o normal só que com chance de errar e atacar uma pessoa/monstro do lado, até porque os magos não tem nada no tibia que faça eles errarem dano e essa é uma das magias iniciais então faz sentido que ele não acerte o golpe sempre.
Espero que gostem e usem o código como fonte de estudo pra criar outras magias fodas haha, abraços do lobo
Obs: uma edição que seria legal vcs fazerem seria a chance de errar ser proporcional ao ml e "experiencia" (vulgo level).
Aqui tem uma pequena imagem de eu usando a spell e errando o target.
-
Androgyno deu reputação a Adriano SwaTT em Sistema: Cassino Slots.Boa noite galera,
após um pedido aqui no fórum sobre um sistema de Cassino, decidi então criar este e disponibilizar para vocês.
Introdução:
Bom, este script simula a máquina de Cassino conhecida como Cassino Slots, pra quem não conhece é a máquina que se encontra no spoiler abaixo:
Como funciona?
O jogador precisa escolher 1 (um) dos 10 (dez) itens disponíveis (da para configurar a quantidade de itens) como seu Item da Sorte, e após feito isso, terá que girar a alavanca e torcer para que a máquina sorteie 3 itens repetidos igual ao que o jogador em questão escolheu.
Para tornar um pouco mais fácil de vencer, criei para que a máquina dê pequenos brindes à quem acertar 1 ou 2 itens dos sorteados (configurável).
Como jogar?
Para jogar é simples, como desenvolvi todo script em apenas um arquivo, para facilitar na criação, na instalação e até mesmo na jogabilidade, o jogo se baseia na posição em que o jogador está para identificar qual ação executar.
Selecionar Item da Sorte: com seu personagem virado para baixo (sul), clique na alavanca e automaticamente o item da sorte aparecerá na mesa configurada no script, caso queira outro item, basta ir usando a alavanca até encontrar o item desejado.
Como Jogar: Após ter selecionado seu item da sorte, que deve estar à mostra em cima da mesa própria, basta virar seu personagem para cima (norte) e clicar novamente na alavanca.
E se virar esquerda ou direita?: Nada acontecerá, apenas uma mensagem ensinando como jogar será enviada para que o jogador se oriente.
Dicas de instalação!
Sugiro que quando for criar o mapa para o evento, não faça como do vídeo, pois os itens criados nas mesas não estão com atributos para que não possam ser movidos, sendo assim é provável que jogadores de má fé venham a roubar itens... Faça como a imagem abaixo:
Instalando:
Basta criar um arquivo na pasta “data/actions/scripts” chamado “cassino_slots.lua” e adicionar o código abaixo dentro:
Agora em “actions.xml” adicione a tag abaixo:
Agora basta configurar de acordo com as informações disponíveis no início do script.
Vejam o vídeo demonstrativo do Sistema em funcionamento.
Criado por: Adriano Swatt'
-
Androgyno deu reputação a Lyu em [Dodge System] Versão com Amuleto & Elementos de Defesa.'Dodge System 2015' versão com AMULETO & ELEMENTOS DE DEFESA. Testado em OTX Server 8.60 & TFS 0.4 dev 3884. Antes de começar, quero avisar às pessoas que estão sem tempo ou com preguiça de ler o tópico inteiro, que eu upei um zip do sistema inteiro. então é só baixar e instalar ai. Download SCAN Continuando Tópico.. Cada ponto de Dodge equivale a x% de chance de desviar de um ataque, e ao mesmo tempo, enviar um elemento compatível com o nível de dodge do jogador. Sobre o desvio, quase todo mundo já conhece, mas e esse tal elemento? Ao desviar do ataque, automaticamente o amuleto contra-ataca com um ataque de distância; sua fonte de energia é o fist fighting, quanto mais alto for o skill, mais alto será o dano; Cada amuleto possui seu próprio elemento e ele será a chave para o funcionamento do dodge, ou seja, sem AMULET, sem Dodge. 1º - Procure a pasta Lib na sua datapack, crie um arquivo 151-dodgesystem.lua e dentro adicione isso :
2º- abra o arquivo actions.xml e adicione isso : <action itemid="12411" event="script" value="dodge.lua"/> 3º- entre na pasta scripts em actions, crie um arquivo .lua chamado dodge e adicione isso :
4º- abra o arquivo creaturescripts.xml e adicione isso : <event type="statschange" name="DodgeSystem" event="script" value="dodge.lua"/> 5º- entre na pasta scripts em creaturescripts, crie um arquivo .lua chamado dodge e adicione isso :
6º- ainda em creaturescripts, abra o arquivo login.lua e adicione isso la no final antes do return true : registerCreatureEvent(cid, "DodgeSystem") 7º- abra o arquivo movements.xml, substitua isso : OTX :
TFS :
por isso :
8º - entre na pasta scripts em movements, crie um arquivo .lua chamado dodgeamulet e adicione isso :
9º- abra o arquivo talkactions.xml e adicione isso : <talkaction log="yes" words="!dodge;/dodge" event="script" value="dodge.lua"/> 10º- entre na pasta scripts em talkactions, crie um arquivo .lua chamado dodge e adicione isso :
no arquivo lib.. DODGE_PERCENT é os porcentos que o jogador ganhará por cada ponto adquirido; DODGE_MAX é o máximo de dodge; DODGE_PRICE é o preço de cada pedra; DODGE_ITEMID é o ID da pedra de dodge; DODGE_COMMAND_REMOVE é um comando para remover 1 ponto de dodge e receber 75% do dinheiro que você pagou pela pedra. true = comando disponível, false = comando inexistente; DODGE_ONLY_PREMIUM é para jogadores com premium, true = o dodge só funcionará com premium, false = qualquer um poderá usar; DODGE_TEXT é o texto que aparecerá quando o player desviar de um ataque; DODGE_TEXTCOLOR é a cor do texto; DODGE_FISTMULTIPLIER é para multiplicar o fist fighting do jogador pelo multiplier configurado. true = multiplica, false = os multipliers serão sempre os mesmos valores; type é o tipo de elemento; min é o hit mínimo; max é o hit máximo; mana é a quantidade de mana que precisa para contra-atacar com o elemento. se não tiver mana, só vai desviar; shoot é o efeito de distância. ID dos amulets : terra amulet : 7887 glacier amulet : 7888 lightning pendant : 7889 magma amulet : 7890 comandos : !dodge; !dodge buy; !dodge remove. caso você queira que o amulet mude de elemento ao dar use(estilo exp alta), abra o items.xml e substitua isso :
por isso :
um exemplo do DODGE_FISTMULTIPLIER : se estiver true, o jogador estiver com o 'magma amulet' e tiver 100 fist fighting, ele terá a chance de acertar um hit entre 400-1000 de dano; se estiver false, ele só vai hitar entre 4-9 de dano, ai você vai ter que editar pra deixar mais alto, só que será o padrão; algumas imagens :
Então pessoal, espero que tenham gostado da minha versão. Eu fiz ela do zero, peguei só a ideia do Dodge System que vi em alguns Ots e mandei bala acrescentando esses elementos com amuleto. créditos : Halls Santos & o criador do Dodge System, infelizmente não sei o nome dele. comentem ai que eu edito depois. -
Androgyno deu reputação a xWhiteWolf em Fogos de artificio.Eae galera, tirei uma meia horinha aqui pra fazer um script temático para o ano novo, sei que muita gente não vai estar jogando durante o ano novo mas para os que vão estar vai ser bem inesquecível haha.
Como o título já sugere, trata-se de uma chuva de fogos pra receber calorosamente o ano de 2015!.
a instalação é bem tranquila, o script só precisa da função isWalkable (é a primeira da new lib), se vc tiver problemas com a newlib apenas copie a primeira função e cole antes de todas as outras nesse script aqui que vai funcionar sem problema (ou se preferir remova todo lugar que tiver "if isWalkable..... then" e o "end").
Eis o script:
<talkaction log="yes" words="!fogos" acess="5" event="script" value="fogos.lua"/> PS: é uma talkaction.
O script tem uma lógica matemática bem bonita, ele pode parecer simples mas não é, então, se vc não sabe oque tá fazendo, não mexa em nada (só a parte de config com os comentários haha). Agora vc deve estar pensando: mas pqp, isso é uma talkaction, eu não vou poder estar on no server pra ativar ela qnd der meia noite.. bem, então é só trocar duas linhas do script (o callback function onSay(cid, words, param, channel) e a tag no xml e transformar num global events com horário definido). Façam oque quiserem aí, abraços do lobo
Vídeo :
ViitinG seu lindo, obrigado por postar o vídeo para mim!
-
Androgyno deu reputação a MaxSilver em Defense System - "Dodge"impressão minha ou essa tag está errada? me desculpe se eu tiver errado!
<action itemid="12659" script="linktec/cast.lua"/> /\
não seria? assim:
\/
<action itemid="12659" script="defense.lua"/> -
Androgyno deu reputação a Natanael Beckman em Montando OTserver em Debian perfeito.Downloads necessarios:
PuTTY
WINSCP
SOURCE OTX ATUALIZADA
Essa REV eu recomendo você baixar no seu computador, extrair e enviar por ftp para a pasta home.
Acessando PuTTY veja os passos a seguir:
(Comandos para copiar e colar no shell [Copia: ctrl+insert] [Colar: shift+insert]).
Para visualizar ou enviar sua source por ftp vamos usar o WinSCP acesse ele:
Certo!
Enviou a pasta do OTserver para a pasta home? renomeie ela com o f2 para o nome otserver. Feito? Vamos inciar:
Sempre espere terminar por completo o processamento de instalação após executa o comando:
apt-get update Se aparecer algo bla bla (Y or N?) digita Y e da enter.
cd /home/otserver Instalando as libs e boots:
apt-get install libboost-all-dev libgmp3-dev liblua5.1-0 liblua5.1-0-dev liblua50 liblua50-dev liblualib50 liblualib50-dev lua50 lua5.1 libsqlite0-dev libsqlite3-dev sqlite3 libmysql++-dev libmysqlclient-dev mysql-common libxml2-dev libxml++2.6-dev cpp gcc g++ make automake autoconf pkg-config subversion liblua5.1-sql-mysql-dev liblua5.1-sql-sqlite3-dev zlib1g-dev zlib1g libcrypto++-dev libcrypto++9 Após instalação finalizada vamos para o próximo passo...
Compilando o server:
sh ./autogen.sh && ./configure --enable-server-diag --enable-mysql --enable-root-permission && make -j 2 Bom dando tudo correto via ftp use ctrl+r(atualizar) verifique dentro da pasta do seu OTServer terá um arquivo chamado theforgottenserver se tiver ele la OK meus parabéns você compilou em Linux, vamos para os próximos passos.
Jajá vamos abri o server mais antes temos que configurar o config.lua, database, o server. Com a mesma source eu sempre compilo no windows faço tudo em meu computador, faço todos os teste e após está tudo OK eu envio por ftp para minha maquina e faço as atualizações.
Normalmente quando você for abrir o server no linux pode da error de sensitive, é quando Arquivo tem nomes com as letras em tamanhos diferenciado tipo A a, exemplo:
O servidor no linux procura por um arquivo chamado Record se na pasta script tiver o arquivo com o nome dessa forma record o R minusculo o Linux não vai encontrar os nomes tem que ser iguais o que tiver em maiúsculo fica em maiúsculo e minusculo fica em minusculo.
A database eu faço da mesma forma do server primeiro configuro no computador exporto e depois envio o arquivo .sql via ftp para maquina la boto o arquivo na pasta home e eu upo via comandos no shell para a database do Linux.
Vamos instalar a parte de WEB:
Lembre-se nas instalações sempre da Y quando pergunta Y or N e se aparecer algo como selecionar opções sempre selecione a primeira... Estou ensinando de uma forma que não seria a correta mais da certo!
Via Shell SSH:
apt-get install apache2 apt-get install php5 libapache2-mod-php5 apt-get install php5-mysql php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl apt-get install php5-xcache apt-get install sendmail Olha o mysql tem um momento que pede pra você inserir uma senha, aconselho bota uma senha que você conheça.
apt-get install mysql-server mysql-client No phpmyadmin ele pede a senha também, bote a mesma do mysql pra não da error:
apt-get install phpmyadmin cp -r /usr/share/phpmyadmin/ /var/www/phpmyadmin/ service apache2 restart apt-get install libapache2-modsecurity service apache2 restart Pronto verifique se está tudo correto, http://ip.da.maquina/phpmyadmin acesse seu phpmyadmin usando user: root e a senha é a que você botou na instalação do mysql, crie o seu banco de dados e vamos já upa a database....
Via ftp na pasta var/www/ renomeie usando o f2 o nome da pasta phpmyadmin para outro nome, qualquer um, eu particularmente sempre boto outros nomes, não deixo phpmyadmin, exemplo, 65fs98a97ds56aq.
Upando a database, usando o shell vamos para a pasta onde se encontra o seu banco de dados, que enviamos via ftp, no caso, a pasta home:
cd /home psenha Ae você bota a senha do seu mysql se você não sabe entre em contato com quem você alugou seu dedicado.
mysql -u root -psenha No comando abaixo você bota o nome da sua database que criamos agora pouco na web.
USE seubancodedados Aqui você bota o nome do arquivo.sql que enviamos por ftp:
source arquivo.sql Só esperar finalizar após concluir ok, database upada pode conferir pelo seu navegador de internet como todas as tabelas estarão la do jeito que você configurou no windows.
Galera ai o resto vocês já sabem sobre o config.lua,dados da database, senha, ip, rates, feito isso vamos pro site.
Via ftp acesse sua pasta htdocs selecione todos os arquivos dentro dela e mande para a pasta var/www, quando concluir apenas altere o a seguinte arquivo, config.ini, em server path, altere, no caso ali o nome da pasta do meu OT é otserver:
install = "no" server_path = "/home/otserver/" signatures = "0" Se tiver feito até agora tudo certo, o seu site vai estar funcionando perfeitamente.
Go go go!
Você já testou o server em sua casa, configurou a pasta data utilizando a mesma REV, pronto enviar a pasta via ftp substituindo a pasta que existe la. Feito isso vamos para o shell acesse a pasta do ot:
cd /home/otserver ./theforgottenserver Se aparecer algo bla bla (Y or N?) digita Y e da enter.
Ai vai abri normalmente aparece carregando o server se der algum erro vai dizer pra quem sabe ler vai ser moleza!
Abriu o server entrou com seu god testou tudo ok, feche o server, ctrl+c, agora vamos abrir o server oficial pra não cair e poder fechar o shell sem cair o ot.
Vamos nós, no shell volte para o root usando:
Até voltar ao root:
cd / Vamos adicionar um usuario:
adduser tfs No caso ai o nome do usuário que estou adicionando é tfs, pode ser otserver, seu nome, você escolhe, quando você executa o comando vai pedi uma senha bote mesma da sua maquina da enter vai pedi seu nome pais e talz bota nada não só da enter ate finalizar o processo feito isso, OK.
Agora baixe esse arquivo em seu computador extraia ele e envia por ftp para a pasta home/otserver:
TFS.SH
cd /home/otserver chmod 777 -R tfs.sh Feito né? Ok agora vamos abrir o OT pra ele não fechar e quando ele cair por algum erro ele volta sozinho. Em root utilizando o shell execute os comandos:
Isso indica que você esta utilizando o usuario tfs:
su tfs cd /home/otserver ./theforgottenserver.sh& Ai ele começa a carrega normal e pronto THE END.
Caso queria fechar o server:
su tfs cd /home/otserver ps x Vai aparece uma lista de coisas abertas e cada uma com o numero do processo:
Pra fechar o server vai ter que mata dois processo, o bash e o tfs, ambos com interrogação do lado veja que tem dois bash killa somente o com a interrogação(?).
Sempre primeiro o bash:
kill -9 21748 Depois o server:
kill -9 21750 Pronto.
Recomendo para a proteção do seu site:
Prevent DOS attacks on apache webserver for DEBIAN linux with mod_evasive
-
Androgyno deu reputação a MaXwEllDeN em Spell Info ao avançar o levelBem, pessoal. O script foi criado a partir do pedido do membro loreal:
Sem mais delongas, para instalar é simples:
Crie o arquivo creaturescripts/scripts/advancespells.lua e adicione o seguinte conteúdo:
function onAdvance(cid, skill, oldLevel, newLevel) if skill == SKILL__LEVEL then local spells = {} for index = 0, getPlayerInstantSpellCount(cid) - 1 do local spell = getPlayerInstantSpellInfo(cid, index) if spell.level > oldLevel and spell.level <= newLevel then table.insert(spells, " [".. spell.name .."] \"".. spell.words .. "\" Mana[".. spell.mana .."]") end end if #spells > 0 then doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, "You have just advanced to level ".. newLevel .." and learned new spells!") for _, v in pairs(spells) do doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, v) end end end return true end No arquivo creaturescripts/creaturescripts.xml adicione a tag:
<event type="advance" name="AdvLevelSpells" event="script" value="advancespells.lua" /> No seu arquivo creaturescripts/scritps/login.lua adicione a seguinte linha ANTES DO ÚLTIMO return true:
registerCreatureEvent(cid, "AdvLevelSpells") Exemplo:
registerCreatureEvent(cid, "AdvLevelSpells") return true end