PDA

Просмотр полной версии : [mod_sa] Skin Changer


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 (http://blasthack.net/members/jesus.87/) Специально для сайта BlastHack.Net (http://blasthack.net/)

При копировании указывать источникBlastHack.Net (http://blasthack.net/)

Skel
31.05.2013, 18:51
Спасибо)

megatoN_
31.05.2013, 19:28
Не понимаю понта этой функи.

im0rg
31.05.2013, 20:16
Не понимаю понта этой функи.


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

megatoN_
31.05.2013, 20:28
Крашер не профикшеный




с каром?

D1ck_h3@D
31.05.2013, 20:29
Не понимаю понта этой функи.


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

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


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

D1ck_h3@D
31.05.2013, 20:36
Вот напиши чем тебе не удобен этот код





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);


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



bsSend.Write(rand()%7);


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

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

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


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

im0rg
31.05.2013, 20:40
с каром?


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

D1ck_h3@D
31.05.2013, 20:40
Потому что на серверах некоторых нету скинов определенных и тебя за change бан дается. Спавн и телепорт на старую позицию это чтоб ты стоял на месте


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

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

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


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

D1ck_h3@D
31.05.2013, 20:47
Про меню настройку я напишу то а только зачем?


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



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


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



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


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

im0rg
31.05.2013, 20:59
Тогда вообще не пиши уроков.


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

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
это основа:
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 (https://www.blast.hk/redirect/aHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9tb2QtczBiZWl0LX NhL3NvdXJjZS9kZXRhaWw_cj01)

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 );

}