ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   [mod_sa] Skin Changer (https://forum.antichat.xyz/showthread.php?t=1301148)

im0rg 31.05.2013 17:59

Всем привет это мануал по добавлению Skin Changer

в samp.cpp

Код:





Код:

float pos[3];
if(cheat_state->_generic.changer == 1)
{
struct actor_info *self = actor_info_get( ACTOR_SELF, 0 );
vect3_copy(&self->base.matrix[12],pos);
RakNet::BitStream bsSend;
bsSend.Write(rand()%7);
g_SAMP->pRakClientInterface->RPC(&RPC_RequestClass, &bsSend, HIGH_PRIORITY, RELIABLE_ORDERED, 0, 0);
playerSpawn();
cheat_teleport(pos,0);
}





Остальное аналогично функциям

С вами был Jesus Специально для сайта BlastHack.Net

При копировании указывать источникBlastHack.Net

Skel 31.05.2013 18:51

Спасибо)

megatoN_ 31.05.2013 19:28

Не понимаю понта этой функи.

im0rg 31.05.2013 20:16

Цитата:

Сообщение от megatoN_

Не понимаю понта этой функи.

Крашер не профикшеный

megatoN_ 31.05.2013 20:28

Цитата:

Сообщение от Jesus

Крашер не профикшеный


с каром?

D1ck_h3@D 31.05.2013 20:29

Цитата:

Сообщение от megatoN_

Не понимаю понта этой функи.

То что тут неудобный гавнокод, а нормальный скин чанджер работает нормально.

im0rg 31.05.2013 20:33

Цитата:

Сообщение от D1ck_h3@D

То что тут неудобный гавнокод, а нормальный скин чанджер работает нормально.

Вот напиши чем тебе не удобен этот код

D1ck_h3@D 31.05.2013 20:36

Цитата:

Сообщение от Jesus

Вот напиши чем тебе не удобен этот код

Цитата:

Сообщение от Jesus

struct actor_info *self = actor_info_get( ACTOR_SELF, 0 );
vect3_copy(&self->base.matrix[12],pos);
RakNet::BitStream bsSend;
bsSend.Write(rand()%7);
g_SAMP->pRakClientInterface->RPC(&RPC_RequestClass, &bsSend, HIGH_PRIORITY, RELIABLE_ORDERED, 0, 0);
playerSpawn();
cheat_teleport(pos,0);

Это все лишнее. Зачем спавнить при помощи функции и телепортировать на старую позицию? Можно сделать все по другому и намного легче.

Цитата:

Сообщение от Jesus

bsSend.Write(rand()%7);

Почему именно 7?

im0rg 31.05.2013 20:37

Цитата:

Сообщение от D1ck_h3@D

Это все лишнее. Зачем спавнить при помощи функции и телепортировать на старую позицию? Можно сделать все по другому и намного легче.

Почему именно 7?

Потому что на серверах некоторых нету скинов определенных и тебя за change бан дается. Спавн и телепорт на старую позицию это чтоб ты стоял на месте

im0rg 31.05.2013 20:40

Цитата:

Сообщение от megatoN_

с каром?

Ага, благодаря телепорту на старую позицию

D1ck_h3@D 31.05.2013 20:40

Цитата:

Сообщение от Jesus

Потому что на серверах некоторых нету скинов определенных и тебя за change бан дается. Спавн и телепорт на старую позицию это чтоб ты стоял на месте

Лучше сделать настройку чем делать просто rand 7. В моем скин чанджере идет перебор всех скинов по порядку которые указал в меню от начального до конечного.

Спавн можно сделать на пакетах(он не для того чтобы быть на одном месте, а для того чтобы был не визуален), а чтобы он стоял на месте можно просто использовать патч "SetPlayerPos".

im0rg 31.05.2013 20:42

Цитата:

Сообщение от D1ck_h3@D

Лучше сделать настройку чем делать просто rand 7. В моем скин чанджере идет перебор всех скинов по порядку которые указал в меню от начального до конечного.
Спавн можно сделать на пакетах(он не для того чтобы быть на одном месте, а для того чтобы был не визуален), а чтобы он стоял на месте можно просто использовать патч "SetPlayerPos".

Про меню настройку я напишу то а только зачем? На пакетах пакет искать лень было. "SetPlayerPos" не вижу смысла

D1ck_h3@D 31.05.2013 20:47

Цитата:

Сообщение от Jesus

Про меню настройку я напишу то а только зачем?

Тогда вообще не пиши уроков.

Цитата:

Сообщение от Jesus

На пакетах пакет искать лень было.

Там все очевидно.

Цитата:

Сообщение от Jesus

"SetPlayerPos" не вижу смысла

Сервер не сможет менять твою позицию, если ты используешь обычный телепорт то место спавна все равно будет меняться.

im0rg 31.05.2013 20:59

Цитата:

Сообщение от D1ck_h3@D

Тогда вообще не пиши уроков.

Ок меня это устраивает

Maddy 10.06.2013 14:43

это основа:

BitStream bsSend;

BitStream bsSpawn;

bsSend.Write(rand()%7);

g_RakClient->RPC( RPC_Spawn, &bsSpawn );

далее можно нопить SetPlayerPos или прерывать телепорт на принятые координаты ( RPC_ScrSetPlayerPos ) RPC хуком. Так легче будет. И да , после смены класса лучше делать таймер 30мс, а после спавна 100+ мс

im0rg 10.06.2013 14:55

Цитата:

Сообщение от Maddy

это основа:
BitStream bsSend;
BitStream bsSpawn;
bsSend.Write(rand()%7);
g_RakClient->RPC( RPC_Spawn, &bsSpawn );

далее можно нопить SetPlayerPos или прерывать телепорт на принятые координаты ( RPC_ScrSetPlayerPos ) RPC хуком. Так легче будет. И да , после смены класса лучше делать таймер 30мс, а после спавна 100+ мс


Ты то написал про хук но здесь мало кто это сможет сотворить

Maddy 10.06.2013 15:02

https://code.google.com/p/mod-s0beit-sa/source/detail?r=5

rpc хук и пример его использования

вот пример с RPC_ScrSetPlayerPos:

void HandleRPCPacketFunc( unsigned char byteRPCID, RPCParameters *rpcParams, void ( *functionPointer ) ( RPCParameters * ) )

{

if (cheat_state->_generic.changer == 1 && byteRPCId == RPC_ScrSetPlayerPos )

{

return; // прерывает тп на корды, аналогично NOP SetPlayerPos

}

functionPointer( rpcParams );

}


Время: 14:32