Big_Z
-
Content Count
666 -
Joined
-
Last visited
-
Days Won
2
Reputation Activity
-
Big_Z reacted to Rodnia2 in Ascension - The Awakening | New Graphics Improvement | Opening on: 15.03.2024
WEBSITE - DISCORD
Experience the full potential of our latest enhancements with improved graphics and revamped gameplay. Seize the opportunity to immerse yourself in a gaming experience like never before!
-
Big_Z reacted to Rodnia2 in Ascension - The Awakening | New Graphics Improvement | Opening on: 15.03.2024
Maintenance 16.3.2023
Game version is now 1.0.1
News Updated Wiki guides. Since some of the information from Wiki is hold we are now doing a rework on our Wiki and also fixing some bugs where you can't see sometimes the upgrade items necessary. In the next patches we will continue to add new guides/translations and improvements here. Added Nephrite in Boss Scroll (Hard). Added White Gold Ore at Alchemist Shop. Fixes & Changes Updated Bravery Cape description. Itemshop from the ESC window will redirect you direcly to the Ascension itemshop. Fixed the issue with Beginner quests where you couldn't finish them. If you have the message that you need to kill 0, just kill it one more time and you will receive the reward. Fixed the bonuses from Pet Figaro. Fixed an issue at informations about Premium window in-game. Fixed a problem at Magic Soul Stone where instead of showing you that you advanced your skill level to P it said that you advanced it with only 1 level. Fixed the visual issue where it displayed the wrong bonuses of Pets with levels. Fixed a problem for some people that couldn't open the Pet Information window Fixed the guild logos. -------------------------------------------------------------------------------------
Maintenance 17.3.2023
Game version is now 1.0.2
News Added more stones in maps.
Fixes & Changes Changed at Beginner Quest line the Nephrite requirements to Death Reaper until we come with a new update which will block the experience until you complete a certain mission. Fixed message after you complete a Daily Mission from Chen. Fixed some problems at the Turkish translations bugs. Fixed that you couldn't enter at World Boss from Level 90. Fixed an issue with some Thunder Chest which should not be obtainable. Fixed a wrong text at the Bravery Cape when you don't have Yang. Fixed that you couldn't give roles to guild members. -------------------------------------------------------------------------------------
Maintenance 18.3.2023
Game version is now 1.0.3
News Added Metin Zones II in Fireland on Warp Ring. Added Metin Zones II in Ork Valley on Warp Ring. Added Metin Zones II in Desert on Warp Ring. Added all missions from Beginner Questline at Uriel. For those who accidentally deleted quests as inventory items Added Biologist Guide & Level 75-95 Guide to wiki. Added on Bravery Cape to show you how much yang it takes at each level.
Fixes & Changes Brutal Red Thief Worldboss will appear everyday at 10 AM (Server Time) instead of 9 AM, not to overlap with the other world bosses. Made Ignisarix/Frostblaze/Brutal Red Thief worldboss easier to defeat. Fixed a problem when selecting guild roles for Guild. The guild will receive a a big update this week. Lower Pearls at Dungeon Pass(Medium) from 15 to 12. Lower Ancient Coin at Dungeon Pass(Medium) from 50 to 45. Increase the chance to obtain pearls from Shells. Raise the cooldown for map2 Bosses from 5m to 15m. We chose in the first 3 days when players started to keep the cooldown low, but now that most players have advanced we will go back to 15m. Now you will have drop if you are level 90 at Cryptus/Sylvanus/Bone Dragon/Midas, if you have chance to spawn it from a Boss Scroll. Bloody Crystal mission from battlepass daily mission, has been removed. Now Soul Stones have a higher chance to drop at Stone of Murder(Lv. 70), Stone Tu-Young(Lv. 85) & Stone Jeon-Un(Lv. 90). Now Equipment Ticket have a higher chance to drop at Stone of Murder(Lv. 70), Stone Tu-Young(Lv. 85) & Stone Jeon-Un(Lv. 90) and Bosses from Sohan Mountain, Ork Valley, Fireland, Desert & Hwang Temple. Also now Bosses from dungeon will drop more Equipment Tickets. Fixed a problem at Talismans, they were dissappearing after expiring and they shouldn't. Fixed a problem atPet System when you evolved the pet the pet level was not displayed in the window. -------------------------------------------------------------------------------------
Maintenance 19.3.2023
Game version is now 1.0.4
News Added 75-95 level guide on Wiki. Added 95-120 level guide on Wiki. Added some translations in game client. Fixed some wrong texts at the Global Rankings. Added Metin Zones III & Metin Zones IV in Fireland on Warp Ring.
Fixes & Changes Updated Letters & Symbols Event rewards. Fixed the entrance level at World Boss on the Warp Ring. Updated Wiki Minimum Damage information for Cryptus, Razador, Nemere, Jotun & Shadow Tower. Improved the aspect of Kyanite Armors. Fixed Shaman attack from horse with Fan/Bell. Fixed some wrong texts at the Global Rankings. Increase Piece of Ancient Coin from Stone Tu-Young(Lv. 85) & Stone Jeon-Un(Lv. 90) and add a extra chance to obtain one more piece. Slightly increase chance to drop for Cooked Eel & Cooked Mackerel. Slightly increase chance to drop Energy Fragment and add a extra chance to obtain one more fragment. Increase chance to drop for Adv. Equipment Ticket from Beta Bosses, also for those mini-bosses in dungeons. Adv. Equipment Ticket now has been added in Chief Orc Chest,Dark Leader Chest,Yellow Tiger Ghost Chest,Nine Tails Chest,Spider Queen Chest,Giant Tortoise Chest,Fire King Chest . -
Big_Z reacted to Rodnia2 in Ascension - The Awakening | New Graphics Improvement | Opening on: 15.03.2024
Invite your friends: Earn Special Coins or Rodnia CoinsAs the headline announces, we've initiated a competition where each participant can earn Special Coins by inviting their friends and accomplishing an easy task. Log in to the site and you will have an invite friends button to the right of the user panel. Copy the referral link and offer it and invite your friends to play on Ascension. When players register on the referral link provided, they will have to complete a task of killing 100 bosses. Once this task is completed you will receive 50 SC, available for purchase in the Item-Shop. With 4 valid invitations, you will automatically be entered in a special draw where you will have the best chance to win 400 RC (10 draws | 10 winners).
If you can't find the button to invite friends, we leave you a useful link, you must be logged in to the site: Invite your Friends
The GiveAway drawing of 400 RC is scheduled for 07.04.2024 and will be broadcast live on TikTok, offering viewers a good experience as winners are announced in real-time.
https://i.gyazo.com/af7c816198c5739bcc68565e07bbaf49.mp4 -
Big_Z reacted to p0w3r0ff in Servidor Aberto! Vamos Jogar Palworld!
Servidor Aberto! Vamos Jogar Palworld!
Ei pessoal! Temos uma grande notícia: o nosso servidor está oficialmente aberto e pronto para ação!
Venham se juntar a nós para muita diversão e aventura.
Ah, e se quiserem entrar de cabeça, podem nos encontrar no seguinte IP:
188.81.238.61:8211
- Com esta versão, é possível jogar em servidores online, mesmo que sejam oficiais.
-
Big_Z reacted to p0w3r0ff in Atualização Downloads: Problema de Permissões Corrigido!
Caros membros da comunidade,
Gostaríamos de informar que o nosso sistema de downloads estava com problemas de
permissões em algumas categorias de leaks, conforme foi reportado pelo nosso membro Fabio.
É com prazer que comunicamos que a questão foi identificada e corrigida .
Agora, todos os membros podem fazer downloads sem problemas em todas as categorias.
Continuamos comprometidos em oferecer uma experiência de utilização sem falhas
e agradecemos pela vossa contínua participação na comunidade.
-
Big_Z reacted to Cyphriun in Cyphriun - Servidor Privado Português
Novas Cidades
No Cyphriun apenas existirão 2 reinos e com isso decidimos remodelar a primeira cidade do Reino Azul e Reino Vermelho, respetivamente.
qgqou59.mp4
o83YCLu.mp4
Discord: https://discord.gg/Yy3jJeDYeX
O servidor não tem data de abertura.
-
Big_Z got a reaction from p0w3r0ff in Playlist Digestion - Onde guardo os vídeos informativos que vejo
Muito bom conteudo e informaçao desses canais recomendo
-
Big_Z reacted to Portugapt in Playlist Digestion - Onde guardo os vídeos informativos que vejo
Viva a todos,
Quero partilhar com vocês uma playlist que estou a construir há 4 anos e meio. Nem acredito que já passou tanto tempo! Conta com ~1200 videos atualmente, mas estou sempre a adicionar.
A playlist é nada mais nada menos que a agregação de todos os vídeos que vejo e são informativos de alguma maneira ou outra. O YouTube é a maior plataforma para se aprender tudo e mais alguma coisa.
Tendo a não guardar videos muito teóricos do gênero de Khan Academy ou aulas de temas em particular, e.g. desenvolvimento de software, teoria de categorias, programação linear, etc...
Conta com videos de youtubers como:
* Tom Scott
* The B1M
* Kurzgesagt
* CGP Grey
* Vox
* 3Blue1Brown
* LeMMiNo
Aqui segue o link :)
-
Big_Z reacted to RoHs in Auto Skill Reade
Auto Skill Reade
Visulizar Arquivo Sistema de Auto Skill Reader do DracaryS :
O sistema funciona com livros e almas. Sistema também funciona para as passivas. Outras coisas encontra-se no vídeo.
Password: cyber-gamers.org
Autor RoHs Enviado 01-01-2024 Categoria dracaryS
-
Big_Z reacted to p0w3r0ff in Plechito - Nightmare dungeon - 95€
View File Plechito - Nightmare dungeon - 95€
Plechito apresenta"Nightmare Dungeon" por 95€, uma oferta intrigante mas aqui é totalmente grátis.
Esta masmorra dos pesadelos é estruturada em quatro estágios distintos,
cada andar repleto de várias missões que podem ser enfrentadas individualmente ou em grupo.
Os jogadores têm 40 minutos para concluir toda a masmorra, seguidos por um período de cooldown de 60 minutos.
Todos os downloads são diretos e alojados no nosso dedicado.
Rápido, seguro e sempre disponível.
Submitter p0w3r0ff Submitted 12/27/2023 Category Dungeon / Maps
-
Big_Z reacted to Papix in [PHP] Discord automatic messages (CRON)(WEBHOOK)
Olá comunidade,
Neste guia vou ensinar-vos uma forma simples de enviar mensagens automáticas usando apenas php, cron e webhook do discord.
A função foi criada para anunciar eventos semanais, mas pode ser facilmente alterada para outros fins.
A função está protegida por uma chave, pelo que se a chave não estiver definida o script não será executado.
Preview:
Script:
<?php function Start() { date_default_timezone_set('Europe/Lisbon'); $data = date('d-m-Y'); $day = date('w', strtotime($data)); $url = "WEBHOOK_HERE"; $headers = [ 'Content-Type: application/json; charset=utf-8' ]; // Sunday if ($day == 0) { $POST = [ 'username' => 'TheBestPvP', 'content' => '• O evento **Caixa do Tesouro Hexagonal** começou! @here' ]; } // Monday if ($day == 1) { $POST = [ 'username' => 'TheBestPvP', 'content' => '• O evento **Caixa Tesouro do Luar** começou! @here' ]; } // Tuesday if ($day == 2) { $POST = [ 'username' => 'TheBestPvP', 'content' => '• O evento **Caixa do Tesouro Hexagonal** começou! @here' ]; } // Wednesday if ($day == 3) { $POST = [ 'username' => 'TheBestPvP', 'content' => '• O evento **Caixa do Tesouro Hexagonal** começou! @here' ]; } // Thursday if ($day == 4) { $POST = [ 'username' => 'TheBestPvP', 'content' => '• O evento **Ostra** começou! @here' ]; } // Friday if ($day == 5) { $POST = [ 'username' => 'TheBestPvP', 'content' => '• O evento **Super Boss** começou! @here' ]; } // Saturday if ($day == 6) { $POST = [ 'username' => 'TheBestPvP', 'content' => '• O evento **Caixa Tesouro do Luar** começou! @here' ]; } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($POST)); $response = curl_exec($ch); } $key = "KEY_HERE"; if(!empty($_GET["key"])) { Start(); echo "Done"; } else { echo "Ups..."; } ?>
Guide
Altera o fuso horário em date_default_timezone_set com o teu fuso horário (linha 4) Substituir WEBHOOK_HERE pelo teu URL de webhook (Linha 9) Substitui KEY_HERE pela chave aleatória (linha 64) Altera as mensagens a seu gosto.
Como executar?
example.com/discord.php?key=KEY_HERE
Como agendar o cron?
Se não souberes como configurar 1 cron, pode utilizar o website: https://cron-job.org/
Só é necessário criar uma conta e criar o cron.
-
Big_Z reacted to V¡®u§ in Delphi com assembly (Parte 2)
Passando arrays estáticas como parâmetros
=========================================
Parâmetros de arrays estáticas são passados como ponteiros ao primeiro
elemento do array, independentemente do parâmetro ser passado por valor
ou por referência (como "var" ou como "const").
Dadas as seguintes declarações...
const
ARRAY_MAX = 5;
type
TArrayOfInt = packed array [0..ARRAY_MAX] of longint;
var
a, b: TArrayOfInt;
procedure InitializeArray(var a: TArrayOfInt);
var
i: integer;
begin
for i := 0 to ARRAY_MAX do
a := i;
end;
... a chamada à procedure InitializeArray em assembler seria:
// Em Object Pascal:
// InitializeArray(a);
// Em Assembler Inline:
asm
mov eax, offset a // EAX := @a;
call InitializeArray // InitializeArray;
end;
OFFSET é um operador unário assembler que retorna o endereço de um
símbolo. O OFFSET não é aplicável para símbolos locais. Deve-se usar o
opcode LEA (veja abaixo), que é mais "universal".
Arrays estáticas passadas por valor
-----------------------------------
Se o array é passado por valor, é responsabilidade da função chamada
preservar o array. Quando a função precisa mudar os valores de um ou
mais elementos de um array passado por valor, normalmente ela cria uma
cópia local e trabalha com a cópia. O compilador cria uma cópia para nós
no "begin" das procedures e funções Pascal, mas em procedures e funções
em assembler puro temos de fazer isto nós mesmos. Um modo de se fazer
isto seria o seguinte:
procedure OperateOnArrayPassedByValue(a: TArrayOfInt);
var
_a: TArrayOfInt;
asm
// Copia os elementos de "a" (parâmetro) em "_a" (cópia local)
push esi // Salva ESI na pilha
push edi // Salva EDI na pilha
mov esi, eax // ESI := EAX; // @a
lea edi, _a // EDI := @_a;
mov eax, edi // EAX := EDI; // @_a
mov ecx, type TArrayOfInt // ECX := sizeof(TArrayOfInt);
rep movsb // Move(ESI^, EDI^, ECX);
pop edi // Restaura EDI da pilha
pop esi // Restaura ESI da pilha
// Aqui vai o resto da função. Trabalharemos sobre o "_a" (a
// cópia local), cujo primeiro elemento está agora apontado por EAX.
end;
O que encontramos de novo aqui são os opcods LEA e MOVSB, o prefixo REP
e o operador TYPE, descritos abaixo:
LEA (Load Effective Address)
----------------------------
Move para o primeiro operando o endereço do segundo. Aqui comparamos LEA
com MOV:
Instrução Traduzida como Efeito
-------------------------------------------------------------------
lea eax, localvar lea eax, [ebp-$04] EAX := @localvar;
EAX := EBP - $04;
mov eax, localvar mov eax, [ebp-$04] EAX := localvar;
EAX := (EBP - $04)^;
MOVSB (MOVe String Byte)
------------------------
Copia o byte apontado por ESI ao local apontado por EDI, e incrementa
ESI e EDI de tal forma que eles apontem para o próximo byte. O trabalho
do MOVSB pode ser descrito como segue:
ESI^ := EDI^; // Assume que ESI e EDI são do tipo PChar
Inc(ESI);
Inc(EDI);
Notas:
* MOVSW e MOVSD são as versões Word (16-bit) e DWord (32-bit)
respectivamente (ESI e EDI são incrementadas de 2 e 4
respectivamente).
* Os registradores são decrementados se o Direction Flag é setado.
REP
---
O prefixo REP é usado em operações de string para repetir a operação
de decremento ECX até que ECX seja zero. O trabalho do REP poderia ser
descrito como segue:
// rep string_instruction
@@rep:
string_instruction
loop @@rep
Notas:
* O REP não é um atalho para um código como o acima. Ele trabalha muito
mais rápido.
* O valor de ECX não é checado no começo do loop (se ECX fosse zero, a
instrução seria repetida 2^32 vezes, mas geraria um extenso AV antes
disto, tão logo ESI ou EDI apontassem para uma localição de memória
inválida).
TYPE
----
O operador TYPE é um operador unário avaliado em tempo de compilação que
retorna o tamanho em bytes de um operando, que deve ser um tipo de dados.
Por exemplo, TYPE WORD retornará 2 e TYPE INTEGER retornará 4.
Acessando os elementos de um array
==================================
Para acessar um elemento a precisamos dos valores "@a[0]" e "i" nos
registradores (como EDX e ECX, por exemplo) para então podermos usar o
endereçamento de memória como segue:
lea edx, a // EDX := @a;
mov ecx, i // ECX := i;
mov ax, [edx+ecx*type integer] // AX := EDX[ECX]; // a;
// PWord(EDX + ECX * SizeOf(integer))^
No exemplo, presumimos que os elementos têm 2 bytes (movemos o valor de
a para AX, um registrador de 16 bits), que a array não é agrupada
(cada elemento realmente ocupa 4 bytes, o tamanho de um inteiro, logo
este valor foi usado para calcular a posição do elemento) e que o array
não começa pelo elemento 0, ou seja, não é um array "zero-based". Por
exemplo:
var a: array [0..N] of word = (1, 2, 3, 6, ...);
+------ EDX = @a
|
v
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--
| 1 | 0 | | | 2 | 0 | | | 3 | 0 | | | 6 | 0 | | |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--
a[0] a[1] a[2] a[3]
[edx] [edx+04] [edx+08] [edx+12]
Se o array não é zero-based, temos que ajustar o valor do índice para
torná-lo zero-based antes de endereçarmos o elemento. Exemplos:
// a[1..100]
:
mov ecx, i // ECX := i;
dec ecx // Dec(ECX); // Ajusta ECX
:
// a[-10..10]
:
mov ecx, i // ECX := i;
add ecx, 10 // Inc(ECX, 10); // Ajusta ECX
:
A procedure InitializeArray (apresentada acima) pode ser implementada em
assembler do seguinte modo:
procedure InitializeArray(var a: TArrayOfInt);
asm // EAX = PByte(@a[0]);
xor ecx, ecx // ECX := 0;
@@loop:
mov [eax+ecx*type integer], ecx // PInteger(EAX+ECX*4)^ := ECX;
// ...or EAX[ECX] := ECX;
inc ecx // ECX := ECX + 1;
cmp ecx, ARRAY_MAX // if ECX <= ARRAY_MAX then
jle @@loop // goto @@loop;
end;
Ou assim:
procedure InitializeArray(var a: TArrayOfInt);
asm // EAX = @a[0];
xor ecx, ecx // ECX := 0;
@@loop:
mov [eax], ecx // EAX^ := ECX;
inc ecx // Inc(ECX);
add eax, type integer // Inc(EAX); // Aponta para o próximo elemento
cmp ecx, ARRAY_MAX // if ECX <= ARRAY_MAX then
jle @@loop // goto @@loop;
end;
Valores de retorno de arrays
============================
As funções que retornam arrays recebem um último parâmetro adicional que
é o ponteiro para a locação de memória onde deveam colocar seu valor de
retorno (a memória é alocada e liberada se necessário por quem acessou).
Por exemplo, consideremos a seguinte função:
function ReverseArray(const a: TArrayOfInt): TArrayOfInt;
var
i: integer;
begin
for i := 0 to ARRAY_MAX do
Result := a[ARRAY_MAX-i];
end;
A função recebe dois parâmetros:
1) EAX = endereço do primeiro elemento da array "a"
2) EDX = endereço do primeiro elemento de Result
A função pode ser reescrita em assembler como segue:
function ReverseArray(const a: TArrayOfInt): TArrayOfInt;
asm // EAX = @a[0]; EDX = @Result[0];
push ebx // Save EBX
mov ebx, eax // EBX := EAX;
xor ecx, ecx // ECX := 0;
@@loop:
mov eax, ARRAY_MAX
sub eax, ecx // EAX := ARRAY_MAX-ECX;
mov eax, [ebx+eax*type integer] // EAX := EBX[EAX];
mov [edx+ecx*type integer], eax // EDX[ECX] := EAX;
inc ecx // ECX := ECX + 1;
cmp ecx, ARRAY_MAX // if ECX <= ARRAY_MAX then
jle @@loop // goto @@loop;
pop ebx // Restore EBX
end;
Bem, isto é tudo por enquanto. No próximo artigo veremos como trabalhar
com registros.
Passando records como parâmetros
================================
Como arrays estáticos, records são internamente passados como ponteiros
para os dados, independentemente se o parâmetro é passado por valor ou
por referência (também como "var" ou como "const").
Dada as seguintes declarações...
type
TRecord = record
Id: integer;
Name: string;
end;
var
a, b: TRecord;
procedure InitRecord(var r: TRecord; Id: integer; const Name: string);
begin
r.Id := Id;
r.Name := Name;
end;
...uma chamada para a procedure InitRecord em assembler seria assim:
// Em Object Pascal:
// InitRecord(a, n, s);
// Em Inline Assembler:
asm
lea eax, a // EAX := @a; // 1st parameter in EAX
mov edx, n // EDX := n; // 2nd parameter in EDX
mov ecx, s // ECX := s; // 3rd parameter in ECX
call InitRecord // InitRecord;
end;
Acessando os campos de um record
================================
Campos de records estão localizados em um certo offset de um endereço do
record (o endereço do primeiro campo). No exemplo, assumindo que nós
temos o endereço do record do tipo TRecord no registrador EAX, o campo
Id está localizado em [EAX+0] (ou simplesmente [EAX]), e o campo Name
está localizado em [EAX+4], mas normalmente nós não escrevemos código
usando números explicitamente. Ao invés disto, para produzir código
auto-explicável e de fácil manutenção, nós temos cinco alternativas:
mov edx, [eax + TRecord.Name]
mov edx, (TRecord PTR [eax]).Name
mov edx, (TRecord [eax]).Name
mov edx, TRecord[eax].Name
mov edx, [eax].TRecord.Name
As cinco sentenças anteriores seriam montadas como:
mov edx, [eax + 4]
No lugar de um registrador (como EAX), as sintaxes também se aplicam
para nome de variáveis locais ou globais.
Você pode deduzir da primeira sintaxe que em inline assembler a
expressão RecordType.Field é avaliada em tempo de compilação como
uma constante representando o offset no qual o campo está localizado
no RecorType. Por exemplo, a seguinte sentença é válida:
mov ecx, TRecord.Name // mov ecx, 4
Voltando ao assunto, a procedure InitRecord (apresentada acima) pode ser
implementada em assembler desta forma:
procedure InitRecord(var r: TRecord; Id: integer; const Name: string);
asm // EAX = @r; EDX = Id; ECX = @Name[1]
mov (TRecord PTR [eax]).Id, edx // EAX^.Id := EDX; // Id
// _LStrAsg(@EAX^.Name, @Name) --> EAX^.Name := Name
lea eax, (TRecord PTR [eax]).Name // EAX := @(EAX^.Name);
mov edx, ecx // EDX := @Name[1];
call System.@LStrAsg // _LStrAsg(EAX, EDX)
end;
Na entrada da procedure, nós temos EAX apontando para o registro
(primeiro parâmetro), EDX contendo o Id (segundo parâmetro), EDX
apontando para o dado da string Name (terceiro parâmetro). Atribuir
um inteiro é bem simples, mas atribuir uma string é um pouco mais
complicado.
Se a string destino não é uma string vazia então
begin
Decremente a contagem de referência da string destino;
Se a contagem de referência da string destino chegou a zero então
Libere a string destino;
end;
Se a String Origem não for uma string vazia então
Incremente a contagem de referência da String origem;
Designe origem para o destino;
A procedure _LStrAsg (da Unit System) implementa esta lógica para nós. A
procedure recebe dois parâmetros: o primeiro (em EAX) é a string destino
passada por referência e o segundo (em EDX) é a string origem passada
por valor (o que é passado na verdade é o ponteiro, visto que strings
são ponteiros para os caracteres de fato). Então, no nosso caso, EAX
deveria ser o endereço de uma variável string que será atribuída (isto é
@r.Name), enquanto EDX deveria ser o valor a ser atribuído:
EAX --> r.Name --> r.Name[1] ==> EAX = @r.Name
EDX --> Name[1] ==> EDX = @Name[1]
Ref.: "-->" significa "aponta para"
Então, preparamos EAX e EDX e então chamamos _LStrAsg:
lea eax, (TRecord PTR [eax]).Name // EAX := @(EAX^.Name);
mov edx, ecx // EDX := @Name[1];
call System.@LStrAsg // _LStrAsg(EAX, EDX)
Funções de baixo nível para trabalhar com records
=================================================
Como arrays estáticos, se o record é passado por valor, é
responsabilidade da função chamada preservar o record. Quando uma função
precisa trocar o valor de um ou mais campos do record passado por valor,
normalmente ela cria uma cópia local e trabalha com a cópia. O
compilador cria uma cópia para nós no "begin" das funções Pascal, mas
nas funções puramente assembler temos que fazê-lo nós mesmos. Um jeito
de fazer isto é como mostrado na parte III com arrays estáticos. Aqui
está outro modo:
procedure OperateOnRecordPassedByValue(r: TRecord);
var
_r: TRecord;
asm
// Copia os elementos de "r" (parâmetros) em "_r" (cópia local)
// Move(r, _r, sizeof(TRecord));
lea edx, _r // EDX := @_r;
mov ecx, type TRecord // ECX := sizeof(TRecord);
call Move // Move(EAX^, EDX^, ECX);
lea eax, _r // EAX := @_r;
mov edx, TRecord_TypeInfo // EDX := TRecord_TypeInfo;
call System.@AddRefRecord // System._AddRefRecord(EAX,EDX);
lea eax, _r // EAX := @_r; // optional
// Aqui vai o resto da função. Nós trabalharemos no
// record "_r" (a cópia local), agora apontada por EAX.
end;
Desta vez nós chamamos a procedure Move ao invés de copiarmos os dados
com REP MOVSB. Deste modo, nós escrevemos menos código.
IMPORTANTE: Copiar os valores da memória apenas funciona com records que
não contém campos do tipo reference-counted tais como strings, arrays
dinâmicos ou variantes do tipo string ou arrays dinâmicos.
Se nós tivermos um ou mais campos string, ou campos de algum outro tipo
reference-counted, depois de copiar os valores de memória, nós temos que
incrementar seus respectivos contadores de referência. A procedure
_AddRefRecord (da Unit System) realiza isto. Ela possui dois parâmetros:
um ponteiro para o record (em EAX) e um ponteiro para informação do tipo
de dado para o record gerado pelo compilador (em EDX).
A informação de tipo para o record é basicamente uma estrutura de dados
que contém as posições e tipos de campos reference-counted do registro.
As procedures que trabalham com records declaradas na Unit System,
(_InitializeRecord, _AddRefRecord, _CopyRecord, e _FinalizeRecord)
requerem um ponteiro para a informação do tipo de dado como seu último
parâmetro.
Mas, onde estão os dados? Bem, infelizmente, não há um símbolo para
acessar sua localização diretamente. Nós temos que conseguir seu
endereço através de uma chamada para a função TypeInfo, mas não há uma
função que nós possamos chamar através do código assembler porque não é
uma função verdadeira, e sim uma função interna que o compilador resolve
em tempo de compilação.
Um possível contorno é inicializar uma variável global, chamando a
função TypeInfo de nosso código Pascal:
var
TRecord_TypeInfo: pointer;
:
initialization
TRecord_TypeInfo := TypeInfo(TRecord);
E então podemos usá-la como:
procedure OperateOnRecordPassedByValue(r: TRecord);
var
_r: TRecord;
asm
// Copiar os elementos de "r" (parâmetro) para "_r" (cópia local)
// Move(_r, r, sizeof(TRecord));
lea edx, _r // EDX := @_r;
mov ecx, TYPE TRecord // ECX := sizeof(TRecord);
call Move // Move(EAX^, EDX^, ECX);
// System._AddRefRecord(@_r, TypeInfo(TRecord));
lea eax, _r // EAX := @_r;
mov edx, TRecord_TypeInfo // EDX := TypeInfo(TRecord);
call System.@AddRefRecord // System._AddRefRecord(EAX, EDX);
lea eax, _r // EAX := @_r; // opcional
// Aqui vai o resto da função. Nós trabalharemos no
// record "_r" (a cópia local), agora apontada em EAX.
// Nós temos que finalizar a cópia local antes de retornarmos
// System._FinalizeRecord(@_r, TypeInfo(TRecord));
lea eax, _r // EAX := @_r;
mov edx, TRecord_TypeInfo // EDX := TypeInfo(TRecord);
call System.@FinalizeRecord // System._FinalizeRecord(EAX, EDX);
end;
Note que antes da função retornar, nós temos que fazer a chamada a
_FinalizeRecord para destruir o record local (por exemplo, isto
decrementará a contagem de referência de strings apontadas por campos
string).
Chamar Move e então _AddRefRecord é um jeito válido de copiar records
se e apenas se o record de destino tenha sido inicializado (depois de
chamar _AddRefRecord, o record é inicializado). Se o record de destino
já estiver inicializado, então nós temos que chamar _CopyRecord ao invés
disto.
Por Exemplo:
procedure proc(const r: TRecord);
var
_r: TRecord;
begin
// _r := r;
asm
mov edx, eax // EDX := @r;
lea eax, _r // EAX := @_r;
mov ecx, TRecord_TypeInfo // ECX := TypeInfo(TRecord);
call System.@CopyRecord // System._CopyRecord(EAX, EDX, ECX);
end;
end;
Note que como isto é uma função Pascal normal (não uma função Assembler
completa), o compilador automaticamente gera código para inicializar
e finalizar a variável record local (no "begin" e "end" da procedure
respectivamente).
A combinação Move mais _AddRefRecord é idêntica em efeito a
_InitializeRecord mais _CopyRecord:
procedure OperateOnRecordPassedByValue(r: TRecord);
var
_r: TRecord;
asm
// Copiar os elementos de "r" (parâmetro) para "_r" (cópia local)
// Move(_r, r, sizeof(TRecord));
// System._InitializeRecord(@_r, TypeInfo(TRecord));
push eax // Push(EAX); // @r
lea eax, _r // EAX := @_r;
mov edx, TRecord_TypeInfo // EDX := TypeInfo(TRecord);
call System.@InitializeRecord // System._InitializeRecord(EAX, EDX);
// _r := r;
lea eax, _r // EAX := @_r;
pop edx // EDX := Pop(); // @r
mov ecx, TRecord_TypeInfo // EDX := TypeInfo(TRecord);
call System.@CopyRecord // System._CopyRecord(EAX, EDX, ECX);
lea eax, _r // EAX := @_r; // optional
// Aqui vai o resto da função. Nós trabalharemos no
// record "_r" (a cópia local), agora apontada em EAX.
// Nós temos que finalizar a cópia local antes de retornarmos
// System._FinalizeRecord(@_r, TypeInfo(TRecord));
lea eax, _r // EAX := @_r;
mov edx, TRecord_TypeInfo // EDX := TypeInfo(TRecord);
call System.@FinalizeRecord // System._FinalizeRecord(EAX, EDX);
end;
Como _AddRefRecord, a procedure _InitializeRecord é apenas destinada
para ser usada com records não inicializados.
Retornando valores de records
=============================
Retornar valores de records é exatamente o mesmo que retornar valores de
array estático. Funções que retornam records recebem um último parâmetro
adicional que é o ponteiro para a localização em memória onde o valor de
retorno deve ser armazenado, isto é, o valor do último parâmetro é
@Result. A memória para o record de resultado deveria ser alocada,
inicializada e liberada pelo chamador (não é de responsabilidade da
função chamada). Por exemplo, vamos considerar a seguinte função:
function MakeRecord(Id: integer; const Name: string): TRecord;
begin
Result.Id := Id;
Result.Name := Name;
end;
A função é declarada para receber dois parâmetros e retornar um record,
mas internamente é como uma procedure com três parâmetros:
1) EAX = O Id para o novo record
2) EDX = O nome para o novo record
3) ECX = O endereço do record de resultado (@Result)
A função pode ser reescrita em assembler como segue :
function MakeRecord(Id: integer; const Name: string): TRecord;
asm // EAX = Id; EDX = @Name[1]; ECX = @Result
mov (TRecord PTR [ecx]).Id, eax // ECX^.Id := EAX; // Id
// (@Result)^.Id := EAX;
// Result.Id := EAX;
// Result.Name := Name;
// System.@LStrAsg(@(Result.Name), @Name[1])
// System.@LStrAsg(@(ECX^.Name), @Name[1])
lea eax, (TRecord PTR [ecx]).Name // EAX := @(ECX^.Name);
call System.@LStrAsg // _LStrAsg(EAX, EDX)
end;
NOTA: Nós não designamos o valor EDX antes de chamar _LStrAsg
porque EDX já contém o valor desejado (passado como parâmetro)
Chamando funções que retornam records
=====================================
Considere o seguinte código:
a := MakeRecord(n, s);
Alguém seria tentado a pensar que o compilador traduz como:
asm
mov eax, n
mov edx, s
lea ecx, a // ECX := @a; // @Result
call MakeRecord
end;
Mas as coisas não acontecem deste jeito, ao menos no Delphi 5. O
compilador aloca e inicializa uma variável local que armazena o
resultado e então copia o resultado do record para o record de destino.
Nós não temos apenas ineficiência realizando uma cópia que seria
desnecessária se usássemos um código como o acima, mas- como nós temos
visto acima- a cópia por si mesma não é tão inocente como uma chamada
para a procedure Move (_CopyRecord checa a informação de tipo de dado
em runtime para localizar os campos que requerem tratamento especial).
é claro, a variável local invisível é primeiro inicializada e
eventualmente finalizada. Este modo é extremamente ineficiente. Se
você precisa de velocidade, chame funções record-returning usando
assembler como mostrado acima, passando diretamente o endereço da
variável que irá guardar o resultado como o último parâmetro (@Result).
Bem, é isto por enquanto. Na próxima parte, veremos algumas coisas
básicas sobre o trabalho com objetos.
__________________
NOTA: O Código fonte e a aplicação DEMO estaram anexados no último post desse artigo.
-
Big_Z reacted to p0w3r0ff in Atualização Importante - Ataque DDoS em Escala Sem Precedentes
Caros Membros,
É com grande satisfação que informamos que o ataque DDoS massivo que enfrentamos chegou ao fim.
Às 7 horas da manhã, conseguimos resistir a um dos maiores ataques da nossa comunidade,
totalizando impressionantes 49 TB de tráfego malicioso e mais de 9,2 biliões de requests.
Lamentamos profundamente pelo inconveniente causado pelo período de inatividade que possa ter sentido durante este ataque.
Reconhecemos que, com os recursos limitados que temos, a resistência foi notável, e estamos extremamente agradecidos pela vossa paciência e apoio.
Agora a trabalhar para normalizar todas as operações do fórum. Agradecemos a todos pela compreensão durante este período desafiador.
A vossa segurança e a estabilidade da nossa comunidade são as nossas principais prioridades.
Agradecemos pela vossa compreensão e apoio contínuo.
-
Big_Z reacted to morfo2 in Microsoft Office
Não existe Office 365 gratuito, é um serviço de subscrição e não usa chaves de activação KMS.
Compra uma chave Account Bind do Microsoft Office 2021 Pro Plus a partir de 7€ na Allkeyshop.
Quando tiveres a chave vai ao Setup da Microsoft, activa a tua conta e instala o Office.
Nota: Esta é a versão Windows. Se quiseres a versão Mac OS tens de procurar por ela.
-
Big_Z reacted to hetzpvp in [Release]Fishbot - NEW SYSTEM | ANY METIN
Hi,
I developed a fishing bot that uses image recognition algorithms to fish AFK in the new metin2 fishing system.
By running the fishbot completly external from the metin2 client, this bot is completely undetectable.
This bot works on every single metin, if you have any issues feel free to contact me via discord.
Here is a video that show how the bot works
https://youtu.be/jToz6Maj1EU
Download links:
If the metin is like Sancy Noor, where fishing windows is not centered, add me on discord and ask for other version of the fishing bot.
Download
VirusTotal
Contact:
Discord boristei
Thanks.
-
Big_Z reacted to Eylon in Eylon - New Stage | Servidor Português Middle School
Eylon - New Stage
Abertura fase BETA: 16/06/2023, 18H Portugal Continental
Abertura Oficial: 2 semanas aproximadamente após a abertura da fase beta.
------------------------------------------------------------------------------------------------
Apresentação
Site Oficial | Discord
-----------------------------------------------------------------------------------------------
O download do cliente será disponibilizado 1 dia antes da abertura, (dia 15/06/2023).
Registos serão ativos no momento da abertura do Servidor, (16/06/2023).
----------------------------------------------------------------------
Algumas prints da apresentação.
E muito mais... Convidamos todos a experimentar.
Cumprimentos
Equipa Eylon
-
Big_Z reacted to morfo2 in [Guia] Jogos + DLC's Grátis na Steam
1º Instalar a extenção da SteamDB no browser.
2º Fazer login na Steam Store com a vossa conta.
3º Entrar na SteamDB com a vossa conta Steam.
4º Aceder aos Free Packages da SteamDB.
5º Activem os filtros para evitar spam (Por exemplo, se quiserem DLC's grátis para os jogos que já têm, activem a última opção de filtragem)
6º Activem os packages
Só podem activar um máximo de 50 a cada hora.
-
Big_Z reacted to morfo2 in Box Android Tv
Google TV - https://www.kuantokusta.pt/p/137930/google-chromecast-tv-white
Tudo resto é lixo.
-
Big_Z reacted to 'ŞŦŘƗƗҜ€Ř' in Apollo2 - Uma nova aventura!
Site não funciona e o tópico não respeita o Protocolo Para Divulgação De Servidores Metin2.
Tópico fechado!
-
-
Big_Z reacted to morfo2 in Portátil Até 600€ (Trabalhos Casuais no Office, Ver Vídeos etc...)
Este é o melhor portátil que tens no mercado actualmente até 600€
Lenovo IdeaPad 5 14ALC-686
CPU: Ryzen 5 5500U
RAM: 16GB 3200 MHz
ECRÃ: TN 14" FHD 250nits Anti-glare, 45% NTSC
SSD: 512GB NVMe Gen 3
WebCam tem privacy shutter
Única m3rda é que o Wi-Fi ainda é 802.11ac 2x2 em vez do 6
Tem Leitor de cartões de memória
2 USB 3.2 Gen 1 (um deles com power activo)
1 USB-C 3.2 Gen 1 (suporta transferência de dados, Power Delivery 3.0 e DisplayPort 1.2)
1 HDMI 1.4b
1 Jack 3.5mm
Bateria de 44.5Wh
Pesa 1,39Kg
Infelizmente as aulas já começaram, por isso já não existe stock de portáteis em lado nenhum.
Não recomendo portáteis HP para nada. São pesados, têm problemas de aquecimento e chassis parece plástico, partem-se com facilidade.
Tens por exemplo este laptop incrivel pelo preço https://www.globaldata.pt/portatil-hp-pavilion-156-15-eh1000np-r5-16gb-512gb-3e5y5eaab9 até consegue ser superior ao LeNovo por +50€ por uma única razão, materiais baratos...
Vi todas as lojas cá em portugal, não há stock de nada decente.
Única coisa que encontro é nos espanhois https://www.pccomponentes.pt/lenovo-ideapad-3-15lc6-640-amd-ryzen-5-5500u-8gb-512gb-ssd-156-pt
Depois tens aqui Windows e Office
Compra uma key W10Pro N + Office 2019 Pro Plus a tua irmã por 10€ e facilitas-lhe a vida
-
Big_Z reacted to EdHardry in Portátil Até 600€ (Trabalhos Casuais no Office, Ver Vídeos etc...)
Costumo ver na PCDiga, mas muitos dos portáteis estão neste momento fora de stock...
Vi este, agradou-me
https://www.pcdiga.com/computadores/portateis/portateis/portatil-hp-255-g8-15-6-27k43ea-ab9
-
Big_Z reacted to morfo2 in Guia Completo de Formatação Windows - Básico
Neste guia completo de formatação de computadores para utilizadores normais irá aprender o básico de uma formatação, bem como o porquê e como fazer.
Também terá acesso gratuito a todo um aglomerado de software útil e benéfico ao seu computador.
O porquê de formatar...
Com o passar do tempo, o seu computador enche-se de programas, ficheiros, cache e na pior das hipóteses, vírus, entre outros... que acabam por afectar a performance da sua máquina.
Ao formatar está a dar uma nova vida ao seu sistema e a remover por completo quaisquer eventuais problemas que tenha ou virá a ter.
Antes da formatação...
Aconselho sempre a limpar o pó de todos os seus componentes internos quer seja um desktop ou laptop, que neste segundo caso deverá ter em especial atenção ao sistema de refrigeração como o radiador e a(s) ventoinha(s).
Atenção: Não abra o seu laptop se este ainda se apresentar na garantia ou se não tem conhecimentos mínimos de hardware. Caso isso se suceda, existem serviços de limpeza e manutenção que rondam os 20€ dependendo do sitio.
Efectuando uma limpeza regular evita o sobreaquecimento, o mau contacto e aumenta o fluxo de ar que resulta na sua devida performance. Aproveite também para mudar a pasta térmica.
Irá precisar de um dispositivo de armazenamento externo, de preferência uma Pen USB de 16Gb ou superior com capacidade de leitura continua.
Se tem programas/ficheiros/imagens/vídeos/licenças importantes guarde-os antecipadamente noutro dispositivo para não os perder.
Para começar...
Transfira o Windows and Office ISO Downloader e execute-o.
Escolha o Sistema Operativo que pretende (Windows 7, 8.1 ou 10) e a respectiva versão.
Seleccione a língua e a arquitectura do seu sistema (32 bits ou 64 bits).
Depois de efectuar o download está pronto para o segundo passo.
Escrever imagem...
Agora que tem o ficheiro .ISO do Sistema Operativo está na hora de introduzir a sua Pen USB no computador para escrever a imagem.
Para isso irá precisar do Rufus que é um programa simples de escrita.
Ao executar o Rufus seleccione o dispositivo (a sua pen USB).
Nas opções de formatação seleccione os seguintes:
Formatação rápida Criar disco de arranque com... [Imagem ISO] Criar nomes estendidos e ícones Seleccione também o seu ficheiro .ISO (Sistema Operativo) que transferiu no passo acima e clique em Iniciar.
Após concluído, retire a pen USB com segurança e introduza-a no computador que pretende formatar.
BIOS...
Ao iniciar o seu computador já com a pen USB introduzida, tem de aceder à BIOS ou, se tiver, aceda directamente ao BOOT e escolha a sua pen USB para ser a primeira a ser inicializada.
Guarde as alterações e reinicie o computador.
Irá ser encaminhado automaticamente para o instalador do Sistema Operativo, nesta caso do Windows.
Siga todos os passos com atenção e efectua a instalação do SO que irá demorar algum tempo dependendo das especificações do seu computador.
Recomendo: Formate todas as suas unidades de armazenamento, elimine-as e crie uma nova unidade de armazenamento com o espaço total do disco.
O renascimento...
Agora que instalou o sistema operativo e já sente a máquina mais leve está na hora de lhe dar vida ou pelos menos sustentabilidade.
Para isso irá precisar de instalar as drivers dos seus componentes de hardware.
A forma mais eficaz de o fazer é procurar no website da marca do seu computador (no caso dos laptops) ou da sua motherboard (no caso dos desktops).
Por exemplo, vou ao website da HP pesquisar pelo HP Pavilion 15-cc500 e procuro as drivers para o respectivo sistema operativo.
Ao encontrar a lista de drivers tenha em mente que, as estritamente necessárias serão:
Vídeo - Pode instalar através do website da marca para o caso de placas gráficas integradas. Caso tenha uma placa gráfica dedicada AMD ou Nvidia, transfira o actualizador da respectiva marca. Audio - Que será quase sempre da Realtek. Rede - Que se divide em LAN, rede Sem Fios (WiFi) e Bluetooth. Nos laptops o mesmo modelo pode conter diferentes fabricantes (Realtek, Broadcom, Intel...) que apenas poderá saber qual o original olhando para o componente em si mas de qualquer forma são todos compatíveis uns com os outros, pelo que não haverá problema se instalar o errado. Certifique-se é que instala as 3 drivers dos 3 componentes. Caso não tenha Bluetooth ou WiFi obviamente só precisa de instalar a driver do LAN e vice-versa. Eventualmente também deverá instalar as seguintes:
Chipset - Só porque sim. Touchpad - Para portáteis. Câmara - Se tiver de origem. Câmaras externas deverão ter drivers próprias da marca. Teclado - No caso de teclados com RGB ou outras configurações que possam ser modificadas através de determinado software. Existem infindáveis drivers de "utilidade" desde o fast charge ao overclock que também podem ser instaladas mas para situações técnicas. Se não for necessário para a sua utilização, quanto menos instalar mais limpo o PC ficará.
Para uma aplicação real...
Já temos as drivers, falta os programas certo? Ninguém trabalha sem um Office, ninguém vê vídeos sem um Player ou lê PDF's sem um leitor.
O Office pode ser transferido através do mesmo downloader que usámos para o Windows. Desta vez não terá que guardar numa pen USB, poderá executa-lo directamente com o Daemoon Tools.
Além do famoso Office, para trabalhar no dia a dia com o computador irá precisar do seguinte:
WinRar - Extractor e Compilador de ficheiros. Adobe Reader - Leitor e Conversor de PDF's. Adobe Flash Player - Código que permite correr vídeos e animações em várias plataformas. Adobe Shockwave - Código que permite correr jogos video-gráficos em browser. Java Runtime - Código que permite executar e ler aplicações, extensões, funções, etc... Paint.net - Programa básico de edição de imagem que é melhor que o clássico Paint. Windows Media Player - Geralmente vem pré-instalado. Existem outras soluções como a app de Filmes do Windows 10 que pode ser obtido na Store ou o VLC que também é bastante conhecido. No caso do Windows 7 e 8.1 verifique se necessitam do Microsoft .NET Framework e Microsoft Silverlight e qual a versão. Caso não os instale/actualize, irá ter problemas de compatibilidade. O Windows 10 não necessita, vêm pré-instalados.
Se quiser complementar...
Pode sempre instalar algumas recomendações totalmente gratuitas, caso lhe interesse para uma aplicação real!
Chrome - Melhor browser global graças às suas extensões. Firefox - Melhor browser para programadores. Steam - Plataforma de jogos. Origin - Outra plataforma de jogos. NotePad++ - Para programadores. Discord - Programa de comunicação gratuita, melhor que TeamSpeak ou Skype. uTorrent - Para transferir torrents. Popcorn Time - Programa de visualização de filmes, séries e animes com qualidade HD e legendas, totalmente gratuito. aTube Catcher - Para transferir e converter músicas e vídeos directamente do YouTube. Spotify - Música Virtual DJ - Mesa de mistura virtual Bitdefender - Melhor anti-vírus global. (Nota: Windows 10 não necessita de anti-vírus devido à sua protecção Firewall e Windows Defender actualizado. Ao instalar anti-vírus de terceiros que não uma versão premium do Bitdefender está simplesmente a comprometer a sua segurança e a gastar dinheiro de forma estúpida. Agradeço que se o fizer, doe esse dinheiro para caridade ou na melhor das hipóteses, para a minha conta bancária, obrigado!) MBAM - Melhor anti-malware global. Action! - (by Mirillis) é o melhor programa de captura de imagem/vídeo global. O DirectX e o pacote de Visual C++ podem ser instalados previamente mas sem necessidade porque caso algum programa necessite dos referidos para ser executado, será encaminhado para o download do mesmo.
Para terminar...
Se não tem chaves de activação do Windows e do Office e também não quer gastar dinheiro basta seguir as indicações do Activador 2017.
Todo o conteúdo presente neste tópico, bem como em toda a Cyber-Gamers, é totalmente gratuito!
A comunidade promove o conhecimento sem receber nada em troca. Cabe a si decidir se quer ajudar ou não a nossa causa.
Para qualquer informação ou dúvida que tenha não hesite em comentar.
Agradecimento especial...
Glossy pela partilha do Downloader da Microsoft
Ratiborus pela concepção do activador
-
Big_Z reacted to Valenza in [Full Pack] Photoshop Full Package (Renders, Bgs, Effects ...)
Boas... deixo abaixo um link para baixar, achei na epvp postado por DEMONKING.,
como não existe mais pessoas aqui na cyber que postam coisas novas,
mas esperam alguem postar pra baixar e mal agradecer, deixo abaixo para os sangue sugas também...
(se ja tiverem postado é só deletar, sem mimimi's)
No download contém:
- Mais de 900 renders de metin2;
- Mais de 150 imagens de fundo ( metin2 e outras );
- Mais de 400 efeitos (fogo/fumaça/energia/outros efeitos);
- Mais de 250 texturas;
- Mais de 50 Fontes (tipos de letras);
Tamanho total de tudo isso: 934.7MB
Algumas imagens:
Download: https://mega.nz/file/Flg0jQwL#hq6H4xNqxsc1lxkN9LYDYKiGf-7e7DBjWeKnnNh1d3Q
Créditos:
Pelos arquivos: DEMONKING. - epvp
Por esse tópico: Valenza
Baixou? Que bom que fui útil...
-
Big_Z reacted to morfo2 in [2020] Black Friday - Produtos selecionados
Tal como fiz em 2018, venho fazer o mesmo.
O Black Friday este ano decorre dia 27 de Novembro e mais uma vez cá estamos para ajudar a comunidade a aproveitar as promoções.
Atenção que a Prévia do Black Friday começa hoje e terminará dia 30 de Novembro. Boas compras!
Para quem já viu este guia pode dar scroll down para o fim e ver os produtos selecionados do dia.
Novos produtos serão adicionados em novo Post assim que achar que deva ser feita uma seleção de produtos a um preço decente.
Onde comprar Desktops e Laptops?
Fnac e Worten são 2 centros físicos nos quais vocês não devem comprar rigorosamente nada, nem no black friday, nem em outras épocas do ano.
Estas lojas têm preços acima da média devido à sua presença forte no mercado local e são conhecidas por burlar os clientes em valores promocionais, pois aumentam a tabela dias ou semanas antes da promoção, acabando por vender produtos com 30% de desconto mais caros que o valor real. Não caiam nestes esquemas!
Lojas como PCDiga e PCComponentes são as que praticam os melhores preços do mercado desde há vários anos e com qualidade/confiança garantida!
A PCComponentes sendo uma gigante espanhola, tem os melhores preços devido ao IVA reduzido, no entanto, certos produtos pagam portes e acaba por ser o mesmo que comprar cá. A promoção decorre de 15 a 29 de Novembro! https://www.pccomponentes.pt/black-friday
A PCDiga é a loja mais famosa em Portugal e com os melhores preços nacionais. A promoção decorre entre 14 e 30 de Novembro. A rodagem de produtos seleccionados é feita a cada 24 a 36 horas pelo que devem comprar no próprio dia a tempo e horas para não perderem stock nem o desconto! https://www.pcdiga.com/black-november-pcdiga
A forma mais simples de acompanhar o mercado e as suas promoções é através do KuantoKusta.
KK é um comparador de preços português com uma selecção de diversas lojas a nível nacional e preços actualizados automaticamente.
Aceda ao KuantoKusta e crie uma conta, após isso, siga os seguintes passos:
1º Procure o(s) produto(s) que deseja;
2º Veja os Preços de forma ascendente;
3º Defina um Alerta de Preço;
4º Insira o preço máximo desejado para o Black Friday, tendo em conta o preço mais baixo do mercado.
5º Dirija-se ao seu Perfil em Alertas de Preço;
6º Aceda em "Os Meus Alertas" às "Newsletters" e active a notificação por Email.
Após isso, está pronto para o Black Friday! Irá receber avisos por email dos produtos seleccionados e respectivos preços.
Para saber se a promoção se trata de Burla ou não, basta usar o "Histórico de Preços" do KuantoKusta na página do produto.
Em caso de burla, o preço antes do black friday será crescente.
Produtos selecionados de hoje (PCDiga)
Portátil MSI 15.6" GL65 Leopard 10SDK-036XPT por 1199,90€ (esgotado)
Assistente Google Nest Hub por 79,90€
Coluna Google Nest Audio por 89,90€
Coluna Google Nest Mini por 29,90€ (esgotado)
Router Google Wi-Fi Mesh AC1200 2x2 Wireless Dual-Band (1 Unidade) por 89,90€
Router Google Wi-Fi Mesh AC1200 2x2 Wireless Dual-Band (3 Unidades) por 257€ (esgotado)
Televisão Xiaomi Mi SmartTV 4A 32" LED HD Ready Android TV por 149,90€ (promoção terminada)
Televisão Xiaomi Mi SmartTV 4S 43" LED 4K UHD Android TV por 279,90€ (esgotado)
Televisão Xiaomi Mi SmartTV 4S 55" LED 4K UHD Android TV por 359,90€ (promoção terminada)
Televisão Xiaomi Mi SmartTV 4S 65" LED 4K UHD Android TV por 559,90€ (esgotado)
TV Box Xiaomi Mi Box S Android TV 4K HDR por 49,90€ (esgotado)
Projector LG Minibeam PF50KS Full HD por 489,90€ (aumentou para 520€)
Monitor LG 27GN750-B IPS 27" FHD 16:9 240Hz FreeSync / G-SYNC Compatible por 329,90€ (aumentou para 360€)
Aspirador Robô Xiaomi Mi Robot Vacuum Mop Branco por 199,90€
Aspirador Robô Xiaomi Mi Robot Vacuum Mop Pro Branco por 279,90€
Smartphone Samsung Galaxy M51 6.7" 6GB/128GB Dual SIM Preto por 359,90€ (indisponivel)
Smartphone Oppo Find X2 Lite 6.4" 8GB/128GB por 429,90€ (indisponivel)