Ir para conteúdo

antharaz

Membro
  • Registro em

  • Última visita

Tudo que antharaz postou

  1. antharaz postou uma resposta no tópico em Playground (Off-topic)
    @all pow, vamo para de floodar D: pls @topic eu fecho a propaganda do pokemon em cima da onservers sem abrir nenhuma Bem que te falei para parar com o fap fap fap neah ashuasuhashuas
  2. Autor: Antharaz Testado em: TFS 0.3.6 Database: mysql Descrição: Faz com que todos premmys e os que ainda se tornarão fiquem com [v] antes do nome. Quando a premmy acaba, o [v] some assim que ele relogar. Vá em data/creaturescripts/scripts, abra o login.lua e coloque o código abaixo antes do último return true: local id,nm,qry,nqry = getPlayerAccountId(cid),string.find (getCreatureName(cid), "(%[+)%v*(%]+)%s*"),"","" if isPremium(cid) and nm == nil then qry = "UPDATE `theforgottenserver`.`players` SET `name` = '[v] "..getCreatureName(cid).."' WHERE `players`.`account_id`= "..id..";" nqry = "INSERT INTO `theforgottenserver`.`player_namelocks` (`player_id`, `name`, `new_name`, `date`) VALUES ("..getPlayerGUID(cid)..","..getCreatureName(cid)..", [v] "..getCreatureName(cid)..", 0);" elseif (not isPremium(cid)) and nm ~= nil then local nnome = string.gsub(getCreatureName(cid), "(%[+)%v*(%]+)%s*", "") qry = "UPDATE `theforgottenserver`.`players` SET `name` = '"..nnome.."' WHERE `players`.`account_id`= "..id..";" nqry = "DELETE FROM `theforgottenserver`.`player_namelocks` WHERE `player_namelocks`.`player_id` = "..getPlayerGUID(cid)..";" end if qry ~= "" then db.executeQuery(qry) db.executeQuery(nqry) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você será desconectado e será obrigado a colocar o login e senha novamente.") addEvent(doRemoveThing,3000,cid) end
  3. Primeiramente quero deixar bem claro que é um script BÁSICO -.-' então nem ponham crédito se forem postar em outros lugares ¬¬ Script alavanca.lua: VERMELHO = Cordenadas do item a ser removido. ROSA = stackpos do item a ser removido AZUL = Cordenadas do item a ser criado. ROXO CLARO? = Quantidade de itens a serem criados. Ex: 45 meat. CIANO = stackpos do item a ser criado VERDE ESCURO = variável com as cordenadas do item a ser removido VERDE CLARO = ID do item a ser cirado (no caso o vagaba do Alissow não especificou) LARANJA = variável com as cordenadas do item a ser criado. AMARELO = Quantidade dos itens a serem removidos. Ex: se for car, remove 40 unidades. ROXO = Mensagem que aparecerá para o player e é também uma indireta para o indivíduo que fez o pedido Coloque o arquivo alavanca.lua na pasta data/actions/scripts e abra o arquivo actions.xml da pasta data/action. Adicione a este arquivo esta linha, logo depois de <actions>: MARROM = nome do arquivo que você colocou em data/actions/scripts ROSA ESTRANHO O.O = uniqueid que você colocará na alavanca do seu ot usando o map editor. Importante: não use um uniqueid já usado no seu server... Obs: malz pelo "carnaval" sahuashu
  4. antharaz postou uma resposta no tópico em Tutoriais sobre Programação
    Tecnicamente, um hook é somente uma outra subrotina ("hook procedure") que "fica no caminho" do mecanismo normal de tratamento de mensagens do Windows. A hook procedure pode ser instalada no sistema e assim ela captura certas mensagens do Windows ANTES delas serem enviadas para as devidas rotinas de tratamento. Windows contém vários tipos diferentes de hooks; cada tipo fornece acesso a um aspecto diferente do mecanismo de tratamento de mensagens do Windows. As constantes que identificam os tipos de hooks estão em Windows.pas. Abaixo temos alguns destes tipos, com uma breve descrição: WH_KEYBOARD: instala uma hook procedure que monitora as mensagens do teclado. Utilizaremos este em nosso programa. WH_MOUSE: instala uma hook procedure que monitora mensagens do mouse. WH_CBT: instala uma hook procedure que recebe notificações úteis para uma aplicação de treinamento baseada em computador (CBT). WH_JOURNALRECORD: instala uma hook procedure que grava as mensagens de entrada postadas para a fila de mensagens de sistema. Este hook é útil para a gravação de macros. WH_JOURNALPLAYBACK: instala uma hook procedure que envia mensagens previamente gravadas pela WH_JOURNALRECORD hook procedure. Devido a muitos programas poderem instalar um hook no sistema ao mesmo tempo, o Windows mantém internamente um "hook chain", que é apenas uma lista de ponteiros para as hook procedures que os programas instalaram. Quando uma mensagem acontece no sistema, o Windows primeiro passa por cada uma das procedures no hook chain, uma depois da outra. Então, caso a mensagem não tenha sido bloqueada por qualquer uma das hook procedures, o Windows encaminha a mensagem para a janela adequada. Mais um assunto antes de ir para a próxima seção: hooks podem ser classificados de uma outra forma. Existem os hooks de sistema (globais) que recebem mensagens de todos os threads do sistema, e os hooks específicos de thread (locais), que recebem mensagens apenas de um determinado thread. Devido a uma hook procedure global poder ser chamada no contexto de qualquer aplicação (que capturam mensagens de todas as aplicações), elas devem estar localizadas em uma DLL (Dynamic Link Library). Esta restrição não se aplica aos hooks específicos de threads, onde a hook procedure pode estar em qualquer parte da aplicaçao que controla o thread a ser interceptado. Neste artigo nós trataremos somente com hooks globais. Instalando uma WH_KEYBOARD hook procedure no hook chain A API de hooks contém 3 importantíssimas funções: SetWindowsHookEx (que instala uma hook procedure), UnhookWindowsHookEx (que desinstala a hook procedure) e CallNextHookEx (que chama a próxima hook procedure no hook chain). Os parâmetros destas funções são os seguintes (em windows.pas): function SetWindowsHookEx(idHook: Integer; lpfn: TFNHookProc; hmod: HINST; dwThreadId: DWORD): HHOOK; stdcall; "idHook": tipo do hook a ser instalado (p.e. WH_KEYBOARD); "lpfn" : aponta para a hook procedure para onde a mensagem será enviada; "hmod" : handle da DLL que instala a hook, normalmente hInstance(para hooks globais) ou 0 para hooks locais; "HINST" : identificador do thread ao qual o hook estará associado. Se 0 a hook procedure é associada com todos os threads. Retorna um valor usado para identificar o hook. function UnhookWindowsHookEx(hhk: HHOOK): BOOL; stdcall; "hhk": identifica o hook a ser desinstalado. Retorna True se ocorreu com sucesso ou False se falhou. function CallNextHookEx(hhk: HHOOK; nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; "hhk": identificador do hook corrente; "nCode", "wParam", "lParam": parâmetros a serem enviados para a próxima hook procedure no hook chain. Retorna o valor retorna pela próxima hook procedure do chain. Nós veremos adiante o que isto significa. A hook procedure A hook procedure para o teclado tem o seguinte formato: function HookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; "nCode": = HC_ACTION - os parâmetros wParam e lParam contém informações sobre as mensagens das teclas pressionadas = HC_NOREMOVE - os parâmetros wParam e lParam contêm informações sobre as mensagens das teclas pressionadas mas a mensagem não foi removida da fila de mensagens (uma aplicação chamou a função PeekMessage especificando o flag PM_NOREMOVE). "wParam": especifica o código virtual da tecla que gerou a mensagem(p.e. VK_F9 para a tecla de função F9) "lParam": especifica informações adicionais (do tipo contador de repetição, scan code ...); não utilizado em nosso programa; veja Win32SDK para maiores detalhes; HookProc deve retornar um valor não zerado para evitar que o Windows passe a mensagem para os demais hooks da cadeia, ou para a window procedure alvo, ou zero para deixar que o Windows passe a mensagem para a window procedure alvo. Exemplo Este exemplo cria uma hook global para o teclado e quando uma certa combinação de teclas ocorrem ele executará alguma coisa (veja abaixo): WinKey + F9: mostra a janela principal se ela estiver oculta; WinKey + F10: ejeta a unidade de CDROM; WinKey + F12: encerra a aplicação. A comunicação entre a DLL que implementa a hook e a aplicação é feita com a função SendMessage da API, que envia uma HOOK_MSG (definida em constants.inc) para a aplicação principal, com os comandos (SHOW, EJECT, QUIT) em wParam (veja abaixo). Como não querermos ser incomodados com a janela sendo mostrada a todo instante, quando clica-se o botão de minimizar a janela é ocultada (até da lista de tarefas), mas poderá ser visualizada com a combinação WinKey+F9. Eu somente mostrarei aqui as partes mais importantes da aplicação: 1. HookDll.dpr function KeyboardProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; var Handled: Boolean; KeyState: TKeyboardState; Han: HWND; function WinKeyPressed: boolean; begin Result := (KeyState[VK_LWIN] and $80 <> 0) or (KeyState[VK_RWIN] and $80 <> 0); end; begin Handled := False; Result := 1; if nCode = HC_ACTION then begin GetKeyboardState(KeyState); Han:=FindWindow('TForm1',APP_CAPTION); if (IsWindow(Han)) and (KeyState[wParam] and $80 <> 0) and WinKeyPressed then begin Handled := True; case wParam of VK_F9: SendMessage(Han, HOOK_MSG, APP_SHOW, 0); VK_F10: SendMessage(Han, HOOK_MSG, EJECT_CDROM, 0); VK_F12: SendMessage(Han, HOOK_MSG, APP_QUIT, 0); else Handled := False; end; end; end; if not Handled then Result := CallNextHookEx(hhk, nCode, wParam, lParam); end; Na entrada da hook procedure nós testamos se o flag HC_ACTION em nCode (assim sabemos que tivemos o pressionamento de uma tecla), então salvamos em KeyState o estado (se foi pressionado ou não, CAPSLOCK ligado, etc.) de todas as teclas virtuais utilizando GetKeyboardState. Nós também procuramos pelo handle da janela principal da aplicação para a qual serão enviados os comandos (APP_SHOW, EJECT_CDROM, APP_QUIT). Se a janela for encontrada (IsWindow(han)) e tiver um mensagem de tecla pressionada, então enviamos um comando para a janela principal de acordo com o pressionamento. Se não foi possível tratar a mensagem (Handled=false) então os parâmetros são passados para a próxima hook na cadeia. 2. Hooks.Dpr & Unit1.pas A principal função aqui é HOOK_MSG_PROC que recebe os comandos enviados da DLL: type TForm1=class(TForm) ... procedure HOOK_MSG_PROC(var Msg: TMessage); message HOOK_MSG; ... end; ... procedure TForm1.HOOK_MSG_PROC(var Msg: TMessage); begin case Msg.WParam of APP_SHOW: begin Application.ShowMainForm := True; Visible:=True; end; EJECT_CDROM: mciSendString('set CDAudio door open', nil, 0, 0); APP_QUIT: Close; end; end; O recurso de "Ocultar na minimização" é executado pela especialização do tratamento da mensagem WM_SYSCOMMAND que é enviada pelo Windows quando um comando de sistema (close, minimize, maximize) ocorre. Então a janela será oculta se receber um comando SC_MINIMIZE: procedure TForm1.OnMinimize(var Msg: TMessage); begin if Msg.WParam = SC_MINIMIZE then begin if not IsHookInstalled then begin ShowMessage('Install the hook first or you''ll'#13#10 + 'not be able to access the program'); Exit; end; Application.ShowMainForm := False; Visible := False; end else Inherited; end; Para esconder o programa da lista de tarefas utilizamos: function RegisterServiceProcess(dwProcessID, dwType: integer):integer; stdcall; external 'KERNEL32.DLL'; NOTA: A técnica de ocultamento acima funciona somente no Windows 9x. É claro que isto é exemplo bem simples de aplicação de hooks, mas as possibilidades são enormes. Um pequeno programa espião, talvez! Créditos: Adilson Vahldick
  5. Bem... Primeiro coloque procedure WmHotKey(var Msg:TMessage); message WM_HOTKEY; nos types da sua aplicação. Agora vamos colocar as funções da procedure, coloque: procedure TForm1.WmHotKey(var Msg:TMessage); begin Case Msg.WParam of 1 : Button1Click(Button1); // voc&#234; coloca o que acontecer&#225; se forem pressionadas as teclas de atalho. No caso, simula o clique no bot&#227;o 1 daquele form... end; end; Declare agora, no oncreate do form: RegisterHotKey(Handle, 1, MOD_CONTROL, $49); // registra as teclas do atalho. No caso s&#227;o ctrl(representado por MOD_CONTROL) e a tecla I(representada por $ e a representa&#231;&#227;o hexa da tecla: 49) Caso você queira por mais teclas no mesmo atalho é só colocar mais uma vírgula e o $ junto da representação hexa da tecla. Exemplo colocando a tecla N junto do código acima: RegisterHotKey(Handle, 1, MOD_CONTROL, $49, $4e); Agora, como você colocou para registrar quando criar, você tem que por para disregistrar quando finalizar o programa, então coloque no ondestroy do form: UnregisterHotKey(Handle, 1); Atenção: o código está bem explicado até, mas se você não entendeu pesquise e não poste aqui falando que está mal explicado e talz... o que eu usei foi o básico... se não entendeu é porque deve voltar aos estudos...
  6. Lógico... se quiser ignorar os créditos tbm pode :x mas só pro crystal...
  7. Nome: Raids automáticos Autor: Antharaz Feito para: TFS 0.4 Descrição: Os raids acontecerão nos dias e horas programados por você neste script. Instalação Abra o arquivo globalevents.xml localizado em data/globalevents e coloque antes de </globalevents>: <globalevent name="raidautomatico" interval="1000" event="script" value="raidautomatico.lua"/> Ficaria assim se não tivesse outros globalevents: <?xml version="1.0" encoding="UTF-8"?> <globalevents> <globalevent name="raidautomatico" interval="1000" event="script" value="raidautomatico.lua"/> </globalevents> Agora crie o arquivo raidautomatico.lua em data/globalevents/scripts e coloque isto: local raid={{["nome"]="RatRaid",["dia_semana_ou_mes"]="semana",["dia"]={2,3,4,5,6},["hora"]=8,["minuto"]=0}, {["nome"]="Orshabaal",["dia_semana_ou_mes"]="mes",["dia"]={2,14,26},["hora"]=15,["minuto"]=0} } function onThink(interval) local time = os.date("*t") for _,a in pairs(raid) do if ((a["dia_semana_ou_mes"] == "semana" and isInArray(time.wday,a["dia"])) or (a["dia_semana_ou_mes"] == "mes" and isInArray(time.day,a["dia"]))) and a["hora"] == time.hour and a["minuto"] == time.min then executeRaid(a["nome"]) break end end return true end Configuração A configuração ocorre apenas nesta parte: local raid={{["nome"]="RatRaid",["dia_semana_ou_mes"]="semana",["dia"]={2,3,4,5,6},["hora"]=8,["minuto"]=0}, {["nome"]="Orshabaal",["dia_semana_ou_mes"]="mes",["dia"]={2,14,26},["hora"]=15,["minuto"]=0} } É bem simples entender como funciona: ["nome"] > Coloca o nome da raid já existente em data/raids/raids.xml. ["dia_semana_ou_mes"] > Coloca se está especificando os dias da semana ou do mês. ["dia"] > Coloca os dias da semana em números, começando pelo domingo representado por 1, segunda por 2 e assim por diante até o sábado representado por 7. ["hora"] > Coloca a hora que irá ocorrer. ["minuto"] > Coloca o minuto que irá ocorrer. No caso há 2 exemplos, um para ocorrer durante alguns dias do mês e outro para ocorrer durante alguns dias de toda semana. Caso queria adicionar mais elementos para mais raids aconselho que estude tables, não pretendo entrar em detalhes aqui.
  8. ótima idéia... vamos aproveitar e formar mais otscripters que não sabem a essencia D: pelamor né .-. isso só vai deixar o scripter mal acostumado e não vai saber detectar o erro realmente, já usei isso uma vez e detestei... por isso só faço os scripts no bloco de notas "/ mesmo assim, sei que a sua intenção foi a melhor possível e agradeço por você ter postado.

Informação Importante

Confirmação de Termo