Другое С/С++ Вопрос - Ответ

Roger571

Известный
58
31
Хорошо, а как через линукс компилить если поставлю на виртуалку, не скажешь?
Самым простым для тебя будет установка IDE.
Установи CodeBlocks, вот инструкция по его установке, где все подробно расписано и дан пример создания проекта.
Только при создании проекта выбирай не "Console application", а "Shared library". Затем добавляешь файлы своего плагина и компилируешь.
В настройках проекта можешь указать желаемое имя выходного файла.
 

zMViToS_

Новичок
3
0
Есть мобильный клиент самп. Базируется на 0.3.7, в самом клиенте не реализовано оружие, ходьба, приседания и урон с оружия, так же тюнинг. Как реализовать?
 

ALF

Известный
Проверенный
320
537
Есть мобильный клиент самп. Базируется на 0.3.7, в самом клиенте не реализовано оружие, ходьба, приседания и урон с оружия, так же тюнинг. Как реализовать?
как я знаю, сервер там 0.3.7, а получается, что достаточно научить клиент принимать и отправлять нужные пакеты.
не думаю, что если ты задаёшь такой вопрос, то ты сможешь это реализовать.
ты можешь посмотреть как уже реализовано там что то и делать по аналогии с этим.
 

ALF

Известный
Проверенный
320
537
есть два объекта, каждый из них расположен на своей позиции, нужно повернуть объект в сторону другого объекта в трёхмерном пространстве.
я прогуливал школу, вот и туповат чуть-чуть, дайте пожалуйста формулу как можно это высчитать

object one[x y z]
object two[x y z]
как мне высчитать ротацию по всем трём координатам?
 

semenrbt

Известный
4
0
есть два объекта, каждый из них расположен на своей позиции, нужно повернуть объект в сторону другого объекта в трёхмерном пространстве.
я прогуливал школу, вот и туповат чуть-чуть, дайте пожалуйста формулу как можно это высчитать

object one[x y z]
object two[x y z]
как мне высчитать ротацию по всем трём координатам?
а как узнать куда смотрит твой обьект =)
 

Stiopko

Известный
Проверенный
307
218
есть два объекта, каждый из них расположен на своей позиции, нужно повернуть объект в сторону другого объекта в трёхмерном пространстве.
я прогуливал школу, вот и туповат чуть-чуть, дайте пожалуйста формулу как можно это высчитать

object one[x y z]
object two[x y z]
как мне высчитать ротацию по всем трём координатам?


Ну по x и y вот, но это походу не то

C++:
// pos позиция обекта к которому нужно повернутся
// posTo сам обект
float angle = atan2((pos[0] - posTo[0]), (posTo[1] - pos[1])) + M_PI;
 

ALF

Известный
Проверенный
320
537
это всё не то.

объясняю понятней, вот функция которая создаёт объект, ротация там меняется по трём переменным(вектор, x, y, z)
C++:
BOOL Create(WORD nId, int nModel, CVector position, CVector rotation, float fDrawDistance)
{
    return ((BOOL(__thiscall *)(stObjectPool *, WORD, int, CVector, CVector, float))
        (SF->getSAMP()->getSAMPAddr() + 0xF470))(SF->getSAMP()->getInfo()->pPools->pObject, nId, nModel, position, rotation, fDrawDistance);
}
у меня есть координаты моего созданного объекта и координаты того вокруг чего он должен вращаться.
вопрос, как мне из этих двух координат высчитать ротация и повернуть объект в сторону моих координат?
 
  • Нравится
Реакции: Kotof

Stiopko

Известный
Проверенный
307
218
это всё не то.

объясняю понятней, вот функция которая создаёт объект, ротация там меняется по трём переменным(вектор, x, y, z)
C++:
BOOL Create(WORD nId, int nModel, CVector position, CVector rotation, float fDrawDistance)
{
    return ((BOOL(__thiscall *)(stObjectPool *, WORD, int, CVector, CVector, float))
        (SF->getSAMP()->getSAMPAddr() + 0xF470))(SF->getSAMP()->getInfo()->pPools->pObject, nId, nModel, position, rotation, fDrawDistance);
}
у меня есть координаты моего созданного объекта и координаты того вокруг чего он должен вращаться.
вопрос, как мне из этих двух координат высчитать ротация и повернуть объект в сторону моих координат?
Смотри тебе нужно вот это Кватеринион, но я это еще в школе не проходил поэтому хз
 

Akionka

akionka.lua
Проверенный
742
500
Подскажите, если кто-нибудь знает, как работает это? Какие адреса чистит, где их можно узнать итд.
 

Roger571

Известный
58
31

Не особо понимаю с похмелья что тебе требуется в итоге, но попробуй

Вычисляешь угол между объектами с помощью atan2 и переводишь в кватернион.

C++:
void QuaternionFromAngle(float *fQuaternion, float fAngle)
{
    fAngle = DEGTORAD(fAngle);
    float fMatrix[3][3], c = cos(fAngle), s = sin(fAngle);

    // QuaternionRotateZ
    fMatrix[0][0] = c;
    fMatrix[0][1] = s;
    fMatrix[0][2] = 0.0;

    fMatrix[1][0] = -s;
    fMatrix[1][1] = c;
    fMatrix[1][2] = 0.0;

    fMatrix[2][0] = 0.0;
    fMatrix[2][1] = 0.0;
    fMatrix[2][2] = 1.0;

    // GetQuaternionFromMatrix
    fQuaternion[0] = sqrt(Max((float)0, 1.0f + fMatrix[0][0] + fMatrix[1][1] + fMatrix[2][2])) * 0.5f;
    fQuaternion[1] = sqrt(Max((float)0, 1.0f + fMatrix[0][0] - fMatrix[1][1] - fMatrix[2][2])) * 0.5f;
    fQuaternion[2] = sqrt(Max((float)0, 1.0f - fMatrix[0][0] + fMatrix[1][1] - fMatrix[2][2])) * 0.5f;
    fQuaternion[3] = sqrt(Max((float)0, 1.0f - fMatrix[0][0] - fMatrix[1][1] + fMatrix[2][2])) * 0.5f;

    fQuaternion[1] = static_cast < float > (_copysign(fQuaternion[1], fMatrix[2][1] - fMatrix[1][2]));
    fQuaternion[2] = static_cast < float > (_copysign(fQuaternion[2], fMatrix[0][2] - fMatrix[2][0]));
    fQuaternion[3] = static_cast < float > (_copysign(fQuaternion[3], fMatrix[1][0] - fMatrix[0][1]));
}

Пробуй, вроде должно работать
 

ishi

Известный
493
110
Есть функция для поиска последовательности строчных символов:
C++:
int findstring(void* where_, char* what, int whereSize)
{
    void* temp = malloc(strlen(what) + 1);
    int iterator = 0;
    char* yo = new char[strlen(what) + 1];
    yo = (char*)temp;
    char* tempptr = static_cast<char*>(where_);
    while (iterator <= whereSize)
    {
        memcpy(temp, tempptr + iterator, strlen(what));
        yo[strlen(what) + 1] = 0;
        if (strcmp((char*)temp, what) == 0)
        {
            free(temp);
            //delete yo;
            return iterator;
        }
            iterator++;
    }
    return -1;
}
Она копирует из области поиска по n байт длиною равной длине искомого, добавляет на конец 0 и сравнивает. И так, пока не кончится буфер.
Однако, я её раз 10 наверное прогнал по циклу вызвов с одинаковыми параметрами, и примерно 33-39 из 100 вызовов она возвращает ошибку(-1). Лично я тут не вижу ошибки в логике, но результат говорит об обратном.
Помогите понять, где косяк, плиз.
 

rraggerr

проверенный какой-то
1,626
847
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Есть функция для поиска последовательности строчных символов:
C++:
int findstring(void* where_, char* what, int whereSize)
{
    void* temp = malloc(strlen(what) + 1);
    int iterator = 0;
    char* yo = new char[strlen(what) + 1];
    yo = (char*)temp;
    char* tempptr = static_cast<char*>(where_);
    while (iterator <= whereSize)
    {
        memcpy(temp, tempptr + iterator, strlen(what));
        yo[strlen(what) + 1] = 0;
        if (strcmp((char*)temp, what) == 0)
        {
            free(temp);
            //delete yo;
            return iterator;
        }
            iterator++;
    }
    return -1;
}
Она копирует из области поиска по n байт длиною равной длине искомого, добавляет на конец 0 и сравнивает. И так, пока не кончится буфер.
Однако, я её раз 10 наверное прогнал по циклу вызвов с одинаковыми параметрами, и примерно 33-39 из 100 вызовов она возвращает ошибку(-1). Лично я тут не вижу ошибки в логике, но результат говорит об обратном.
Помогите понять, где косяк, плиз.
это проверка на то что "слово" есть в строчке "какое то слово" ?
 

ШPEK

Известный
1,476
524
Lua:
#include "stdafx.h"
#include <Windows.h>
#include <process.h>
#include <stdio.h>


#define REGISTER_CLIENT_COMMAND 0x65AC0
#define ADD_CHAT_MESSAGE 0x64520
#define pChat 0x21A0E4
#define pInput 0x21A0E8
#define memory_info 0x8A5A80
DWORD dwSamp;

void AddChatMessage(const char* msg)
{
    ((void(__thiscall *)(DWORD str, const char* text))(dwSamp + ADD_CHAT_MESSAGE))(*(DWORD*)(dwSamp + pChat), msg);
}

bool isInit()
{
    return ((bool(__thiscall *)())(dwSamp + 0x9BF70))();
}

void AddClientCommand(const char* cmd, void* func)
{
    ((void (__thiscall *)(DWORD str, const char* cmd, void* func))(dwSamp + REGISTER_CLIENT_COMMAND))(*(DWORD*)(dwSamp + pInput), cmd, func);
}

void core()
{
    char buf[40];
    sprintf_s(buf, "%u", *(DWORD*)(dwSamp + memory_info));
    AddChatMessage(buf);
}

void attach()
{
    dwSamp = (DWORD)GetModuleHandle(L"samp.dll");
    while (!dwSamp) {
        dwSamp = (DWORD)GetModuleHandle(L"samp.dll");
        Sleep(30);
    }
    dwSamp = (DWORD)GetModuleHandle(L"samp.dll");
    AddClientCommand("getmem", core);
}


BOOL APIENTRY DllMain(HMODULE hModule,
    DWORD  ul_reason_for_call,
    LPVOID lpReserved
)
{
    if (ul_reason_for_call == DLL_PROCESS_ATTACH) _beginthread((_beginthread_proc_type)attach, NULL, NULL);
    return TRUE;
}
Крашит игру. в MoonLoader'e проверял вызов AddChatMessage, всё работало. AddChatMessage и AddClientMessage -
это методы класса.