Bom dia, Boa tarde e Boa noite. Não sei que horario você está lendo isto, mas agradeço pela atenção. Quando aceitei participar desse projeto esperava ter mais tempo para me dedicar, porém esses dias trabalho,vida pessoal me atrapalho muito um pouco.
Fiquei pensando algo interressante para falar nessa primeira parte, meu tema é esse ao lado... Scripts!
É uma área grande e que aborda muito temas. Pensei que tal no começo...
Bem o tema é LUA, a maioria dos scripters são freelancers, começam apenas para editar algo, fazer alguma coisa legal e normalmente besta.
Primeira coisa que pensa a pessoa escutando que você programa em LUA
Para quem ainda não sabe LUA é Brasileira e Carioca (talvez seu unico defeito), foi feita na PUC-Rio por Roberto Ierusalimschy, Luiz Henrique de Figueiredo e Waldemar Celes eles eram da TECGRAF (Tecnologia em Computação Gráfica) e criaram para um projeto para a Petrobras.
Primeira Ultima coisa que um paulista deseja ao RJ.
A principal caracteristica dele é que ele é leve e flexivel, podendo adaptar-se com varias outras linguagens, como nosso caso XML e C++. Bem metade dos scripters não sabe disso, 2/3 não querem saber, restando 1/3 que são os scripters que se interressam e tem uma chance maior de futuro nessa área.
Claro que LUA não é a maior linguagem de programação e sem dúvida não irá dar um emprego para você, até porque ela é mais usada em projetos de jogos, como Ragnarok e Warcraft. Até alguns aparelhos como microondas utilizam essa linguagem quando são simples, quando se tornam mais complexos
já é utilizado o bom e velho C ou JAVA.
Outra coisa é que o LUA é a linguagem de script mais rapida e mais usada em jogos. Bem voltando ao nosso bom e velho tibia, hoje em dia quase tudo é editavel em LUA, praticamente abandonando o velho C++, que apesar de poderoso, é mais complexo para os novos scripters que infelizmente apesar da extrema maior versatilidade e facilidade para se fazer codigos, vemos codigos pobres e mal feitos, alguns com uso incorreto de loopings e outros recurso que tornam complexo para novatos ou até para mais experientes.
Nessa parte sugiro aos novos scripters que acompanharão essa minha coluna a sempre se preparar da melhor maneira. Para começar a ser um bom scripter recomendo certos passos:
1-Conhecimento em inglês: Obvio, sem ele você ficará perdidos nas coisas mais simples, não saberá que if significa SE e se perderá totalmente, pois as funções criadas para otserver são em inglês e sabendo você não ficará na dúvida para saber o que faz a doSendTextMessage.
2-Boas fontes: Um script que você sabe como funciona, como a Fishing Rod, te ajuda a saber o basico de um scipt, apesar da equipe TFS adorar enfiar classes e vetores aonde não prescisa (ou podiam evitar em certos casos), é facilmente compreensivel.
3-Programas auxiliares: Eu aconselho o NOTEPAD++, que depois passarei o link, pois ele exibe em cores os codigos e evita que o código fique em apenas uma linha, para quem não usa ele. Deixar o Map Editor aberto para verificar as IDS, poupa um tempo.
4-Vontade: Não adianta você querer fazer isso forçado, deve-se ter paciencia e vontade. Para quem não sabe quando está com sono, você absorve pouquissima informação de que aprende. Pois é apenas na hora de dormir que o cerebro grava as informações.
Ninguem te força a programar. Pelo menos não que eu conheça
5-Objetivo: Terminantemente é mais facil aprender quando se tem um objetivo, é bom você querer um script para fazer, de preferencia simples, normalmente quem começa a aprender, quer fazer o script gigante que nenhum programador mais experiente aceitou fazer e acaba ficando com raiva da linguagem. Tente fazer algo simples, mas objetivo.
Seguindo esses passos, você não será um scripter (Estagiario de Programador) mais terá ferramentas e noção boa de como começar ou se aprimorar.
ta bom exagerei estagiario eh osso
Eu por exemplo comecei em scripts LUA na epoca de Ouro do Xtibia, quando o forum ficava lerdo de tanta gente on e choviam scripts. E acabei fazendo ETEC (Curso tecnico do governo de SP) e hoje trabalho com delphi. Para quem deseja seguir carreira é um começo para saber se não está entrando em alguma área que não vai gostar, e temos varias ramificações, como WEB.
if(doPlayerRemoveMoney(cid, 500000) == TRUE) then
else
doPlayerSendTextMessage(cid,22,"Você precisa de 50 crystal coin para poder resetar.")
return TRUE
end
Lottery System é um Sistema que Todos os Players que Estiverem Online no Seu OtServer Poderam Ganhar.
O Script Sortea algum Player Online, e Sorteia o Item que o Player Ganhará é claro que ele sorteia so os items que voce escolheu no Script, ele esta arrumado para o evento acontecer em 3 a 3 horas é so arruma na tag o 10800 que no Caso é 3 Horas.
Vá em Data>Mods crie uma pasta.xml chamada lottery e coloque isto dentro dela:
<mod name="Lottery System" version="1.4" author="vDk" contact="zlom290@gmail.com" enabled="yes">
<config name="lottery_config"><![CDATA[
config = {
lottery_hour = "3 Hours", -- Time to next lottery (only for broadcast message, real time you can set on globalevents.xml)
rewards_id = {2494, 2472, 2514, 2160}, -- Rewards ID
crystal_counts = 10, -- Used only if on rewards_id is crystal coin (ID: 2160).
website = "yes" -- Only if you have php scripts and table `lottery` in your database!
}
]]></config>
<globalevent name="lottery" interval="10800" event="script"><![CDATA[
domodlib('lottery_config')
function onThink(interval, lastExecution)
local list = {}
for i, tid in ipairs(getPlayersOnline()) do
list[i] = tid
end
local winner = list[math.random(1, #list)]
local random_item = config.rewards_id[math.random(1, #config.rewards_id)]
if(random_item == 2160) then
doPlayerAddItem(winner, random_item, config.crystal_counts)
doBroadcastMessage("[LOTTERY SYSTEM] Winner: " .. getCreatureName(winner) .. ", Reward: " .. config.crystal_counts .. " " .. getItemNameById(random_item) .. "s! Congratulations! (Next Lottery in " .. config.lottery_hour .. "")
else
doBroadcastMessage("[LOTTERY SYSTEM] Winner: " .. getCreatureName(winner) .. ", Reward: " .. getItemNameById(random_item) .. "! Congratulations! (Next Lottery in " .. config.lottery_hour .. "")
doPlayerAddItem(winner, random_item, 1)
end
if(config.website == "yes") then
db.executeQuery("INSERT INTO `lottery` (`name`, `item`) VALUES ('".. getCreatureName(winner) .."', '".. getItemNameById(random_item) .."');")
end
return true
end
]]></globalevent>
</mod>
Feche e Salve!
Script Em Arquivos.lua:
Se seu OtServer nao Tiver a Pasta Mods, Voce podera colocar normalmente em pastas.lua!!
Vá em Data>Globalevents.xml abra-lo e Adicione esta Tag:
Agora vá em Data>GlobalEvents>Scripts crie uma pasta.lua chamada lottery e coloque isto:
-- by vDk
local config = {
lottery_hour = "3 Hours", -- Time to next lottery (only for broadcast message, real time you can set on globalevents.xml)
rewards_id = {2494, 2472, 2514, 2160}, -- Rewards ID
crystal_counts = 10, -- Used only if on rewards_id is crystal coin (ID: 2160).
website = "yes" -- Only if you have php scripts and table `lottery` in your database!
}
function onThink(interval, lastExecution)
local list = {}
for i, tid in ipairs(getPlayersOnline()) do
list[i] = tid
end
local winner = list[math.random(1, #list)]
local random_item = config.rewards_id[math.random(1, #config.rewards_id)]
if(random_item == 2160) then
doPlayerAddItem(winner, random_item, config.crystal_counts)
doBroadcastMessage("[LOTTERY SYSTEM] Winner: " .. getCreatureName(winner) .. ", Reward: " .. config.crystal_counts .. " " .. getItemNameById(random_item) .. "s! Congratulations! (Next Lottery in " .. config.lottery_hour .. "")
else
doBroadcastMessage("[LOTTERY SYSTEM] Winner: " .. getCreatureName(winner) .. ", Reward: " .. getItemNameById(random_item) .. "! Congratulations! (Next Lottery in " .. config.lottery_hour .. "")
doPlayerAddItem(winner, random_item, 1)
end
if(config.website == "yes") then
db.executeQuery("INSERT INTO `lottery` (`name`, `item`) VALUES ('".. getCreatureName(winner) .."', '".. getItemNameById(random_item) .."');")
end
return true
end
Feche e Salve Tudo!
Para Sites.php e MySql:
Bom Se voce Tem um Site e Quiser adicionar este Script nele, para Anunciar no Seu site quem Ganhou a Loteria entao Siga essas Etapas.
(Nao Sei mecher Muinto Nisso.)
Crie uma Pasta.php e Coloque o Nome de Lottery (Lottery.Php) e adicione isto:
<?PHP
$lottery = $SQL->query('SELECT id, name, item FROM lottery ORDER BY id DESC LIMIT 1;');
foreach($lottery as $result) {
$main_content .= '<center><h1>Lottery</h1></center>
<center>Every X hours we will choose one player who will win random item!<br/>
Last Winner: <a href="?subtopic=characters&name='.urlencode($result['name']).'">'.$result['name'].'</a> Item: <i>'.$result['item'].'</i> Congratulations!</center>';
}
?>