Эмуляция урона

Fox_L

Известный
Автор темы
12
14
Версия MoonLoader
.027.0-preview
Пытаюсь написать скрипт, который эмулирует урон от падения
Не очень хорошо знаком с серверной частью и что в таком случае нужно слать на сервак, чтобы он считал урон легетимным и не кикал античит
Пробовал отправлять инфу о получении урона от падения, отправлять синхру с нужным мне уменьшенным хп, но сервак всё равно кикает
Более того, если я получаю урон будучи афк (эмулирую афк тем что не отправляю пакеты) - при падении с высоты сервер регает урон без проблем

Конечные цели:
1. на клиенте не должно быть падения/слапа, хочу ограничиться манипуляциями с пакетами, со стороны так же движений быть не должно
2. возможность задавать урон самому (что при падении с высоты не получается сделать адекватно)
это точно возможно, так как при афк персонаж не двигается, а дамаг проходит

Что-то точно упускаю
afk nop:
function onSendPacket()
  return not nop
end


lua:
require "lib.moonloader"
local sampev = require "lib.samp.events"
local encoding = require "encoding"
encoding.default = "CP1251"

local needEditHealth = false
local damage = 0


local function sendGiveTakeDamage(damage)
    local bs = raknetNewBitStream()
    if not bs then return false end

 
    raknetBitStreamWriteBool(bs, true) 
    raknetBitStreamWriteInt16(bs, 65535)
    raknetBitStreamWriteFloat(bs, damage)
    raknetBitStreamWriteInt8(bs, 54)
    raknetBitStreamWriteInt8(bs, 3)
    raknetSendRpc(115, bs)
    raknetDeleteBitStream(bs)
    return true
end

function sampev.onSendPlayerSync(data)
    if needEditHealth then
        sendGiveTakeDamage(damage)
        data.health = data.health-damage
        needEditHealth = false
        return data
    end
end

function sampev.onSendCommand(cmd)
    local _, _, damageStr = cmd:find("^/damage%s+(%d+)")
    if damageStr then
        damage = tonumber(damageStr)
        if damage and damage > 0 then
            needEditHealth = true
        else
            sampAddChatMessage("Использование: /damage [положительное число]", -1)
            return false
        end
    end
end
 
Последнее редактирование:
Решение
Всё просто
Lua:
function sampev.onSendCommand(cmd)
    if text == '/damage' then
        local damage = 250
        local bs = raknetNewBitStream()
        raknetBitStreamWriteBool(bs, true)
        raknetBitStreamWriteInt16(bs, -1)
        raknetBitStreamWriteFloat(bs, damage)
        raknetBitStreamWriteInt32(bs, 54)
        raknetBitStreamWriteInt32(bs, 3)
        raknetSendRpcEx(115, bs, 1, 9, 0, false)
        raknetDeleteBitStream(bs)
        return false
    end
end

Tema05

Известный
1,638
549
Всё просто
Lua:
function sampev.onSendCommand(cmd)
    if text == '/damage' then
        local damage = 250
        local bs = raknetNewBitStream()
        raknetBitStreamWriteBool(bs, true)
        raknetBitStreamWriteInt16(bs, -1)
        raknetBitStreamWriteFloat(bs, damage)
        raknetBitStreamWriteInt32(bs, 54)
        raknetBitStreamWriteInt32(bs, 3)
        raknetSendRpcEx(115, bs, 1, 9, 0, false)
        raknetDeleteBitStream(bs)
        return false
    end
end
 
  • Нравится
Реакции: Fox_L