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

  #31  
Старый 06.08.2019, 02:56
_=Gigant=_
Участник форума
Регистрация: 19.01.2017
Сообщений: 130
С нами: 4901705

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

C++:





Код:
bool
IsPlayerInCar
(
int
PlayerID
)
{
if
(
g_Players
==
NULL
)
return
NULL
;
if
(
PlayerID
==
g_Players
->
sLocalPlayerID
)
return
NULL
;
if
(
g_Players
->
pRemotePlayer
==
NULL
)
return
NULL
;
if
(
g_Players
->
pRemotePlayer
[
PlayerID
]
->
pPlayerData
==
NULL
)
return
NULL
;
if
(
g_Players
->
pRemotePlayer
[
PlayerID
]
->
pPlayerData
->
pSAMP_Actor
==
NULL
)
return
NULL
;
return
g_Players
->
pRemotePlayer
[
PlayerID
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
->
pedFlags
.
bInVehicle
;
}
;


C++:





Код:
bool
IsOurPlayerInCar
(
)
{
if
(
g_Players
==
NULL
)
return
NULL
;
if
(
g_Players
->
pLocalPlayer
==
NULL
)
return
NULL
;
if
(
g_Players
->
pLocalPlayer
->
pSAMP_Actor
==
NULL
)
return
NULL
;
return
g_Players
->
pLocalPlayer
->
pSAMP_Actor
->
pGTA_Ped
->
pedFlags
.
bInVehicle
;
}
;


C++:





Код:
//usage "%u" getPlayerVehicleModelID_V2(id...)
uint16_t
getPlayerVehicleModelID_V2
(
int
iPlayerID
)
{
if
(
g_Players
==
NULL
||
iPlayerID

SAMP_MAX_PLAYERS
)
return
NULL
;
if
(
iPlayerID
==
g_Players
->
sLocalPlayerID
)
{
if
(
g_Players
->
pLocalPlayer
->
pSAMP_Actor
==
NULL
||
g_Players
->
pLocalPlayer
->
pSAMP_Actor
->
pGTA_Ped
->
vehicle
==
NULL
)
return
NULL
;
if
(
IsOurPlayerInCar
(
)
)
return
g_Players
->
pLocalPlayer
->
pSAMP_Actor
->
pGTA_Ped
->
vehicle
->
base
.
model_alt_id
;
}
if
(
g_Players
->
pRemotePlayer
[
iPlayerID
]
->
pPlayerData
==
NULL
)
return
NULL
;
if
(
g_Players
->
pRemotePlayer
[
iPlayerID
]
->
pPlayerData
->
pSAMP_Vehicle
==
NULL
)
return
NULL
;
if
(
g_Players
->
pRemotePlayer
[
iPlayerID
]
->
pPlayerData
->
pSAMP_Vehicle
->
pGTA_Vehicle
==
NULL
)
return
NULL
;
if
(
IsPlayerInCar
(
iPlayerID
)
)
return
g_Players
->
pRemotePlayer
[
iPlayerID
]
->
pPlayerData
->
pSAMP_Vehicle
->
pGTA_Vehicle
->
base
.
model_alt_id
;
return
NULL
;
}


C++:





Код:
// usage "%s" getPlayerVehicleName(id...);
const
char
*
getPlayerVehicleName
(
int
PlayerID
)
{
if
(
g_Players
==
NULL
||
PlayerID

SAMP_MAX_PLAYERS
)
return
NULL
;
const
struct
vehicle_entry
*
get_vehicles
;
if
(
PlayerID
==
g_Players
->
sLocalPlayerID
)
{
if
(
g_Players
->
pLocalPlayer
->
pSAMP_Actor
==
NULL
||
g_Players
->
pLocalPlayer
->
pSAMP_Actor
->
pGTA_Ped
->
vehicle
==
NULL
)
return
NULL
;
if
(
IsOurPlayerInCar
(
)
)
{
get_vehicles
=
gta_vehicle_get_by_id
(
getPlayerVehicleModelID_V2
(
PlayerID
)
)
;
return
get_vehicles
->
name
;
}
}
if
(
g_Players
->
pRemotePlayer
[
PlayerID
]
->
pPlayerData
==
NULL
)
return
NULL
;
if
(
g_Players
->
pRemotePlayer
[
PlayerID
]
->
pPlayerData
->
pSAMP_Vehicle
==
NULL
)
return
NULL
;
if
(
g_Players
->
pRemotePlayer
[
PlayerID
]
->
pPlayerData
->
pSAMP_Vehicle
->
pGTA_Vehicle
==
NULL
)
return
NULL
;
if
(
IsPlayerInCar
(
PlayerID
)
)
{
get_vehicles
=
gta_vehicle_get_by_id
(
getPlayerVehicleModelID_V2
(
PlayerID
)
)
;
return
get_vehicles
->
name
;
}
return
NULL
;
}
 
Ответить с цитированием

  #32  
Старый 10.08.2019, 11:23
Cake_
Участник форума
Регистрация: 04.04.2017
Сообщений: 263
С нами: 4793630

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

Конвертация utf8 в ansi

C++:





Код:
char
*
utf8_to_ansi
(
char
*
szU8
)
{
int
wcsLen
=
::
MultiByteToWideChar
(
CP_UTF8
,
NULL
,
szU8
,
strlen
(
szU8
)
,
NULL
,
0
)
;
wchar_t
*
wszString
=
new
wchar_t
[
wcsLen
+
1
]
;
::
MultiByteToWideChar
(
CP_UTF8
,
NULL
,
szU8
,
strlen
(
szU8
)
,
wszString
,
wcsLen
)
;
wszString
[
wcsLen
]
=
'\0'
;
int
ansiLen
=
::
WideCharToMultiByte
(
CP_ACP
,
NULL
,
wszString
,
wcslen
(
wszString
)
,
NULL
,
0
,
NULL
,
NULL
)
;
char
*
szAnsi
=
new
char
[
ansiLen
+
1
]
;
::
WideCharToMultiByte
(
CP_ACP
,
NULL
,
wszString
,
wcslen
(
wszString
)
,
szAnsi
,
ansiLen
,
NULL
,
NULL
)
;
szAnsi
[
ansiLen
]
=
'\0'
;
return
szAnsi
;
}
 
Ответить с цитированием

  #33  
Старый 18.08.2019, 21:17
_=Gigant=_
Участник форума
Регистрация: 19.01.2017
Сообщений: 130
С нами: 4901705

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

Цитата:
Сообщение от Спойлер  


C++:





[CODE]
struct
Color2
{
int
r
;
int
g
;
int
b
;
int
a
;
Color2
(
)
{
this
->
r
=
0
;
this
->
g
=
0
;
this
->
b
=
0
;
this
->
a
=
255
;
}
Color2
(
int
r
,
int
g
,
int
b
)
{
this
->
r
=
r
;
this
->
g
=
g
;
this
->
b
=
b
;
this
->
a
=
255
;
}
Color2
(
int
r
,
int
g
,
int
b
,
int
a
)
{
this
->
r
=
r
;
this
->
g
=
g
;
this
->
b
=
b
;
this
->
a
=
a
;
}
Color2
operator
/
(
float
div
)
{
Color2 color
=
*
this
;
color
.
r
=
color
.
r
/
div
;
color
.
g
=
color
.
g
/
div
;
color
.
b
=
color
.
b
/
div
;
return
color
;
}
Color2
&
operator
/=
(
float
div
)
{
Color2
&
color
=
*
this
;
color
.
r
/=
div
;
color
.
g
/=
div
;
color
.
b
/=
div
;
return
color
;
}
Color2
&
operator
*=
(
float
coeff
)
{
Color2
&
color
=
*
this
;
color
.
r
*=
coeff
;
color
.
g
*=
coeff
;
color
.
b
*=
coeff
;
return
color
;
}
static
Color2
FromHSB
(
float
hue
,
float
saturation
,
float
brightness
)
{
float
h
=
hue
==
1.0f
?
0
:
hue
*
6.0f
;
float
f
=
h
-
(
int
)
h
;
float
p
=
brightness
*
(
1.0f
-
saturation
)
;
float
q
=
brightness
*
(
1.0f
-
saturation
*
f
)
;
float
t
=
brightness
*
(
1.0f
-
(
saturation
*
(
1.0f
-
f
)
)
)
;
if
(
h



C++:





Код:
ImVec4
TotalRainbow
(
int
speed
)
{
ImVec4 color
;
static
float
rainbow
;
float
misc
;
DWORD rainbow_x
;
rainbow
+=
misc
=
0.0001f
*
speed
;
rainbow_x
=
Color2
::
ToImColor
(
Color2
::
FromHSB
(
rainbow
,
1.0f
,
1.0f
)
)
;
if
(
rainbow
>
1.f
)
rainbow
=
0.0f
;
return
color
=
Color2
::
ToImColor
(
Color2
::
FromHSB
(
rainbow
,
1.0f
,
1.0f
)
)
;
}


example usage

ImGui::PushStyleColor(ImGuiCol_Text, TotalRainbow(20)); //or in your header file: extern ImVec4 TotalRainbow(int speed = 20)

ImGui::Text("vodka");

ImGui::PopStyleColor(1);

C++:





Код:
D3DCOLOR
CustomImVec4_D3DCOLOR
(
ImVec4 color
)
//use in ImGui::ColorEdit's
{
return
D3DCOLOR_RGBA
(
(
int
)
(
color
.
x
*
255
)
,
(
int
)
(
color
.
y
*
255
)
,
(
int
)
(
color
.
z
*
255
)
,
(
int
)
(
color
.
w
*
255
)
)
;
}


example use

ImVec4 color;

render->D3DBox(,,,CustomImVec4_D3DCOLOR(color));

ImGui::ColorEdit3("##BoxColor", (float*)&color);
 
Ответить с цитированием

  #34  
Старый 04.10.2019, 00:06
Carrentine
Постоянный
Регистрация: 25.12.2018
Сообщений: 568
С нами: 3886298

Репутация: 113


По умолчанию

Описание:находит ближайшего к вашему педу игрока, на определенном радиусе от прицела.

Код:

C++:





[CODE]
void
vect3_copy
(
const
float
in
[
3
]
,
float
out
[
3
]
)
{
memcpy
(
out
,
in
,
sizeof
(
float
)
*
3
)
;
}
float
GetDistance
(
D3DXVECTOR3 target_1
,
D3DXVECTOR3 target_2
)
{
return
sqrt
(
(
target_2
.
x
-
target_1
.
x
)
*
(
target_2
.
x
-
target_1
.
x
)
+
(
target_2
.
y
-
target_1
.
y
)
*
(
target_2
.
y
-
target_1
.
y
)
+
(
target_2
.
z
-
target_1
.
z
)
*
(
target_2
.
z
-
target_1
.
z
)
)
;
}
int
GetNearestPed
(
float
radius
)
{
int
nearestPED
=
-
1
;
float
maxRadius
=
20000.0f
,
currentRadius
;
D3DXVECTOR3 posPed
,
myPosPed
,
screenPos
;
actor_info
*
MyActorInfo
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
pSAMP_Actor
->
pGTA_Ped
;
vect3_copy
(
MyActorInfo
->
base
.
matrix
+
12
,
myPosPed
)
;
for
(
int
i
=
0
;
i

getSAMP
(
)
->
getPlayers
(
)
->
iIsListed
[
i
]
!=
1
||
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
==
NULL
||
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
->
pPlayerData
==
NULL
||
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
->
pPlayerData
->
pSAMP_Actor
==
NULL
||
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
==
NULL
)
continue
;
actor_info
*
ActorInfo
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
;
vect3_copy
(
ActorInfo
->
base
.
matrix
+
12
,
posPed
)
;
SF
->
getGame
(
)
->
convert3DCoordsToScreen
(
posPed
.
x
,
posPed
.
y
,
posPed
.
z
,
&
screenPos
.
x
,
&
screenPos
.
y
)
;
static
float
iX
=
GetSystemMetrics
(
SM_CXSCREEN
)
*
0.5299999714f
;
static
float
iY
=
GetSystemMetrics
(
SM_CYSCREEN
)
*
0.4f
;
if
(
(
(
abs
(
iX
-
screenPos
.
x
)
)
>
radius
)
||
(
(
abs
(
iY
-
screenPos
.
y
)
)
>
radius
)
)
continue
;
currentRadius
=
GetDistance
(
myPosPed
,
posPed
)
;
if
(
currentRadius



Пример:

C++:





[CODE]
int
id
=
GetNearestPed
(
100
)
;
if
(
id

 
Ответить с цитированием

  #35  
Старый 11.10.2019, 20:15
astap_
Постоянный
Регистрация: 05.03.2014
Сообщений: 626
С нами: 6415078

Репутация: 163


По умолчанию

поворачивает камеру на координаты

C++:





[CODE]
float
*
xCam
=
(
float
*
)
0xB6F258
;
DWORD
*
ptrActor
=
(
DWORD
*
)
0xB6F5F0
;
// global vars
void
rotateCamToXY
(
float
x
,
float
y
)
{
DWORD
*
pActorMtrx
=
(
DWORD
*
)
(
(
*
ptrActor
)
+
0x14
)
;
CVector2D
pPos
(
*
(
float
*
)
(
(
*
pActorMtrx
)
+
0x30
)
,
*
(
float
*
)
(
(
*
pActorMtrx
)
+
0x34
)
)
;
CVector2D
cPos
(
*
(
float
*
)
(
0xB6F9CC
)
,
*
(
float
*
)
(
0xB6F9D0
)
)
;
float
ac
=
sqrt
(
pow
(
fabs
(
cPos
.
fX
-
x
)
,
2
)
+
pow
(
fabs
(
cPos
.
fY
-
y
)
,
2
)
)
;
float
alpha
=
asin
(
fabs
(
cPos
.
fX
-
x
)
/
ac
)
;
float
beta
=
acos
(
fabs
(
cPos
.
fX
-
x
)
/
ac
)
;
if
(
(
pPos
.
fX
>
x
)
&&
(
pPos
.
fY

x
)
&&
(
pPos
.
fY
>
y
)
)
*
xCam
=
beta
;
if
(
(
pPos
.
fX

y
)
)
*
xCam
=
(
alpha
+
(
1.57
)
)
;
if
(
(
pPos
.
fX

 
Ответить с цитированием

  #36  
Старый 11.10.2019, 21:31
Cake_
Участник форума
Регистрация: 04.04.2017
Сообщений: 263
С нами: 4793630

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

[QUOTE="astap_"]

поворачивает камеру на координаты

C++:





[CODE]
float
*
xCam
=
(
float
*
)
0xB6F258
;
DWORD
*
ptrActor
=
(
DWORD
*
)
0xB6F5F0
;
// global vars
void
rotateCamToXY
(
float
x
,
float
y
)
{
DWORD
*
pActorMtrx
=
(
DWORD
*
)
(
(
*
ptrActor
)
+
0x14
)
;
CVector2D
pPos
(
*
(
float
*
)
(
(
*
pActorMtrx
)
+
0x30
)
,
*
(
float
*
)
(
(
*
pActorMtrx
)
+
0x34
)
)
;
CVector2D
cPos
(
*
(
float
*
)
(
0xB6F9CC
)
,
*
(
float
*
)
(
0xB6F9D0
)
)
;
float
ac
=
sqrt
(
pow
(
fabs
(
cPos
.
fX
-
x
)
,
2
)
+
pow
(
fabs
(
cPos
.
fY
-
y
)
,
2
)
)
;
float
alpha
=
asin
(
fabs
(
cPos
.
fX
-
x
)
/
ac
)
;
float
beta
=
acos
(
fabs
(
cPos
.
fX
-
x
)
/
ac
)
;
if
(
(
pPos
.
fX
>
x
)
&&
(
pPos
.
fY

x
)
&&
(
pPos
.
fY
>
y
)
)
*
xCam
=
beta
;
if
(
(
pPos
.
fX

y
)
)
*
xCam
=
(
alpha
+
(
1.57
)
)
;
if
(
(
pPos
.
fX

C++:





Код:
void
cameraset
(
float
X
,
float
Y
)
{
CVector mypos
;
CVector enpos
;
CVector vector
;
enpos
.
fX
=
X
;
enpos
.
fY
=
Y
;
CCamera
*
pCamera
=
GAME
->
GetCamera
(
)
;
mypos
=
*
pCamera
->
GetCam
(
pCamera
->
GetActiveCam
(
)
)
->
GetSource
(
)
;
vector
=
mypos
-
enpos
;
float
AngleX
=
atan2f
(
vector
.
fY
,
-
vector
.
fX
)
-
M_PI
/
2
;
*
(
float
*
)
0xB6F258
=
-
(
AngleX
-
M_PI
/
2
)
;
}
 
Ответить с цитированием

  #37  
Старый 11.10.2019, 22:35
Carrentine
Постоянный
Регистрация: 25.12.2018
Сообщений: 568
С нами: 3886298

Репутация: 113


По умолчанию

Описание: находит ближайшую кость противника к прицелу.

Код:

C++:





[CODE]
CVector
GetBonePos
(
INT ID
,
eBone eBone
,
BOOL isOnScreen
)
{
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
iIsListed
[
ID
]
!=
1
||
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
ID
]
==
NULL
||
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
ID
]
->
pPlayerData
==
NULL
||
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
ID
]
->
pPlayerData
->
pSAMP_Actor
==
NULL
||
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
ID
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
==
NULL
)
return
CVector
(
0.0F
,
0.0F
,
0.0F
)
;
if
(
isOnScreen
)
{
CVector BonePosition
;
CVector2D BonePositionOnScreen
;
GAME
->
GetPools
(
)
->
GetPed
(
(
DWORD
*
)
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
ID
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
)
->
GetTransformedBonePosition
(
eBone
,
&
BonePosition
)
;
SF
->
getGame
(
)
->
convert3DCoordsToScreen
(
BonePosition
.
fX
,
BonePosition
.
fY
,
BonePosition
.
fZ
,
&
BonePositionOnScreen
.
fX
,
&
BonePositionOnScreen
.
fY
)
;
return
CVector
(
BonePositionOnScreen
.
fX
,
BonePositionOnScreen
.
fY
,
0.0F
)
;
}
else
{
CVector BonePosition
;
GAME
->
GetPools
(
)
->
GetPed
(
(
DWORD
*
)
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
ID
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
)
->
GetTransformedBonePosition
(
eBone
,
&
BonePosition
)
;
return
CVector
(
BonePosition
.
fX
,
BonePosition
.
fY
,
BonePosition
.
fZ
)
;
}
}
eBone
GetNearestBone
(
int
iID
)
{
eBone
currentBone
[
]
=
{
BONE_RIGHTKNEE
,
BONE_LEFTKNEE
,
BONE_RIGHTELBOW
,
BONE_LEFTELBOW
,
BONE_SPINE1
,
BONE_RIGHTSHOULDER
,
BONE_LEFTSHOULDER
,
BONE_HEAD
}
,
nearestBone
;
float
currentRadius
,
maxRadius
=
20000
;
CVector posBone
;
for
(
int
i
=
0
;
i



Пример:

C++:





Код:
eBone nearestBone
=
GetNearestBone
(
playerID
)
;
 
Ответить с цитированием

  #38  
Старый 31.10.2019, 21:54
BlackKnigga
Постоянный
Регистрация: 10.01.2016
Сообщений: 922
С нами: 5441999

Репутация: 133


По умолчанию

Разработчики, только перешедшие с клео\луа на C++ негодуют из-за необходимости использовать разного рода таймеры и лапшу из GetTickCount'ов вместо полюбившихся функций wait. Но особо ярых фанатов клео это не устраивает, отчего они начинают использовать потоки ради функций вроде Sleep для того чтобы не блокировать цикл игры. Однако это не безопасно. Функции ни GTA ни SAMP'а абсолютно не предназначены для использования в разных потоках и их использование может привести к рандомным крашам.

Выход есть!

Example:





Код:
#include 
#include 
#include "Yet-another-hook-library/hook.h"
#include "sampapi/CChat.h"
#include "coro_wait/coro_wait.h"
using
namespace
sampapi
::
v037r1
;
void
foo
(
)
{
using
namespace
std
::
chrono_literals
;
CChat
*
&
pChat
=
RefChat
(
)
;
while
(
!
pChat
)
{
this_coro
::
wait
(
100
ms
)
;
}
unsigned
int
counter
=
0
;
while
(
true
)
{
pChat
->
AddMessage
(
-
1
,
(
std
::
string
(
"Hello "
)
+
std
::
to_string
(
counter
)
)
.
c_str
(
)
)
;
counter
++
;
this_coro
::
wait
(
1
s
)
;
}
}
void
CGame_Process_hk
(
)
{
static
coro_wait instance
{
foo
}
;
instance
.
process
(
)
;
}
class
coro_wait_example
{
public
:
coro_wait_example
(
)
{
using
CGame_Process_t
=
void
(
__cdecl
*
)
(
)
;
CGame_Process_t CGame_Process
=
reinterpret_cast

(
0x53BEE0
)
;
static
hook
CGame_Process_hook
(
CGame_Process
,
CGame_Process_hk
)
;
}
}
coro_wait_example
;


Выполнение функции foo приостанавливается на время, переданное функции this_coro::wait, и продолжается с того же места. Все это работает в одном потоке, благодаря чему можно не переживать за потокобезопасность вызываемых внутри функций.

В бесконечных или очень больших циклах требуется вызывать wait(0), все по канонам клео.

Функция coro_wait:rocess должна вызываться в потоке игры (перехваченном как в примере, либо в функции mainloop для SF API).

Требуется библиотека Boost.Context!

Исходный код:


GitHub - allwanttokissme/coro_wait: Suspending coroutines by time

Suspending coroutines by time. Contribute to allwanttokissme/coro_wait development by creating an account on GitHub.

github.com


хуки

sampapi
 
Ответить с цитированием

  #39  
Старый 01.11.2019, 16:00
#Northn
Флудер
Регистрация: 10.08.2017
Сообщений: 2,659
С нами: 4609424

Репутация: 183


По умолчанию

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

вроде Sleep для того чтобы не блокировать цикл игры.
Как насчёт std::this_thread::wait_for(time)? Вроде нет проблем же, или я что-то не понимаю?
 
Ответить с цитированием

  #40  
Старый 01.11.2019, 16:14
BlackKnigga
Постоянный
Регистрация: 10.01.2016
Сообщений: 922
С нами: 5441999

Репутация: 133


По умолчанию

Цитата:
Сообщение от #Northn  

Как насчёт std::this_thread::wait_for(time)? Вроде нет проблем же, или я что-то не понимаю?
Оно работает точно также как и Sleep
 
Ответить с цитированием
Ответ





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


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




ANTICHAT ™ © 2001- Antichat Kft.