
brenner44
Membro
-
Registro em
-
Última visita
Histórico de Curtidas
-
brenner44 deu reputação a Kamiz em Como Apagar Nomes De Monstros E Npcs Não Mais Utilizados No RMEIniciar - > %appdata% - > RMEMAPEDITOR - > Versão -> creatures.xml (ADICIONAR OU REMOVER A LINHA QUE ACHAR NECESSÀRIO!)
-
brenner44 deu reputação a Danyel Varejao em [System] Auto Loot Perfect~~~~~ * Auto Loot System 100% * ~~~~~ TFS 0.4 / TFS 0.3.7
Fala galerinha do Tibiaking, então, várias pessoas estão tendo problema com o sistema de autoloot, aqui vai um sistema que eu editei para melhorar o uso do mesmo. Sem muita enrolação vamos ao que interessa.
1° - Acesse a pasta data/lib e crie um arquivo chamado Auto_Loot.lua, coloque isso dentro do arquivo:
2° - Abra a pasta data/actions/scripts e crie um arquivo chamado Auto_Loot_Boost.lua, dentro dele adicione:
3° - Abra a pasta data/creaturescripts/scripts e crie um arquivo chamado Auto_Loot.lua, dentro dele adicione:
4° - Abra a pasta data/talkactions/scripts e crie um arquivo chamado Auto_Loot.lua, dentro dele adicione:
5° - Em data/actions/actions.xml adicione a seguinte tag:
<!-- Auto Loot --> <action itemid="7443" event="script" value="Auto_Loot_Boost.lua"/> Altere o numero 7443 caso queira mudar o id do item do seu auto loot boost.
6° - Em data/creaturescripts/creaturescripts.xml adicione a seguinte tag:
<!-- Auto Loot --> <event type="login" name="Auto_Loot_Login" event="script" value="Auto_Loot.lua"/> <event type="kill" name="Auto_Loot_Kill" event="script" value="Auto_Loot.lua"/> 7° - Em data/talkactions/talkactions.xml adicione a seguinte tag:
<!-- Auto Loot --> <talkaction access="0-4" words="/autoloot;!autoloot" event="script" value="Auto_Loot.lua"/>
Créditos
50% Killua(Vitor Bertolucci)
50% Danyel Varejão
-
brenner44 deu reputação a Garou em Monstros PassivosMonstros Passivos
Sabe, esse é um dos sistemas mais desejados, da família dos sistemas que surgiram com os Pokétibias, depois do TV System.
Aquele sistema que faz com que existam monstros que não atacam você, se você não atacar ou usar magias antes. Não tem nenhum segredo, resolvi fazer o meu em Lua e C++ por puro comodismo.
Então vamos ao passo-a-passo.
No seu arquivo monster.h, procure por isso:
bool isHostile() {return mType->isHostile;} Troque por:
bool isHostile() const { std::string value; if(!getStorage("hostile", value)) return mType->isHostile; return booleanString(value); } No seu monster.cpp, procure por:
Monster::selectTarget Abaixo de:
if(!isTarget(creature)) return false; Adicione:
if(!isHostile()) return false; Crie um arquivo chamado passive_system.lua no diretório creaturescripts/scripts, cole isso:
PASSIVE_BEHAVIOR = {"Deer", "Rabbit"} -- Aqui ficam os monstros que não atacam, mesmo que atacados. function onCombat(cid, target) if isMonster(target) then if not isInArray(PASSIVE_BEHAVIOR, getCreatureName(target)) then doCreatureSetStorage(target, "hostile", 1) end doMonsterSetTarget(target, cid) end return true end No arquivo login.lua:
registerCreatureEvent(cid, "PassiveSystem") No arquivo creaturescripts.xml:
<event type="combat" name="PassiveSystem" event="script" value="passive_system.lua"/> Dê um Rebuild All no seu servidor, ou compile, deletando a pasta obj.
Para usar basta mudar a flag hostile do monstro para 0 no arquivo XML dele.
Boa diversão.
Abraços,
Oneshot
-
brenner44 deu reputação a jacareverde em Monstros Passivos@off desculpa reviver o tópico, mas acho que a melhoria deste codigo irá trazer prestigio para o fórum e melhor o conteudo desta comunidade.
Estou quebrando a cabeça para fazer funcionar direito o codigo... o monstro depois de ser atacado ele vira hostile com todos os player online... como fazer para que ele só ataque os players que atacaram ele?
-
brenner44 deu reputação a xWhiteWolf em (Resolvido)Spell de revidar ataquespells/scripts/especiais/uchihagaeshi.lua
local config = { storage = 3482101, cooldown = 20, effect1 = 29 --- efeito que sai qnd usa a spell } function onCastSpell(cid, var) if getPlayerStorageValue(cid, config.storage) == 1 then doPlayerSendCancel(cid, "Your skill is already active.") return false end if os.time() - getPlayerStorageValue(cid, 55694) >= config.cooldown then setPlayerStorageValue(cid, 55694, os.time()) doSendMagicEffect(getCreaturePosition(cid), config.effect1) setPlayerStorageValue(cid, config.storage, 1) doPlayerSendTextMessage(cid, 27, "You activated your skill, the next damage will be reflected.") else doPlayerSendCancel(cid, "Your skill is in cooldown, you must wait "..(config.cooldown - (os.time() - getPlayerStorageValue(cid, 55694))).." seconds.") return false end return true end spells.xml
<instant name="testeTK" words="naruto3" lvl="16" mana="500" prem="1" aggressive="0" exhaustion="1000" needlearn="0" event="script" value="especiais/uchihagaeshi.lua"> </instant>
creaturescripts.xml:
<event type="statschange" name="uchihagaeshi" event="script" value="uchihagaeshi.lua"/> creaturescripts\scripts\uchihagaeshi.lua:
local config = { storage = 3482101, effect1 = 17, --- efeito que sai ao dar reflect effect2 = 29 -- efeito que aparece na pessoa que levou reflect } function onStatsChange(cid, attacker, type, combat, value) if value >= 1 and (type == STATSCHANGE_HEALTHLOSS or (getCreatureCondition(cid, CONDITION_MANASHIELD) and type == STATSCHANGE_MANALOSS)) then if getPlayerStorageValue(cid,config.storage) == 1 and isCreature(attacker) then doSendAnimatedText(getCreaturePosition(attacker),"-"..value, 215) doCreatureAddHealth(attacker, -value, true) doCreatureSay(cid,"Uchihagaeshi!", 19) doSendMagicEffect(getCreaturePosition(cid), config.effect1) doSendMagicEffect(getCreaturePosition(attacker), config.effect2) setPlayerStorageValue(cid,config.storage, 0) return false end end return true end creaturescripts\scripts\login.lua:
---------- UCHIHAGAESHI ---------------- registerCreatureEvent(cid, "uchihagaeshi") if getPlayerStorageValue(cid, 3482101) ~= 0 then setPlayerStorageValue(cid, 3482101, 0) end
Se for editar storage tem que editar em todos os scripts
-
brenner44 deu reputação a xWhiteWolf em (Resolvido)[PEDIDO] Nascer respawn com player na teladificilmente eu defendo alguém nesse fórum mas você foi o único aqui que demonstrou não saber nada de programação. Pedindo pra comentar função? que coisa absurda.. essa função é chamada em vários lugares da source, só comentar iria crashar seu server. Sem falar que o caronte modificou o return true para return false. Não sei se vc notou.. e isso realmente resolve.
-
brenner44 deu reputação a Caronte em (Resolvido)[PEDIDO] Nascer respawn com player na telaIsso precisa ser feito nas source, e compilar novamente com o arquivo spawn.cpp editado.
Se quiser, siga o tutorial abaixo:
Em spawn.cpp
Procure por
bool Spawn::findPlayer(const Position& pos) E no lugar de:
bool Spawn::findPlayer(const Position& pos) { SpectatorVec list; g_game.getSpectators(list, pos); Player* tmpPlayer = NULL; for(SpectatorVec::iterator it = list.begin(); it != list.end(); ++it) { if((tmpPlayer = (*it)->getPlayer()) && !tmpPlayer->hasFlag(PlayerFlag_IgnoredByMonsters)) return true; } return false; } Coloque:
bool Spawn::findPlayer(const Position& pos) { SpectatorVec list; g_game.getSpectators(list, pos); Player* tmpPlayer = NULL; for(SpectatorVec::iterator it = list.begin(); it != list.end(); ++it) { if((tmpPlayer = (*it)->getPlayer()) && !tmpPlayer->hasFlag(PlayerFlag_IgnoredByMonsters)) return false; } return false; } Pronto, irá spawnar com ou sem player na tela, já foi testado por mim.
-
brenner44 deu reputação a abugaduniga em [8.6 TFS 3.6] Spell Ghost InvisibleAe galera fiz esse spell aqui no meu ot, funcionou 100%
Shadow Walker Spell By Abugaduniga
(Ghost mode spell)
Client Versão 8.6
OT TFS 4.0
Porem, acredito que serve em geral!
Sei que muita gente vai me agradecer por isso
1º Passo:
Abra o Spells.XML e adicione o seguinte código:
<!-- Shadow Walker by Abuga --> <instant name="Shadow Walker" words="utana vis" lvl="40" manapercent="70" exhaustion="2000" needlearn="0" event="script" value="support/shadow.lua"> <vocation id="41"/> </instant> NOTA: aonde está manapercent="70" pode ser trocado por mana="VALOR", Deixe só 1 dos dos para não dar problemas!
2º Passo
Crie na pasta \data\spells\scripts\support um arquivo chamado Shadow.lua e coloque o seguinte código dentro:
function onCastSpell(cid, var) parameters = {cid=cid} setPlayerGroupId(cid, 2) doCreatureExecuteTalkAction(cid, "/ghost", TRUE) addEvent(talk, 5000, parameters) return true end function talk(parameters) doCreatureExecuteTalkAction(parameters.cid, "/ghost", TRUE) setPlayerGroupId(parameters.cid, 1) end NOTA: Na linha onde se encontra "addEvent(talk, 5000, parameters)" Troque 5000 por quantos segundos vc deseja que este spell dure (1 seg = 1000)
Na linha onde se encontra "setPlayerGroupId(cid, 2)" ela deixará o player com o groupid de senior tutor. Infelismente é o único jeito que descobri para que players não te encherguem ao usar, pois a condição ghost afeta apenas quem é inferior ao groupid do player.
3º passo
No arquivo login.lua (\data\creaturescripts\scripts) Adicione o seguinte código logo abaixo de "function onLogin(cid)"
-- Login Cancel Invisible -- if(getPlayerGroupId(cid) == 2) then setPlayerGroupId(cid, 1) end if(isPlayerGhost(cid)) then doCreatureExecuteTalkAction(cid, "/ghost", TRUE) end -- end -- NOTA: Isto serve para caso o server caia, o player que está na condição ghost vire groupid 0(player) e cancele o ghostmode ao login.
É importante ressaltar também, que caso algum GM/GOD esteja ghostmode e de logout, quando der login voltará a ser visível apenas, ele NÃO terá o groupid modificado! então pode usar de boas
4º passo
Teste, compartilhe e me de REP+ xD
Tem apenas um Bug, que caso seu server de crash ou caia enquanto o player esteja ghostmode, é que quando ele entrar os players em volta dele tomam crash, mais apenas no primeiro login.
-
brenner44 deu reputação a Orochi Elf em [OLDClient-DLL] OrochiElfFala aê pessoal, eu ultimamente resolvi entender um pouco mais do OLDClient e do DLL Injection. Demorei um tempo porém consegui resultados, mas agora estou sem idéia do que posso fazer, por hora só fiz isso;
Estou pensando em fazer um [OT-OLDClient], ou melhor dizendo, um OLDClient que tenha as mesmas funções modules que existe no OTClient.
Espero sugestões do que fazer kkk
>pica relatada do meu feito (quem lê GT entende.)
-
brenner44 deu reputação a Tibia2015br em Colocar musica*Junto vem um dll com o ip(127.0.0.1) mais não se preocupe coloquei o projeto do Visual C++ para você mudar o ip e recompilar.
Ela está disponivel aki:
Audio Dll+Project VC++.rar 498.3KB 21 downloads
Prontinho agora vamos a instalação:
Primeiro execute o server de audio junto ao seu otserv:
Server Audio Dll or Vb Form.rar 80.84KB 15 downloads
Instale a blibioteca lua socket no seu otserv:
http://w3.impa.br/~d...ware/luasocket/
Agora coloque está funcão na sua lib:
function sendAudio(cid, audio)
require('socket')
local ip = "127.0.0.1" -- Seu ip Aki
local client = socket.connect(ip, 1234)
local t = "Send,"..doConvertIntegerToIp(getPlayerIp(cid))..","..audio..""
client:send(t.."\n")
client:settimeout(0.1)
client:close()
end Pronto quando quiser executar um som basta usar a função sendAudio(cid, "id audio")
Se tiver usando a dll todos o sons devem ser guardados junto a ela.
Todos os formatos de audio devem ser ".wav" e todos precisam ser enumerados de 000 a 999 se não seguir tal regra terá varios problemas.
Agora vou passar um codigo em vb que fiz para você injentar a dll antes que o seu client inicie:
E NECESSARIO EXECUTAR DENTRO DE UM THEARED QUANDO FOR FAZER O SEU LAUNCHER.
Spoiler
Imports System.Threading
Public Class PBO
Private trd As Thread
Private TargetProcessHandle As Integer
Private pfnStartAddr As Integer
Private pszLibFileRemote As String
Private TargetBufferSize As Integer
Public Const PROCESS_VM_READ = &H10
Public Const TH32CS_SNAPPROCESS = &H2
Public Const MEM_COMMIT = 4096
Public Const PAGE_READWRITE = 4
Public Const PROCESS_CREATE_THREAD = (&H2)
Public Const PROCESS_VM_OPERATION = (&H8)
Public Const PROCESS_VM_WRITE = (&H20)
Public Declare Function ReadProcessMemory Lib "kernel32" ( _
ByVal hProcess As Integer, _
ByVal lpBaseAddress As Integer, _
ByVal lpBuffer As String, _
ByVal nSize As Integer, _
ByRef lpNumberOfBytesWritten As Integer) As Integer
Public Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" ( _
ByVal lpLibFileName As String) As Integer
Public Declare Function VirtualAllocEx Lib "kernel32" ( _
ByVal hProcess As Integer, _
ByVal lpAddress As Integer, _
ByVal dwSize As Integer, _
ByVal flAllocationType As Integer, _
ByVal flProtect As Integer) As Integer
Public Declare Function WriteProcessMemory Lib "kernel32" ( _
ByVal hProcess As Integer, _
ByVal lpBaseAddress As Integer, _
ByVal lpBuffer As String, _
ByVal nSize As Integer, _
ByRef lpNumberOfBytesWritten As Integer) As Integer
Public Declare Function GetProcAddress Lib "kernel32" ( _
ByVal hModule As Integer, ByVal lpProcName As String) As Integer
Private Declare Function GetModuleHandle Lib "Kernel32" Alias "GetModuleHandleA" ( _
ByVal lpModuleName As String) As Integer
Public Declare Function CreateRemoteThread Lib "kernel32" ( _
ByVal hProcess As Integer, _
ByVal lpThreadAttributes As Integer, _
ByVal dwStackSize As Integer, _
ByVal lpStartAddress As Integer, _
ByVal lpParameter As Integer, _
ByVal dwCreationFlags As Integer, _
ByRef lpThreadId As Integer) As Integer
Public Declare Function OpenProcess Lib "kernel32" ( _
ByVal dwDesiredAccess As Integer, _
ByVal bInheritHandle As Integer, _
ByVal dwProcessId As Integer) As Integer
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Integer
Private Declare Function CloseHandle Lib "kernel32" Alias "CloseHandleA" ( _
ByVal hObject As Integer) As Integer
Dim ExeName As String = IO.Path.GetFileNameWithoutExtension(Application.ExecutablePath)
Private Sub Inject()
Dim client As String = Application.StartupPath + "\dll\client.exe"
If Not System.IO.File.Exists(client) Then
MsgBox("ERROR! Verifique se a os arquivos (data) estão todos presentes se não baixe o launcher denovo" + vbNewLine + "Error de caminho")
End If
Dim x = Shell(client)
While True
If x Then
Exit While
End If
End While
On Error GoTo 1 ' If error occurs, app will close without any error messages
Dim caminho As String = Application.StartupPath + "\dll\dllPBO.dll"
TargetProcessHandle = OpenProcess(PROCESS_CREATE_THREAD Or PROCESS_VM_OPERATION Or PROCESS_VM_WRITE, False, x)
pszLibFileRemote = caminho
pfnStartAddr = GetProcAddress(GetModuleHandle("Kernel32"), "LoadLibraryA")
TargetBufferSize = 1 + Len(pszLibFileRemote)
Dim Rtn As Integer
Dim LoadLibParamAdr As Integer
LoadLibParamAdr = VirtualAllocEx(TargetProcessHandle, 0, TargetBufferSize, MEM_COMMIT, PAGE_READWRITE)
Rtn = WriteProcessMemory(TargetProcessHandle, LoadLibParamAdr, pszLibFileRemote, TargetBufferSize, 0)
CreateRemoteThread(TargetProcessHandle, 0, 0, pfnStartAddr, LoadLibParamAdr, 0, 0)
CloseHandle(TargetProcessHandle)
1: Application.Exit()
End Sub
-
brenner44 deu reputação a ZoR em Barra De Mana abaixo da vidacomo assim? cara essa dll nao se faz em 1 dia ou 2 eu comprei nao vou disponibilizar pq gastei grana nao sou papai noel,se voçe pedir uma coisa aqui que exige tempo do scripter
ele nao vai fazer apesar que toda script exige muito tempo e tests,ninguem é obrigado a disponibilizar as coisas e nao ter reconhecimento igual ao script de Jinchuuriki do Kotz ninguem deu o devido reconhecimento para ele o cara perdeu tempo fazendo uma coisa que muitos iam usar e nao teve nem 20 obrigados e nem 10 rep,era um sistema que ninguem ia gastar tempo para fazer e ele vez,se voçe quer um servidor top vc vai gastar dinheiro com mapa,spriter,programador etc,ninguem é desumilde por nao disponibilizar as coisas,todo mundo tem um esforço para algo e ninguem vai disponibilizar uma dll dessa,ou a dll de extender client 8.60,o TK ta assim porque as pessoas nao dao o devido agradecimento ao scripter ou programador que faz um script e nao tem o devido reconhecimento,por isso ele nao ajudam todos.
-
brenner44 deu reputação a xWhiteWolf em (Resolvido)[PEDIDO] Meteor spell tfs 1.0não mexo com 1.0, se não eu fazia ;~
-
brenner44 deu reputação a xWhiteWolf em (Resolvido)[PEDIDO] Meteor spell tfs 1.0seria isso daqui só q pra 1.0 http://www.tibiaking.com/forum/topic/47039-spell-que-faz-chover-arrows/
-
brenner44 deu reputação a xWhiteWolf em (Resolvido)[PEDIDO] Meteor spell tfs 1.0sim, só clicar no gostei haha
-
brenner44 deu reputação a xWhiteWolf em (Resolvido)[PEDIDO] Meteor spell tfs 1.0para de citar meus comentários toda hora mano, tá fazendo spam desnecessário no fórum e fica chovendo notificação sua cada vez que vc faz isso. Apenas comente oque vc quer falar direto. Esse erro é bug, se vc tiver pelo notepad clica em formatar > converter para ansi e dps disso dá reload.
-
brenner44 deu reputação a igorppbr em (Resolvido)[PEDIDO] Meteor spell tfs 1.0[Error - LuaScriptInterface::loadFile] data/spells/scripts/attack/meteora.lua:1:
unexpected symbol near '´'
[Warning - Event::loadScript] Cannot load script (data/spells/scripts/attack/met
eora.lua)
data/spells/scripts/attack/meteora.lua:1: unexpected symbol near '´'
[Warning - Spell::configureSpell] Wrong vocation name: 6
-
brenner44 deu reputação a Snowsz em [Sistema] AttackSpeed - Sem sourceBom, postei este tópico nessa área e não em globalevents por que não considero que lá deem muitas visualizações em globalevents, não é por que quero ganhar reputação ou algo do tipo, mas para ajudar quem precisa de tal coisa.
Resumindo: Este script é um globalevent que a cada 2 segundos muda o attackspeed de um item conforme o skill fist fighting do player, funcionando como um sistema de attackspeed com source, quanto mais skill, mais rápido ele ataca, mas como este sistema não utiliza sources, eu fiz o melhor que eu pude.
Testado em um TFS 0.4
Lag: Não se se irá causar lag, pouco lag, ou muito lag, eu fiz em globalevent por causa do seu intervalo que pode ser configurável para mais ou para menos, não pensei muito em usar o creatureevent por conta que o onThink ou onAttack fica se repetindo a cada meio segundo se não me engano, então, preferi fazer desta forma.
Instalação:
Na pasta globalevents/scripts crie um arquivo com extensão .lua com nome de playerattackspeed(ficando playerattackspeed.lua) e ponha isso dentro:
function onThink(interval) local multi = 20 local skill = 0 for _, pid in ipairs(getPlayersOnline()) do local slotLeft, slotRight = getPlayerSlotItem(pid, CONST_SLOT_LEFT), getPlayerSlotItem(pid, CONST_SLOT_RIGHT) if isCreature(pid) then if slotLeft.uid > 0 then if (multi*getPlayerSkill(pid, skill)) >= 1999 then doItemSetAttribute(slotLeft.uid, "attackspeed", 1) else doItemSetAttribute(slotLeft.uid, "attackspeed", 2000-(multi*getPlayerSkill(pid, skill))) end elseif slotRight.uid > 0 then if (multi*getPlayerSkill(pid, skill)) >= 1999 then doItemSetAttribute(slotRight.uid, "attackspeed", 1) else doItemSetAttribute(slotRight.uid, "attackspeed", 2000-(multi*getPlayerSkill(pid, skill))) end end end end return true end Agora volte uma pasta e vá só para globalevents lá você encontrará um arquivo chamado globalevents com extensão .xml(sendo globalevents.xml) nele adicione a tag antes das duas últimas linhas:
<globalevent name="PlayerAttackSpeed" interval="2000" event="script" value="playerattackspeed.lua"/> Bom, o script foi instalado com sucesso.
Configuração:
No arquivo com extensão final .lua você pode modificar o id do skill em "local skill = 0", 0 significa o skill fist fighting, você pode ir alternando
Ainda no arquivo com extensão final .lua pode-se alterar o "local multi = 20", o 20 é a multiplicação do skill, ou seja, skill x 20, quando o skill configurado(eu deixei fist fighting) atingir 100 com o multi em 20, ele chegará ao máximo de attackspeed, após isso mesmo que ele pegue skill 1000 continuará essa mesma velocidade por conta de limitações que o tibia impõe nas suas sources, se quiser que ele ataque ainda mais rápido deverá mudar se não me engano só uma linha nas sources.
Agora no arquivo globalevents.xml você pode alterar a tag, mudando interval, 1000 é igual a um segundo, ou seja, no script ta configurado para a cada 2 segundos alterar o attackspeed conforme a configuração, você pode alterar para quanto quiser, lembre-se 1000 é um segundo, ou seja, se colocar 5000 fica 5 segundos de intervalo para o script agir.
Espero que gostem!
Talvez quando eu estiver mais avançado em lua eu possa criar uma segunda versão que possa atacar mais rápido, mas, no momento nem penso nisso
Versão Creaturescripts - Créditos: detoneitormen
(Obs: Não testei esta versão, só copiei do modo que ele escreveu.)
function onThink(cid, interval) local multi = 200 local skill = 2 local limite = 99 local slotLeft, slotRight = getPlayerSlotItem(cid, CONST_SLOT_LEFT), getPlayerSlotItem(cid, CONST_SLOT_RIGHT) if last_interval == nil then last_interval= os.clock() end if (os.clock() - last_interval) > 1 then if slotLeft.uid > 0 then if (multi*getPlayerSkill(cid, skill)) >= limite then doItemSetAttribute(slotLeft.uid, "attackspeed", 1) else doItemSetAttribute(slotLeft.uid, "attackspeed", 2000-(multi*getPlayerSkill(cid, skill))) end elseif slotRight.uid > 0 then if (multi*getPlayerSkill(cid, skill)) >= limite then doItemSetAttribute(slotRight.uid, "attackspeed", 1) else doItemSetAttribute(slotRight.uid, "attackspeed", 2000-(multi*getPlayerSkill(cid, skill))) end end last_interval= os.clock() return true end return false end A configuração é igual a minha versão, só muda a variável "limite" e "multi", para deixar igual ao meu, basta trocar:
Isso:
local limite = 99 Por isso:
local limite = 1999 E isso:
local multi = 200 Por isso:
local multi = 20 Obrigado detoneitormen.
-
brenner44 deu reputação a xWhiteWolf em (Resolvido)Como eu faço o Sistema Training igual ao NTO BRlocal config = { number = 130, --- numero de salas firstPos = {x = 160, y = 54, z = 7}, --- pos da primeira sala (coloque a pos de onde o player irá ficar ao entrar) rangex = 11, --- distancia em X entre cada uma das pos de cada sala rangey = 12 --- distancia em Y entre cada uma das pos de cada sala } function onStepIn(cid, item, position, fromPosition) local room = nil for i = 0, (config.number - 1) do pos = {x = config.firstPos.x + (i * config.rangex), y = config.firstPos.y + (i * config.rangey), z = config.firstPos.z} if isWalkable(pos, true, true, true) then room = pos break end end if room ~= nil then doTeleportThing(cid, room) else doPlayerSendCancel(cid, "All rooms are full") doTeleportThing(cid, fromPosition) doSendMagicEffect(fromPosition, 2) end return true end coloca em movements por actionid/uniqueid e coloca esse action/unique no teleporte. Abraço
-
brenner44 deu reputação a xWhiteWolf em (Resolvido)Como eu faço o Sistema Training igual ao NTO BRvelho olha a imagem e olha oque tu me falou.. Não tem nada a ver, óbvio que deu erro, eu fiz o script pra um mapa que não é o teu. Tá vendo porque não dá certo? Agora eu to puto da vida e você vai ficar sem o sistema, não era muito mais fácil vc ter passado as drogas das posições de inicio? Você me falou que era uma cabana de trainer a cada 11 sqms pra > e 12 pra /\, o script foi feito pra trainers em uma linha e não pra duas linhas. Caramba cara.
O erro no script foi que eu esqueci uma virgula, agora se vc quiser usar esse sistema vai ter que refazer o mapa pra uma linha só de trainers e colocar rangey = 0.
-
brenner44 deu reputação a xWhiteWolf em (Resolvido)[Ajuda] Adicionando variáveis?local arr1 = { {1, 1, 1}, {1, 2, 1}, {1, 1, 1} } local area1 = createCombatArea(arr1) local arr2 = { {1, 1, 1}, {1, 2, 1}, {1, 1, 1} } local area2 = createCombatArea(arr2) function onCastSpell(cid, var) local maglevel, level, mana = getPlayerMagLevel(cid), getPlayerLevel(cid), getCreatureMana(cid) local axe, sword, club, distance = getPlayerSkillLevel(cid, 3), getPlayerSkillLevel(cid, 2), getPlayerSkillLevel(cid, 1), getPlayerSkillLevel(cid, 4) local shield, health = getPlayerSkillLevel(cid, 5), getCreatureHealth(cid) local formula = { min = (level + maglevel + axe + sword + club + shield + mana), max = (level + maglevel + axe + sword + club + shield + mana + health) } addEvent(function() if isCreature(cid) then doAreaCombatHealth(cid, 1, getCreaturePosition(cid), area1, -formula.min, -formula.max, 9) end end, 100) addEvent(function() if isCreature(cid) then doAreaCombatHealth(cid, 1, getCreaturePosition(cid), area1, -formula.min, -formula.max, 0) end end, 500) return true end só configura na formula os valores minimos e máximos que vc quer. Ali em cima é a area
Aqui vc tem a primeira spell:
e aqui tem a segunda
1 ali é o tipo de dano, 1 significa dano físico mas vc pode alterar seguindo essa tabela:
COMBAT_NONE = 0 COMBAT_PHYSICALDAMAGE = 1 COMBAT_ENERGYDAMAGE = 2 COMBAT_EARTHDAMAGE = 4 COMBAT_POISONDAMAGE = 4 COMBAT_FIREDAMAGE = 8 COMBAT_UNDEFINEDDAMAGE = 16 COMBAT_LIFEDRAIN = 32 COMBAT_MANADRAIN = 64 COMBAT_HEALING = 128 COMBAT_DROWNDAMAGE = 256 COMBAT_ICEDAMAGE = 512 COMBAT_HOLYDAMAGE = 1024 COMBAT_DEATHDAMAGE = 2048 area1 e 2 são as areas lá em cima do script e as formulas vc edita da forma que quiser. O 9 e o 0 são os efeitos que saem;
abaixo dos combats vc vai ter isso daqui:
esse 100 e o outro 500 lá representam o tempo em milisegundos até o combat sair, se vc quiser aumentar o tempo entre as duas spells é só aumentar esse valor (lembrando que é em milisegundos [1 segundo = 1000 milisegundos]. Da forma que está colocado a primeira spell sai em 0,1 segundo e a segunda sai em 0,4 segundos dps da primeira.. as duas spells acabam dps de meio segundo. Espero que tenha entendido
-
brenner44 deu reputação a xWhiteWolf em [PEDIDO] Spell Buffnão tem comando pra mexer na attack speed mas o regen é fazível
-
brenner44 deu reputação a xWhiteWolf em [PEDIDO] Spell Buffo problema de copiar spell de outros servidores é que você tem que fazer exatamente as alterações que eles fizeram na source.. eu to te falando de antemão que não dá pra criar uma spell assim porque um server tem regras definidas na source, se eles editaram o server inteiro pra alterar as regras aí é com eles.
-
brenner44 deu reputação a xWhiteWolf em (Resolvido)[PEDIDO] Comando para fazer summon falaro resto fica por sua conta :DDD
for _, summon in ipairs (getCreatureSummons(cid)) do if getCreatureName(summon) == "Nome do Bixo Aqui" then doCreatureSay(summon, param[2], TALKTYPE_MONSTER) end end -
brenner44 deu reputação a xWhiteWolf em (Resolvido)getCreatureSummons(cid)a função getCreatureSummons(cid) retorna uma tabela com todos os uids dos summons do player cid.
o [1] serve pra indiciar que é o primeiro summon da tabela
-
brenner44 deu reputação a MadoxSilver em Fazendo SpritesIntrodução
Estou de volta em mais um de muitos tutoriais que farei (assim espero :]). Aqui lhes mostrarei como trabalhar usando o sprite editor, o paint e o Photoshop fazendo sprites, ou alterando, é claro. Bem... Aqui vamos falar sobre:
Sprite Editor
Paint
Photoshop
Refletores
Texturas
Reflexão
Vocabulário
e Muito Mais
Sprite Editor
Sua função é simples, rápida e essencial. Adicionar e alterar sprites do tibia, contidos no arquivo Tibia.spr que geralmente está em C:\Arquivos de programas\Tibia\Tibia.spr. Para carregá-los basta abrir o sprite editor (lógico né...) e clicar em LOAD ITEMS.
Uma Janela irá aparecer, pedindo para você encontrar o Tibia.spr, que está na pasta do Tibia (C:\Arquivos de programas\Tibia\Tibia.spr) clique nele, e logo após em abrir.
Outra janela surgirá, perguntando a você qual cor você deseja utilizar. Escolha rosa. No tibia ela é a cor que determina o "NADA".
Esta janela abrirá...(a que mais usaremos
) bem, repare que aqui temos vários sprites, cada um em um espaço de 32x32 pixels, o mesmo que ocupam no tibia. Esses que você pode ver, são apenas alguns, dos sprites que temos, são realmente a menoria...hehe. Temos 36559 sprites, pelo menos em minha versão (8.6). Repare que tem dois itens que sem dúvida vocês não conhecerão, pois são de minha autoria, que alterei por outros itens, o Headhunter Axe, o axe de lâmina avermelhada de duas lâminas, e a Divine Sword, a espada dourada que aparece selecionada, desculpem...realmente são feios...kkkkkkk.
Para ir a um sprite que você deseje, coloque seu número (do sprite é claro ) na caixa à esquerda de Goto Sprite, feito isso, clique em Goto Sprite. O sprite editor irá até o sprite que você pediu, siga a imagem.
Obs: Coloquei Ex: 1, mas você não deve colocar Ex... apenas o número (óbvio né... )
Para tirar um print screen interno (apenas da parte dos sprites), basta clicar em Save Page não é lá muito útil, já que temos o print screen convencional, mas..."quebra um galho". Escolha o local onde salvar e pronto, terá sua página atual salva.
Para ADICIONAR um sprite, nos espaços não utilizados, clique em Add Sprite e selecione a imagem do item que você deseja, sempre em 32x32, é claro. O item irá surgir no espaço não utilizado, agora basta você saber o ID dele para adicionar em seu OT, detalhe...o último sprite adicionado, você não poderá utilizar (no sprite editor) a não ser que adicione outro, ou salve-os para o tibia.spr. Para usar no Tibia Global, não é recomendado isso, é recomendado alterar sprites, que ensinarei adiante.
Para alterar os sprites internos (que já estão contidos no seu Tibia.spr, basta clicar no sprite desejado (o que você deseja colocar no lugar de outro), e clicar em COPY, em português, copiar, e logo após, selecione o sprite que você deseja alterar, clicando em PASTE, ou seja, colar. Feito isso seu sprite estará alterado, sem interferir no perfeito funcionamento do outro.
Já para alterar os sprites existentes por um externo (que ainda é apenas uma imagem de tamanho 32x32) basta selecionar o sprite desejado (que você deseja alterar) e clicar em LOAD, então aparecerá uma janela pedindo para você achar o sprite, você deve selecioná-lo e clicar em Abrir, feito isso...pronto. Para salvar um sprite interno, torná-lo externo, ou seja, transferí-lo para uma pasta de sua escolha, basta clicar em SAVE, com o sprite selecionado...é claro.
Para salvar seu trabalho, e criar um novo tibia.spr clique em save itens. ATENÇÃO: Você não pode salvá-los na pasta do tibia.spr que está sendo usado.
Facilitando o Trabalho
Uma maneira bem fácil e organizada para trabalhar com isso, é organizar em pastas, por categoria, assim você economizará muito tempo, imagine a cena, você trabalhando com...vamos supor, 400 sprites, procurando uma determinada espada no meio de 400, agora imagine com os mesmos 400, você entra na pasta espadas, irá achar 15 ou menos espadas, bem mais fácil...não?
Para iniciantes, que ainda não tenham noções básicas sobre a estrutura dos itens, recomendo que salve os itens que na sua opinião se destacam no tibia, os “melhores” e vá apenas editando eles. Use isso apenas para treinar, copiar não é nada legal...além de ser coisa de quem é literalmente NOOB. Não copie...
Paint
Bem vindos ao Paint...Pra quem não conhece...(não conhece?! O.o) é um programa que já vem no Windows, e é utilizado para edição e criação de imagens...Mas sempre me perguntam...”Porque o paint?” Simples, é um programa simples, leve, eficaz, e acessível a todos. Chega de papo e vamos abri-lo. Para quem não usa Windows, não tem problema, outros sistemas utilizam um software similar.
Bem... Para começar, o tamanho dos sprites são sempre os mesmos...(32x32). O Paint não vem com esse tamanho, para alterar basta apertar Ctrl+E, que irá abrir os atributos. Feito isso uma pequena janela irá aparecer, marque a opção pixels (em unidades) e coloque. Largura:32, Altura:32. Nas cores não mecha.
ATENÇÃO: O fundo de TODO o sprite deverá ser rosa, sem exceção, o rosa significa o “NADA” tudo o que estiver em rosa o Tibia Client irá preencher com sua textura padrão (aquele cinzinha que você viciado sabe MUITO BEM do que estou falando, hehe.) Nunca se esqueça de preencher o fundo com rosa. Não pode ser de tonalidade diferente, tem que ser a mostrada na imagem (Matiz:200/Sat:240/Lum:120/Vermelho:255/
Verde:0/Azul:255
Uma pequena apresentação das
ferramentas, seguindo a imagem ao
lado.
1: seleção personalizada, livre.
2: Seleção em forma retangular.
3: Borracha/Apagador. 4: Lata de
Tinta. 5: Puxa cor. 6: Lupa. 7: Lápis
8: Pincel. 9: Spray. 10: Inserir texto. 11: Linha.
12: Linha curva. 13: Retângulo. 14: Ferramenta polígono.
15: Forma circular. 16: Retângulo arredondado. Essas
são nossas ferramentas contidas na caixa de ferramentas.
Photoshop
Para quem não conhece ou nunca ouviu falar(um pouco improvável não?!) esta é simplesmente a melhor ferramenta que existe em criação e edição de imagens, no nosso caso sprites, mas não perde seu mérito (:. Aqui faremos principalmente pintura, sombreamento, clareamento, desfoque, outline bem caprichado, etc. Farei uma breve apresentação das ferramentas que usaremos em sprites, não colocarei todas porque se não seria um tutorial de Photoshop, ele realmente tem muitas funções...Ah, e é pago, porém temos muitos crackers e keys de graça na internet. O meu é o Adobe Photoshop CS 3, na minha opinião o melhor, tem todas as ferramentas de que precisamos e é bem leve, e fácil de se achar, postarei o download crackeado e em português no final do tutorial.(Assim que disponibilizá-lo). Colocarei aqui uma pequena apresentação das ferramentas, não todas, apenas as que mais usaremos, pois se não viraria tutorial de photoshop (pretendo fazer um futuramente) pois ele realmente tem muitas funções.
Número 1: Bem, dentro desses ícones, no caso o lápis, se você clicar com o botão direito do mouse, perceberá que tem mais ícones dentro, ícones relacionados, desses irei citar somente os que usaremos. Varinha Mágica: ele seleciona a área com texturas, cores, sombreamento, ou algo que você preferir, para facilitar a edição. Seletor: Praticamente mesma função, mais com ele você pode selecionar com mais precisão, porém com menos opções de seleção, ou seja, ela é semi-automática.
Número 2: Lápis: o bom e velho lápis, a ferramenta simples para pintura ou contorno que todos conhecemos. Pincel, é mais complexo que o lápis porque também nos oferece a função Fluxo, que nos dá mais controle, sugiro isso para pintura.
Número 3: Borracha:a boa e velha borracha...vou poupar comentários. Borracha mágica: Muito útil, porém se usada corretamente, se não for usada corretamente pode apagar pixels indesejáveis, mas basta configurar de acordo com sua preferência no menu a cima.
Número 4: A tradicional lata de tinta, pinta a área selecionada.
Número 5: Desfoque, ela converte os pixels próximos ao ponto selecionado em cores próximas, de forma que se crie uma pequena escala, diminuindo o foco, isso é também conhecido como outline quando aplicado nas linhas externas. Nitidez: Serve para "destacar algo", esta ferramenta torna a cor vibrante, exatamente para chamar a atenção para aquele lugar. Borrar: o nome diz tudo, mas enfim, borra
.
Número 6: Subexposição: Torna o local desejado mais claro, dando idéia de luz se usado corretamente. Superexposição: Torna o local mais desejado mais escuro, dando idéia de sombra se usado corretamente. Esponja: Bem útil para aumentar ou diminuir a saturação da imagem.
Para usar efeitos de luz e sombra, usaremos o Subexposição e o Superexposição, eles causam esse efeito, mas nunca se esqueça que se estiver intenso demais, chamando muita atenção e não dando ideia de sombra ou luz, use a ferramenta de desfoque, que realmente é útil. Antes de usar a lata de tinta esteja certificado que a área selecionada esteja "fechada", se preciso use a ferramenta de seleção para não errar. Para Anti-Aliasing utilizaremos a ferramenta de desfoque. ATENÇÂO: Em caso algum!!!!!!!! faça anti-aliasing externo nos sprites, a não ser que você trabalhe com um fundo similar a textura do tibia e no final do trabalho pinte com o ROSA Magenta, o padrão. Isto é o suficiente para vocês trabalharem com o Photoshop. Leiam mais tutoriais sobre, estarei adicionando vários na seção Pixel Art/Sprites, ensinando a detalhar itens, criar certos itens, texturas diferentes, outlines e sempre cheque a seção Galeria, lá você sempre pode aprender com quem sabe mais, acredite, sempre tem um. Se inspire mas nunca copie, como eu disse anteriormente é coisa de NOOBS, não seja um. Agora vamos para a próxima parte que o tempo corre!
Considerações Gerais
Primeiramente, nunca, eu disse nunca nem pense em
fazer sprites com somente uma cor, podem até falar que
está bonito e tal... mas, pense...você é considerado
iniciante hoje, mas ninguém sabe o dia de amanha...
sempre tente fazer o melhor, o caminho não é fácil,
mais se fosse não teria a mínima graça (:.
Antes quem erra sem saber do que quem erra sabendo, sempre capriche no sombreamento e nos efeitos de luz...Não gostou do resultado? Refaça, pode até demorar, mas vai valer a pena. Aqui lhes deixarei umas orbs, para quem não sabe a utilidade delas, é simples, nelas estão contidos muitos tons de cores, formando claramente efeitos de luz, com quais você pode simplesmente olhar e tentar reproduzir ou "puxar" a tonalidade. Disponibilizarei para download no final do Tutorial.
(crédito das orbs ao usuário Preguiça (de outro fórum)
Cada sprite terá uma história diferente para você, você sempre irá lembras de suas criações por alguma característica. Mas...pera ai!!! E os jogadores...irão lembrar como, um item bonitinho?! Nada disso, coloque sua mente para trabalhar, crie uma história para cada uma de suas criações, sempre reforçando a "realidade" do seu servidor, se é que você está fazendo para ele, e não para o Tibia Global, é claro. Não conhece um certo material? Você tem uma ferramenta "mágica" chamada internet. Não custa nada pesquisar em um site de imagens, ou em uma seção de sprites, uma galeria ou qualquer coisa que mostre esses efeitos, como fazê-los, etc. Sempre procure aprender, "antes dar a vara e a isca do que o peixe pescado, o peixe irá acabar, mais se você tiver a vara e a isca poderá pegar vários peixes.
Texturas
Bem...para a realidade dos sprites precisamos respeitar certos padrões...Por exemplo, você quer fazer um objeto metálico, vamos analisar o metal, objeto denso, com tonalidades um pouco escuras, porém reflete muita luz e brilha muito...Bem, vamos utilizar somente isso na explicação. Vamos supor que desejo fazer uma espada com lâmina metálica (clássica), mas não sei fazer metal, como é que fica?! Você vai fazer uma espada com lâmina de madeira?! Fala sério né !!! Aqui estaremos falando sobre texturas, aquilo que da a realidade do sprite, que difere ferro de bronze, bronze de prata, prata de ouro, e assim por diante. Um ponto muito importante aqui é a cor... Você NUNCA deve usar apenas uma tonalidade se quiser dar noção de algo...pois NADA tem apenas uma cor, pelo menos nada real. Mesmo que tenha a mesma cor, a tonalidade nunca será a mesma. O Outline também diz muito de sua textura, pêlos por exemplo, ele deve ter um pequeno contorno mais escuro para dar idéia de pelo... Se não seria uma figura plana sem mais nem menos. Uma dica: Evite outline totalmente preto, não fica legal...
Enfim, vamos começar, aqui darei exemplos de texturas e explicarei como fazer.
Água...esta água que fiz na verdade está em 3d, mas isso não irá interferir no aprendizado, já que fiz apenas para exemplo. Aqui usei o famoso "azul piscina", um azul bem claro com um leve toque de verde... Isso fiz no photoshop, para reproduzir esse efeito é bem simples. Basta preencher a imagem com a cor e em certos pontos (de sua escolha) colocar a mesma cor porém em tonalidade mais clara. No caso, eu clareei as pontas. Depois, use a ferramenta desfoque e passe em nas extremidades. Feito isso adicione o filtro "Vidro" e configure da maneira que preferir...Bacana e fácil não? Para sprites na verdade não é recomendado isso, pois na hora de mapear não vai se encaixar...você deve fazer manualmente, mas o "esquema" é o mesmo. Use-a como base. A água tem bastantes tonalidades, já que ela reflete muita luz...preste a atenção nisso, crie pequenas ondulações para dar efeito de movimento basta alterná-las. Na hora de mapear, provavelmente isso não vai funcionar...mas tem um truque fácil e básico, na hora de fazer a água que liga com essa faça com ondulações parecidas, mas que se liguem com essas.
Desculpe pela simplicidade do piso, fiz apenas para o tutorial. Este é um piso de terra, e é bem fácil de fazer(pelo menos do modo que fiz, haha). Fiz no photoshop, para fazê-lo basta preencher a imagem com um marrom, não muito saturado e não muito escuro. Feito isso, encha a imagem de pequenos pixels com uma cor ainda marrom, porém mais escura, preencha bastante, simulando o efeito do Spray do paint, se não me engano deve ter inclusive uma ferramenta que exerça essa função. Concluída essa etapa use o filtro "Bastão de Borrar" e configure do jeito que ficar melhor. Após fazer isso basta clarear e escurecer certos pontos (:. Repetindo: Não é aconselhável na hora de mapear, mas tem um truque que uso para driblar isso, e vou compartilhar. Nas extremidades basta você desfocar UM POUCO e escurecer UM POUCO, nada de exagerado, eles vão se unir que uma beleza . Mas lembre-se nada de exagerado. Para reproduzir o efeito manualmente basta prestar a atenção nos "grãos" da terra, em 32x32 é fácil, e não exagerar na saturação, e sem muito brilho.
O famoso Swamp. Na minha opinião o mais fácil, principalmente em 32x32, este não fiz em 32x32 para você ver melhor. Neste basta você colorir com um verde claro(nada de exagerado seu emo) e depois simular o efeito do spray do paint. E colocar o filtro "Papel de Carta". Simples não?! E não ficou feio
. Para juntar na hora de mappear não repita o truque anterior. Nos lados escureça certos pontos, e clareie outros, na hora de fazer a parte que você irá unir a essa faça a mesma coisa, juntando partes claras com claras e escuras com escuras (^.-). Para fazer "manualmente", no paint pinte com um verde claro (agora sim seu emo) e adicione "relevos" formando ondulações, depois deixe as ondulações mais escuras. Saturação elevada, porém nada de exagerado, anda que deixe desagradável. Seria bom também adicionar "borrifos", observe esse sprite tibiano, são pequenas "erupções" que ocorrem neste terreno, devido a acidez descomunal.
Lava. Para começar, deixe a tinta selecionada preta. Feito isso, coloque o filtro nuvens, depois nuvens por diferença, até chegar a um ponto agradável. Feito isso adicione o filtro Plastificação, configure como achar melhor. Feito isso vá até Imagem>Ajustes>Equilíbrio de Cores. Deixe sempre com tonalidades perto do vermelho e do amarelo, em todas, que o tom escolhido será o laranja. Não exagere nem em um, nem em outro, pois o resultado poderá ser não satisfatório. Para fazer manualmente, no paint (recomendado) basta você cobrir a área com um laranja bem amarelado, e fazer ondulações, formando "rios", feito isso pinte esses rios inteiramente de preto. O que sobrar deixe laranja, mas clareie nas partes mais expostas, deixando ainda mais amarelado. As partes pretas não devem ser inteiramente pretas, coloque um laranja escuro para variar. Tem outro jeito...(melhor), se você fizer tudo no paint, os relevos e tal, depois poderá plastificar no photoshop pra dar o efeito bacana, e colorir com mais precisão.
Bacana este piso não?! E é muuuito fácil de fazer...( muito mesmo). Repita os passos do piso de terra, porém faça um pouco mais claro. Feito isso adicione o filtro "Ladrilhos de Mosaico" e configure como quiser. Muito fácil, e o resultado é bonito, e fácil de unir um a outro. Para não quebrar a cabeça pensando em outros tipos de pisos, basta você fazer os mesmos passos mas com cores diferentes, o resultado sempre é satisfatório se feito direito(vagabundo). Mas um erro pode ser fatal...clarear demais certas partes, isso entregará demais o efeito spray. Deixe com um bom contraste e com um brilho inferior, já que isso cai melhor dentro de casas (^.-).
Legais não? parecem reais essas esferas de ouro prata e bronze, respectivamente. E são tão fáceis de fazer que da vontade de fazer um monte '-'. Bem... comece fazendo uma esfera, nessa esfera pinte com a cor desejada, feito isso clareie a superfície superior esquerda, e escureça o meio e a inferior direita. Depois clareie apenas uma pontinha do lado inferior direito, (nada de tão pequeno também). Feito isso use o efeito "Sumi-e", e num passe de mágica você terá sua bela esfera( que sexy). DICA: De um retoque na saturação que pode ficar mais bacana. DETALHE:Repare que a borda de todas ficaram "serrilhadas" isso é um mau exemplo, não foi usado o anti-aliasing porque deixei para vocês verem o que a falta dele pode ocasionar (mentira é preguiça mesmo).
Concluímos essa parte, para os interessados em texturas, comentem no tópico o que desejam, como, etc, pois brevemente estarei adicionando um tópico virado somente para texturas. Por mais que muitos não achem, este é um ponto muito importante para iniciantes...De onde você irá se inspirar? Do nada é um pouco difícil, por isso estou dando atenção a essa área. Não deixe de conferir a Galeria, lá você poderá observar os mais experientes e aprender como se faz tal coisa. Uso o adobe photoshop CS 3, estarei postando o Download brevemente, farei um tópico exclusivo para isso e explicando suas funções, mas o que usei aqui se aplica para outras versões do software também.
Reflexão
O que muitos acham difícil pode se tornar fácil se você entender seus conceitos básicos. Para começar, a perspectiva Tibiana é de 45 graus. Não entendeu? Vou simplificar. A "câmera" te enxerga do da parte inferior direita, tudo é visto neste ponto de visão, e o Sol, ou iluminação, vem da parte superior esquerda, assim a parte inferior direita sendo mais escura. Mas o que isso tem a vez com reflexão? TUDO. Reflexão nada mais é do que a devolução da luz. Só enxergamos em virtude da luz. Um exemplo: a luz veio da parte superior esquerda, no meio de seu item tem um ruby (item com grande capacidade refletora), ao invés da parte de baixo ficar mais escura porque ele está na frente, ela irá clarear por dois motivos, um porque ele não é opaco, tem um nível elevado de transparência, e porque ele reflete muita luz, tornando tudo ao seu redor mais claro. Basicamente tome o planeta Terra como base, a parte que não é iluminada pelo Sol, será mais escura, e essa parte será noite, a parte iluminada será clara, e será dia, já as estrelas, nada mais são do que um reflexo, elas não tem luz própria. Pense nas estrelas como os rubys ou outro item refletor.
Exemplos de materiais que refletem luz: Jóias, metais, água, vidro, lâminas, objetos cristalizados, madeira com verniz, certos plásticos, lentes, líquidos em geral, objetos com certo grau de transparência e etc.
Exemplos de materiais que não refletem luz: Madeira, panos, pele, couro, terra, cimento, telhas, borracha, papel, e vários outros objetos opacos.
Os outfits também seguem o padrão da perspectiva 45 graus (e como). A parte superior esquerda sempre vai ser a mais clara. As partes que mais serão iluminadas são a cabeça e os ombros, isso não é valido caso você adicione ao outfit um objeto que mude isso, por exemplo um cajado com uma jóia na extremidade, será muito mais claro que a cabeça ou os ombros. Uma linha do olho esquerdo até o fim do pé esquerdo fará com que você perceba melhor essa perspectiva. A cabeça é OVAL, não é redonda, sendo redonda você praticamente estaria fazendo o personagem olhando pra cima (procurando o que? o.O). Tente caprichar o máximo possível na simetria, pois não somos diferentes em cada lado (ou somos? =x). Nas partes mais escuras NUNCA preencha com preto, pelo menos não o preto mais escuro, isso não vai ficar nada legal, faça um sombreamento leve. Preste a atenção nos olhos, é um detalhe pouco observado, mas importante, faça olhos adequados ao outfit. Detalhe: com a perspectiva correta você não irá ver totalmente o ombro direito do personagem, tudo o que citei a cima serve apenas para Humanos, exceto algumas partes, não tente reproduzir tudo se for fazer outro tipo de criatura.
Evite deixar o sprite "serrilhado", use o AA com freqüência, isso irá lhe garantir um resultado melhor. Não faça sombras muito intensas sem necessidade, o mesmo digo para efeitos de luz, exceto para metais e jóias, pois esses refletem MUITA luz. Sempre tenha em mente o que você esta fazendo, não fuja demais da realidade, cai entre nós...uma espada de plástico ia ficar um pouco(muito) ridícula. Outlines sempre caprichados, e nunca faça outline duplo, fica ridículo. Em laminas, de uma boa clareada na parte cortante, dará uma sensação muito bacana. Nunca copie, isso além de ser noobice, é ilegal. Se inspirar em sprites dos outros não tem nada de mais, já copiar...não é nada legal. Tenha isso em mente.
Se você for iniciante, poderá não entender algumas palavras que eu disse durante o tutorial, irei revê-las e explicá-las o que cada uma significa (as menos conhecidas)
Outfit:São as "roupas" do personagem, por exemplo, o famoso Citizen é um outfit, já Mage é outro.
Photoshop: A ferramenta mais conceituada do mundo em edição de imagens.
AA/Anti-Aliasing: Efeito que suaviza as cores, "desfocando-a" um pouco, tirando sua atenção.
Contraste: Destacar uma cor de outra.
Outline: As linhas que delimitam a sprite.
Perspectiva: O ponto de visão em que a imagem é vista.
Pixel: Cada "quadrado" da imagem, são minúsculos, em Sprites, utilizamos 32x32.
Sombreamento: Efeito de causar sombra, ou seja...tornar certa parte mais escura.
Textura: Aquilo que você vê em certa matéria que a difere de outras.
É isso ai galera...até a próxima.
DOWNLOADS
Adobe Photoshop CS 3 (parte 1):
Adobe Photoshop CS 3 (parte 2):
Adobe Photoshop CS 3 (parte 3):
Antes que alguém não diga que não avisei, ele vem com um vírus, remova-o, não sei se é nocivo, mas não me fez mau algum x.x, caso ache que não é confiável, não baixe, SCAN por sua conta.
Sprite Editor:
Orbs: