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

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,468
Есть такая строка:
Код:
[Рация] Ivan_Ivanov[17]: тест
Как используя RegEx можно извлечь и ник, и сообщение (где "тест")? Перепробовал все, но чет не могу сам дойти до этого. :(
Код:
([\\w]+)\\[(\\d+)\\]\\: ([^$]+)
Код:
Result of search: 1 match(-es)
Match #0: Ivan_Ivanov[17]: test
Match #1: Ivan_Ivanov
Match #2: 17
Match #3: test
 
  • Нравится
Реакции: zikekazil

Dark_Knight

Me, me and me.
Друг
4,078
2,095
Как по мне она у тебя кривая, легенд. Ты заюзал 2 слеша, а это уже ты ишешь символ \, а не слова. Так же такая регулярка не сможешь пропустить ники с символами.
Такие будут получше ловить
^\[Рация\] (.+)\[(\d+)\]\: ([А-Яа-я]+)$
^\[Рация\] (.+)\[(\d+)\]\: (.+)$
 
  • Нравится
Реакции: zikekazil

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,468
Хз как у тебя, но у меня VS жалуется на то, что без двух бэкслэшей.
 

zikekazil

Новичок
7
0
спасибо, сделал как-то так:
Код:
std::string chatm = "[Рация] Ivan_Ivanov[17]: тест";
std::smatch chatres;
if (std::regex_match(chatm, chatres, std::regex(R"(^\[Рация\] (.+)\[(\d+)\]\: (.+)$)")))
     SF->getSAMP()->getChat()->AddChatMessage(-1, "Ник: %s", chatres[1].str());
но после проверки всего этого в игре, происходит зависание. Смог вывести только "chatres" целиком, а не один его элемент. Почему так? :(
 

Dydaev

Новичок
7
0
Помогите исправить код, всё объявлено и код работает, но при активации телепортирует под землю и не замирает, то есть, если не поставить метку - в чат пишет, но самой телепортации не происходит, войд ниже.
Код:
void cheat_handle_coordmaster()

{

static int time=0;

if(cheat_state->_generic.coordmaster == 1) {

if(GetTickCount()-set.coord_time > time) {

if (*(int *)0xBA6774 != 0)

{

float mapPos[3];

for ( int i = 0; i < (0xAF * 0x28); i += 0x28 )

{

if ( *(short *)(0xBA873D + i) == 4611 )

{

GTAfunc_TogglePlayerControllable(1);

GTAfunc_LockActor(1);

float *pos = (float *)( 0xBA86F8 + 0x28 + i );

gta_interior_id_set( 0 );

mapPos[0] = *pos;

mapPos[1] = *( pos + 1 );

mapPos[2] = pGameInterface->GetWorld()->FindGroundZForPosition( mapPos[0], mapPos[1] ) + 2.0f;

float cpos[3] = {pPedSelf->GetPosition()->fX,pPedSelf->GetPosition()->fY,pPedSelf->GetPosition()->fZ};

char opa=0;

if(cpos[0] > mapPos[0]) {

if(cpos[0]-mapPos[0] > set.coord_distance) cpos[0] -= set.coord_distance;

else {

cpos[0] = mapPos[0];

opa++;

}

} else {

if(mapPos[0]-cpos[0] > set.coord_distance) cpos[0] += set.coord_distance;

else {

cpos[0] = mapPos[0];

opa++;

}

}

if(cpos[1] > mapPos[1]) {

if(cpos[1]-mapPos[1] > set.coord_distance) cpos[1] -= set.coord_distance;

else {

cpos[1] = mapPos[1];

opa++;

}

} else {

if(mapPos[1]-cpos[1] > set.coord_distance) cpos[1] += set.coord_distance;

else {

cpos[1] = mapPos[1];

opa++;

}

}

if(opa == 2) {

cpos[2] = mapPos[2];

cheat_state->_generic.coordmaster = 0;

GTAfunc_TogglePlayerControllable(0);

GTAfunc_LockActor(0);

}

else cpos[2] = pGameInterface->GetWorld()->FindGroundZForPosition( cpos[0], cpos[1] )-20;

cheat_teleport(cpos,0);

}

}

} else {

addMessageToChatWindow("Поставьте метку на карте!");

cheat_state->_generic.coordmaster = 0;

}

time = GetTickCount();

}

}

return;

}
 

AWRage

Активный
642
141
Решил создать .asi плагин. В DllMain в DLL_PROCESS_ATTACH создал поток и в главной функции этого потока написал самое простое, логирование строки "loop", но когда увидел лог, охуел. 155 mb за минуту работы плагина. Понятно, что с такой скоростью игра зависнет, если я буду добавлять функции. Как это решить, юзать Sleep(1); ?
C++:
void Loop(LPVOID pArg)
{
    while (bThreadStatus)
    {
        Log("Loop");
    }

    _endthread();
}
 

AWRage

Активный
642
141
Не зависнет. И надо юзать таймеры, а не слипы.
Понял. Но появилась другая проблемка. Создал пустой проект, добавил DllMain, но появилась ошибка entry point must be defined. В настройках тип конфигурации dll, исходное расширение .asi. Искал в интернете, не нашёл ничего.

P.S. Где подчеркнуто, писал /ENTRY: DllMain, тоже не помогло.
u3rwYvw.png
 

SR_team

like pancake
BH Team
4,795
6,468
Там у него консольное приложение, где точка в хода main(). А мне нужно dll приложение, где роль точки входа отыгрывает DllMain, которая у меня есть, но компилить не хочет.
в свойствах проекта выбери тип динамической библиотеки
он используется как return в void функциях, и в конце не обязателен
 
  • Нравится
Реакции: AWRage

AWRage

Активный
642
141
Как проверить, что игра загрузилась не используя GAME_API и SF_API?