Ir para conteúdo

dindalluiz

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    dindalluiz deu reputação a mee em Mega Evolution System (PxG)   
    Oi. 
    Antes de tudo, este sistema foi escrito para o servidor PDA by Slicer, versão 1.9. A adaptação para outras bases pode ser bem simples, dependendo do seu conhecimento em Lua (que na verdade nem precisa ser grande).
    Resolvi escrever este simples sistema porque me deu um certo desgosto ver vários servidores onde a mega evolução é literalmente uma evolução (inclusive o que estive jogando, onde alguns jogadores também concordaram com minha opinião). Quero dizer, o pokémon fica transformado direto, para sempre, forever, algo que contraria a ideia original.
    Optei por fazer o sistema igual (ou semelhante, já que me baseei apenas nas informações disponíveis no Blog PxG, que aliás são poucas) ao da PokeXGames. Mais futuramente, no entanto, posso fazer uma outra versão voltada a ideia de uma mega evolução temporária.
    Para quem não conhece o sistema, bem, estou com preguiça de explicar, logo recomendo acessar este link. A diferença é que a pedra (mega stone) não ocupa o espaço de um Held Item tier Y (visto que não são todos os servidores que possuem este sistema).
    O sistema, como poderão notar, possui muitos detalhes. O motivo é que tenho a tendência de deixar a configuração o menor possível. Ou seja, basta configurar o efeito no código da spell e a tabela das mega evoluções.
    Nossa, que textão.
     
    TL;DR: Igual ao sistema da PxG; PDA; muitos detalhes mas pouquíssima configuração.
    data/lib:
    cooldown bar.lua:
    Troque o código da função getNewMoveTable(table, n) por este:
    function getNewMoveTable(table, n) if table == nil then return false end local moves = {table.move1, table.move2, table.move3, table.move4, table.move5, table.move6, table.move7, table.move8, table.move9, table.move10, table.move11, table.move12} local returnValue = moves if n then returnValue = moves[n] end return returnValue end No código da função doUpdateMoves(cid), troque o segundo:
    table.insert(ret, "n/n,") Por:
    local mEvolve if not getCreatureName(summon):find("Mega") and getItemAttribute(getPlayerSlotItem(cid, 8).uid, "megaStone") then if not isInArray(ret, "Mega Evolution,") then table.insert(ret, "Mega Evolution,") mEvolve = true end end if not mEvolve then table.insert(ret, "n/n,") end Depois, em pokemon moves.lua: Troque: min = getSpecialAttack(cid) * table.f * 0.1 --alterado v1.6 por:
    min = getSpecialAttack(cid) * (table and table.f or 0) * 0.1 --alterado v1.6 Código da spell:
    elseif spell == "Mega Evolution" then local effect = xxx --Efeito de mega evolução. if isSummon(cid) then local pid = getCreatureMaster(cid) if isPlayer(pid) then local ball = getPlayerSlotItem(pid, 8).uid if ball > 0 then local attr = getItemAttribute(ball, "megaStone") if attr and megaEvolutions[attr] then local oldPosition, oldLookdir = getThingPos(cid), getCreatureLookDir(cid) doItemSetAttribute(ball, "poke", megaEvolutions[attr][2]) doSendMagicEffect(getThingPos(cid), effect) doRemoveCreature(cid) doSummonMonster(pid, megaEvolutions[attr][2]) local newPoke = getCreatureSummons(pid)[1] doTeleportThing(newPoke, oldPosition, false) doCreatureSetLookDir(newPoke, oldLookdir) adjustStatus(newPoke, ball, true, false) if useKpdoDlls then addEvent(doUpdateMoves, 5, pid) end end end end end Depois, em configuration.lua:
    megaEvolutions = { --[itemid] = {"poke_name", "mega_evolution"}, [11638] = {"Charizard", "Mega Charizard X"}, [11639] = {"Charizard", "Mega Charizard Y"}, } Agora, em data/actions/scripts, código da mega stone:
    function onUse(cid, item) local mEvolution, ball = megaEvolutions[item.itemid], getPlayerSlotItem(cid, 8).uid if not mEvolution then return doPlayerSendCancel(cid, "Sorry, this isn't a mega stone.") elseif ball < 1 then return doPlayerSendCancel(cid, "Put a pokeball in the pokeball slot.") elseif #getCreatureSummons(cid) > 0 then return doPlayerSendCancel(cid, "Return your pokemon.") elseif getItemAttribute(ball, "poke") ~= mEvolution[1] then return doPlayerSendCancel(cid, "Put a pokeball with a(n) "..mEvolution[1].." in the pokeball slot.") elseif getItemAttribute(ball, "megaStone") then return doPlayerSendCancel(cid, "Your pokemon is already holding a mega stone.") end doItemSetAttribute(ball, "megaStone", item.itemid) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Now your "..getItemAttribute(ball, "poke").." is holding a(n) "..getItemNameById(item.itemid)..".") doRemoveItem(item.uid) return true end Depois, em goback.lua: Abaixo de: if not pokes[pokemon] then return true end coloque:
    if pokemon:find("Mega") then local normalPoke = megaEvolutions[getItemAttribute(item.uid, "megaStone")][1] if normalPoke then doItemSetAttribute(item.uid, "poke", normalPoke) pokemon = normalPoke end end Depois, em data/creaturescripts/scripts, look.lua: Abaixo de: local boost = getItemAttribute(thing.uid, "boost") or 0 coloque:
    local extraInfo, megaStone = "", getItemAttribute(thing.uid, "megaStone") if megaStone then extraInfo = getItemNameById(megaStone) if pokename:find("Mega") then pokename = megaEvolutions[megaStone][1] end end Depois, acima de:
    doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str)) coloque:
    if extraInfo ~= "" then table.insert(str, "\nIt's holding a(n) "..extraInfo..".") end Já em data/talkactions/scripts, move1.lua: Troque:    if not move then         doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your pokemon doesn't recognize this move.")         return true     end por:
    if not move then local isMega = getItemAttribute(getPlayerSlotItem(cid, 8).uid, "megaStone") if not isMega or name:find("Mega") then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your pokemon doesn't recognize this move.") return true end local moveTable, index = getNewMoveTable(movestable[name]), 0 for i = 1, 12 do if not moveTable[i] then index = i break end end if tonumber(it) ~= index then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your pokemon doesn't recognize this move.") return true end local needCds = true --Coloque false se o pokémon puder mega evoluir mesmo com spells em cooldown. if needCds then for i = 1, 12 do if getCD(getPlayerSlotItem(cid, 8).uid, "move"..i) > 0 then return doPlayerSendCancel(cid, "To mega evolve, all the spells of your pokemon need to be ready.") end end end move = {name = "Mega Evolution", level = 0, cd = 0, dist = 1, target = 0, f = 0, t = "?"} end E troque:
    doCreatureSay(cid, ""..getPokeName(mypoke)..", "..msgs[math.random(#msgs)]..""..move.name.."!", TALKTYPE_SAY) por:
    local spellMessage = msgs[math.random(#msgs)]..""..move.name.."!" if move.name == "Mega Evolution" then spellMessage = "Mega Evolve!" end doCreatureSay(cid, getPokeName(mypoke)..", "..spellMessage, TALKTYPE_SAY) Se quiser que o "Mega" não apareça no nome do pokémon, vá em data/lib, level system.lua: Acima de: if getItemAttribute(item, "nick") then nick = getItemAttribute(item, "nick") end coloque:
    if nick:find("Mega") then nick = nick:match("Mega (.*)") if not pokes[nick] then nick = nick:explode(" ")[1] end end E, caso o seu servidor possua pokémons evoluídos permanentemente na forma mega, em data/actions/scripts, goback.lua: Troque: if pokemon:find("Mega") then local normalPoke = megaEvolutions[getItemAttribute(item.uid, "megaStone")][1] if normalPoke then doItemSetAttribute(item.uid, "poke", normalPoke) pokemon = normalPoke end end por:
    if pokemon:find("Mega") then local normalPoke = megaEvolutions[getItemAttribute(item.uid, "megaStone")][1] if not normalPoke then local megaStone for itemid, table in pairs(megaEvolutions) do if table[2] == pokemon then megaStone = itemid break end end if not megaStone then return doPlayerSendTextMessage(cid, 27, "Your pokemon is bugged. Please, talk to the administrator.") end doItemSetAttribute(item.uid, "megaStone", megaStone) normalPoke = megaEvolutions[megaStone][1] end doItemSetAttribute(item.uid, "poke", normalPoke) pokemon = normalPoke end Bem, é isso aí. Acho que não esqueci de nada. Até mais.   Obs¹:,esqueci uma informação específica no segundo passo de instalação do sistema (doUpdateMoves). Editado.
    Ah, editei novamente com uma correção para OTClient.
     
    Creditos:
    zipter98  (Pela criação)
    Eu (por divulgalo)
     
  2. Gostei
    dindalluiz recebeu reputação de juunioor em [PDA] Held Items Com Tiers   
    Gente, estou com todos os helds no meu servidor sem dar erro em nehum. O erro de vocês, provavelmente está na hora de colar o código, vocês estão comendo algum "end", ou colocando um "end" onde n devia. Posta o exp2.lua que eu posso ajudar
  3. Gostei
    dindalluiz deu reputação a Kimoszin em Criando um Mini-Bot no Delphi (Sem API)   
    Primeiramente vou comentar um pouco sobre esse magnifico programa que é o delphi,
    Para nos desenvolvermos um bot de tibia por exemplo, nos nao usamos o tibiaapi, mais sim muitas funções muitos codigos e muita outras coisas,
    Nao é nada extremamente facil, requer um pouco de estudo, mais tudo oque vc fizer vai estar ali para estudo. Entao eu falo para vcs quando nao tiverem nada pra fazer estudem um pouco sobre o delphi.
    Ok vamos ao bot
    O Bot é simples, treina seu magic level, tem um anti kick e come food,

    Visual, olhe como arrumei os meus componentes



    Componentes, vamos precisar de:


    1 TGroupBox 1 TButton 2 TLabeledEdit 2 TCheckBox 1 TCombobox 2 TLabel 4 TTimer Renomeando componentes, para renomear vc deve ir ate a propriedade name Button -> StartButton Timer1 -> CastSpell Timer2 -> Endereço Timer3 -> Kick Timer4 -> Food LabeledEdit1 -> Spell LabeledEdit2 -> Mana Arrumando Componentes, quando ja estiverem renomeados CastSpell.Enabled.False CastSpell.Interval.700 Kick.Enabled.False Kick.Interval.60000 Food.Enabled.False Food.Interval.30000 Combobox1.Style.csDropDownList Form1.Caption 'Escolha um Nome para o Bot' Variaveis Globais, declare embaixo do Form1 : TForm1 PH : THandle; PID, ThID: DWORD; H : THandle; Funções usadas, declare elas embaixo do {$R *.dfm}, //Função para escrever na janela do Tibia function say(mensagem: string):string; var h: HWND; letra: Integer; B: Byte; begin h := FindWindow(nil, 'tibia'); for letra := 1 to Length(mensagem) do begin B := Byte(mensagem[letra]); SendMessage(h, WM_CHAR, B, 0); end; SendMessage(h, WM_CHAR, 13, 0); end; //Função para ler endereço de memoria do Tibia function LerInt(Address: Integer): Integer; var value:integer; ler :dword; begin H := FindWindow(nil, 'Tibia'); ThID := GetWindowThreadProcessId(H, @PID); PH := OpenProcess(PROCESS_ALL_ACCESS,FALSE,PID); ReadProcessMemory(PH, Ptr(Address), @Value, 4, Ler); Result:=value; end; //Função para aperta uma determinada tecla na janela do Tibia function hotkey(x :string): string; var h: HWND; i : integer; begin if x ='F1' then i := 112 else if x ='F2' then i := 113 else if x ='F3' then i := 114 else if x ='F4' then i := 115 else if x ='F5' then i := 116 else if x ='F6' then i := 117 else if x ='F7' then i := 118 else if x ='F8' then i := 119 else if x ='F9' then i := 120 else if x ='F10' then i := 121 else if x ='F11' then i := 122 else if x ='F12' then i := 123; h := FindWindow(nil, 'Tibia'); // acha a janela do tibia SendMessage(h, WM_KEYdown, i, 0); //pressiona a tecla SendMessage(h, WM_KEYUP, i, 0); //solta tecla end; Depois de botar os componentes, renomea-los e declarar as funções, Vamos botar os devidos codigos nos respectivos componentes Lembrando que é tudo dentro do begin e end, se tiver Var vc deve excluir o begin, e adiciona-lo depois CastSpell if StrToInt(Label2.Caption) > (StrToInt(Mana.Text)) then say(Spell.text) // Se a mana do player for maior que a mana que foi digitada no component mana, entao vai falar a magia Endereço Label2.caption := IntToStr(Lerint($0081CE5C)); // Vai ler o endereço da mana do personagem e transforma em numero para o label2 Kick Var TibiaHandle : THandle; begin TibiaHandle:=FindWindow(nil,'Tibia'); // Pega a janela do Tibia SendMessage(TibiaHandle,WM_KEYDOWN,VK_CONTROL,1); // Pressiona o Ctrl SendMessage(TibiaHandle,WM_KEYDOWN,VK_UP,1); // Pressiona a tecla para cima SendMessage(TibiaHandle,WM_KEYUP,VK_UP,1); // Libera a tecla SendMessage(TibiaHandle,WM_KEYDOWN,VK_DOWN,1); // Pressiona a tecla para baixo SendMessage(TibiaHandle,WM_KEYUP,VK_DOWN,1); // Libera a tecla SendMessage(TibiaHandle,WM_KEYUP,VK_CONTROL,1); // Libera o Ctrl end; Food hotkey(Combobox1.Text) // Pressiona oque tiver no Texto do Combobox StartButton CastSpell.Enabled := not(CastSpell.Enabled); Food.Enabled := not(Food.Enabled); Kick.Enabled := not(Kick.Enabled); if Checkbox1.checked then Kick.Enabled := true else Kick.Enabled := false; if Checkbox2.checked then Food.Enabled := true else Food.Enabled := false; if (Spell.Text <> '') and (Mana.Text <> '') then CastSpell.Enabled := true else CastSpell.Enabled := false; if (Kick.Enabled) or (Food.Enabled) or (CastSpell.Enabled) then StartButton.Caption := 'Stop' else StartButton.Caption := 'Start';

    Bom pessoal sei que é simples, mais estou tentando animar o pessoal do forum para usar o Delphi,

    ps: Peguei as funções da sessao do delphi, entao esta tudo aqui
    Abraços a todos
  4. Negativo
    dindalluiz recebeu reputação de ViitinG em [PDA] Held Items Com Tiers   
    Pretende continuar? Posso te ajudar, recortei algumas sprites, logo recortarei todas, e ainda posso ajudar nos scripts, curto muito essa parada de held.

Informação Importante

Confirmação de Termo