HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 13.01.2025, 16:17
Vintik
Познавший АНТИЧАТ
Регистрация: 18.08.2017
Сообщений: 1,568
С нами: 4598023

Репутация: 183


По умолчанию

Не нашёл документацию ни по первому, ни по второму API.

Есть проект, в котором используется PSDK, SAMP API и imgui.

Задача: перебрать всех игроков в зоне стрима, получить ближайшего из тех, кто в машине, получить его samp (0.3.7-r3) id, вывести его id в чат.

Кажется, просто, но что-то не получается найти нужные функции (логику я сам напишу, просто укажите какие функции нужны для этого [перебор игроков, проверка в машине ли, получение по ped-у его samp id] — а лучше расскажите где вы нашли их, документации не вижу).

Задача 2: выводить актуальный id в имгуи окно, с имгуи что-то тоже примеров не нашёл. Можно пример простейшего окна имгуи (пусть со статическим текстом)?

Заранее спасибо.
 
Ответить с цитированием

  #2  
Старый 13.01.2025, 16:37
waparabka
Участник форума
Регистрация: 08.10.2019
Сообщений: 139
С нами: 3474377

Репутация: 98
По умолчанию

plugin.cpp:





Код:
uint16_t
get_nearest_driver
(
)
{
auto
player_pool
=
c_netgame
::
get
(
)
->
ref
(
)
->
get_player_pool
(
)
;
if
(
!
player_pool
)
return
65535
;
// invalid id
auto
my_ped
=
player_pool
->
get_local_player
(
)
->
get_ped
(
)
;
if
(
!
my_ped
)
return
65535
;
std
::
map

nearest
;
for
(
int
i
=
0
;
i

MAX_PLAYERS
;
i
++
)
{
auto
target
=
player_pool
->
get_player
(
i
)
;
if
(
!
target
||
!
target
->
does_exist
(
)
)
continue
;
auto
target_ped
=
target
->
m_pPed
;
if
(
!
target_ped
)
continue
;
c_vector my_position
;
my_ped
->
get_bone_position
(
8
,
&
my_position
)
;
c_vector target_position
;
target_ped
->
get_bone_position
(
8
,
&
target_position
)
;
auto
distance
=
my_position
.
distance_to
(
target_position
)
;
nearest
[
distance
]
=
target
->
m_nId
;
}
if
(
nearest
.
empty
(
)
)
return
65535
;
return
nearest
.
begin
(
)
->
second
;
}


все нужные функции есть тут: https://github.com/BlastHackNet/SAMP...api/0.3.7-R3-1

c_vector:





