-
Автор темы
- #1
External анимация текста, о том как пастить эта история проста:
Видео результата
C#:
const Int32 m_iNumRoundKills = 0x3940;
const Int32 dwCurrentRound = 0x00000064;
float transparentValue = 1;
Random random;
bool isKilled;
//Таймер
private void DrawKillTick(object sender, EventArgs e)
{
transparentValue -= 0.019f;
}
//Обычный драв
private void Update()
{
int xx = random.Next(0, 50) > 20 ? -150 : 150;
int yy = random.Next(0, 50) > 20 ? -150 : 150;
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Interval = 1;
timer.Tick += new EventHandler(DrawKillTick);
while (true)
{
var gfx = _graphics;//Ну тут я использовал библиотеку GameOverlay.Net, но если у вас руки растут откуда нужно, то заменить методы на отрисовку текста не проблема XD
gfx.BeginScene();
gfx.ClearScene();
if (isKilled)
{
if (transparentValue >= 1f)
{
Globals.Overlay.Invoke(new Action(() => {
timer.Start();
}));
}
gfx.DrawText(gfx.CreateFont("Arial", 30, false, false), gfx.CreateSolidBrush(0.94f, 0, 1, transparentValue), (transparentValue * xx) + Globals.ScreenX / 2f, (transparentValue * yy) + Globals.ScreenY / 2f, GetText(countKill));
if (transparentValue <= 0f)
{
Globals.Overlay.Invoke(new Action(() => {
timer.Stop();
}));
isKilled = false;
transparentValue = 1f;
xx = random.Next(0, 50) > 20 ? -150 : 150;
yy = random.Next(0, 50) > 20 ? -150 : 150;
}
}
RestoreKills(Kills());
}
}
//Здесь восстанавливаем значение (для последующих подсчетов)
void RestoreKills(int kls)
{
if (kls > lastKills && Engine.GetLocalPlayer().Health() > 0)
{
lastKills = kls;
isKilled = true;
++countKill;
}
else
{
lastKills = kls;
}
if (Engine.GetLocalPlayer().Health() <= 0 || CurrentRound() > lastRounds)
{
countKill = 0;
lastRounds = CurrentRound();
}
}
//Получаем текст по кол-во убийств
string GetText(int countKill)
{
switch (countKill)
{
case 1:
return "One kill";
case 2:
return "Double kill";
case 3:
return "Triple kill";
case 4:
return "Mega kill";
case 5:
return "Ultra kill";
default:
return "WOW!!!";
}
}
//Текущее кол-во убийств
public int Kills() => ReadInt((UInt64)localPlayerBase + m_iNumRoundKills);
//Получаем кол-во раундов
public static int CurrentRound()
{
UInt64 p = ReadPointer(Engine.ClientAddress + Offsets.dwGameRulesProxy);
return ReadInt(p + dwCurrentRound);
}