[CODE]
class
c_vector
{
public
:
float
x
,
y
,
z
;
c_vector
(
)
:
x
(
0
)
,
y
(
0
)
,
z
(
0
)
{
}
c_vector
(
float
x
,
float
y
,
float
z
)
:
x
(
x
)
,
y
(
y
)
,
z
(
z
)
{
}
;
void
set
(
float
_x
,
float
_y
,
float
_z
)
{
x
=
_x
;
y
=
_y
;
z
=
_z
;
}
float
get_length_squared
(
)
const
{
return
x
*
x
+
y
*
y
+
z
*
z
;
}
float
get_length
(
)
const
{
return
std
::
sqrt
(
get_length_squared
(
)
)
;
}
void
normalize
(
)
{
float
len
=
get_length
(
)
;
x
/=
len
;
y
/=
len
;
z
/=
len
;
}
float
dot
(
const
c_vector
&
vec
)
const
{
return
x
*
vec
.
x
+
y
*
vec
.
y
+
z
*
vec
.
z
;
}
c_vector
cross
(
const
c_vector
&
vec
)
const
{
return
c_vector
(
y
*
vec
.
z
-
vec
.
y
*
z
,
z
*
vec
.
x
-
vec
.
z
*
x
,
x
*
vec
.
y
-
vec
.
x
*
y
)
;
}
void
zero_near_zero
(
)
{
if
(
std
::
abs
(
x
)



P.S по желанию можешь сделать проверку на seat_index
 
Ответить с цитированием

  #3  
Старый 13.01.2025, 17:01
ARMOR
Флудер
Регистрация: 02.02.2019
Сообщений: 5,070
С нами: 3831395

Репутация: 183


По умолчанию

Цитата:
Сообщение от Vintik  

Не нашёл документацию ни по первому, ни по второму API.
Есть проект, в котором используется PSDK, SAMP API и imgui.

Задача: перебрать всех игроков в зоне стрима, получить ближайшего из тех, кто в машине, получить его samp (0.3.7-r3) id, вывести его id в чат.
Кажется, просто, но что-то не получается найти нужные функции (логику я сам напишу, просто укажите какие функции нужны для этого [перебор игроков, проверка в машине ли, получение по ped-у его samp id] — а лучше расскажите где вы нашли их, документации не вижу).

Задача 2: выводить актуальный id в имгуи окно, с имгуи что-то тоже примеров не нашёл. Можно пример простейшего окна имгуи (пусть со статическим текстом)?

Заранее спасибо.
Перебор самповского пула игроков и получение их самповского CPed ( Доработай там, а то выводит 10000 если педа в тачке вообще нет)



C++:





Код:
#include "plugin.h"
#include "sampapi/CNetGame.h"
#include "sampapi/CInput.h"
#include "sampapi/CChat.h"
#include "CPed.h"
using
namespace
plugin
;
namespace
samp
=
sampapi
::
v037r3
;
class
Main
{
public
:
static
void
TestPool
(
const
char
*
szArg
)
{
samp
::
CPlayerPool
*
pPlayerPool
=
samp
::
RefNetGame
(
)
->
GetPlayerPool
(
)
;
if
(
pPlayerPool
)
{
// Топ самп метод, поставить заоблачное значение чтобы не ебать себе мозги. Не рекомендую кароч
float
fDist
{
10000.f
}
;
sampapi
::
ID nPlayerID
{
}
;
for
(
sampapi
::
ID i
{
}
;
i

IsConnected
(
i
)
)
{
samp
::
CRemotePlayer
*
pPlayer
=
pPlayerPool
->
GetPlayer
(
i
)
;
if
(
pPlayer
&&
pPlayer
->
DoesExist
(
)
)
{
CPed
*
pGamePed
=
(
CPed
*
)
pPlayer
->
m_pPed
->
m_pGamePed
;
if
(
pGamePed
&&
pGamePed
->
m_nPedFlags
.
bInVehicle
)
{
float
fTempDist
=
pPlayer
->
m_pVehicle
->
GetDistanceToLocalPlayer
(
)
;
if
(
fTempDist

m_nId
;
}
}
}
}
}
std
::
string szResult
=
"Ближайший игрок в транспорте: "
+
std
::
to_string
(
nPlayerID
)
+
" | Дистанция: "
+
std
::
to_string
(
fDist
)
;
samp
::
RefChat
(
)
->
AddMessage
(
0xFFFFFFFF
,
szResult
.
c_str
(
)
)
;
}
}
Main
(
)
{
Events
::
drawingEvent
+=
[
]
(
)
{
static
bool
bInit
{
}
;
if
(
!
bInit
&&
samp
::
RefNetGame
(
)
)
{
samp
::
RefChat
(
)
->
AddMessage
(
-
1
,
"Game init!"
)
;
samp
::
RefInputBox
(
)
->
AddCommand
(
"testpool"
,
TestPool
)
;
bInit
=
true
;
}
}
;
}
~
Main
(
)
{
}
;
}
g_Main
;
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.

×

Создать сделку

Продавец: ник или ID

Название сделки:

Сумма USDT:

Срок сделки, дней:

Кто платит комиссию:

Условия сделки:

После создания сделки средства будут зарезервированы в холде до завершения сделки.

×

Мои сделки

Загрузка...
×

Сделка


Загрузка чата...