Просмотр полной версии : [mod_sa] Skin Changer
Всем привет это мануал по добавлению 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/)
megatoN_
31.05.2013, 19:28
Не понимаю понта этой функи.
Не понимаю понта этой функи.
Крашер не профикшеный
megatoN_
31.05.2013, 20:28
Крашер не профикшеный
с каром?
D1ck_h3@D
31.05.2013, 20:29
Не понимаю понта этой функи.
То что тут неудобный гавнокод, а нормальный скин чанджер работает нормально.
То что тут неудобный гавнокод, а нормальный скин чанджер работает нормально.
Вот напиши чем тебе не удобен этот код
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?
Это все лишнее. Зачем спавнить при помощи функции и телепортировать на старую позицию? Можно сделать все по другому и намного легче.
Почему именно 7?
Потому что на серверах некоторых нету скинов определенных и тебя за change бан дается. Спавн и телепорт на старую позицию это чтоб ты стоял на месте
с каром?
Ага, благодаря телепорту на старую позицию
D1ck_h3@D
31.05.2013, 20:40
Потому что на серверах некоторых нету скинов определенных и тебя за change бан дается. Спавн и телепорт на старую позицию это чтоб ты стоял на месте
Лучше сделать настройку чем делать просто rand 7. В моем скин чанджере идет перебор всех скинов по порядку которые указал в меню от начального до конечного.
Спавн можно сделать на пакетах(он не для того чтобы быть на одном месте, а для того чтобы был не визуален), а чтобы он стоял на месте можно просто использовать патч "SetPlayerPos".
Лучше сделать настройку чем делать просто rand 7. В моем скин чанджере идет перебор всех скинов по порядку которые указал в меню от начального до конечного.
Спавн можно сделать на пакетах(он не для того чтобы быть на одном месте, а для того чтобы был не визуален), а чтобы он стоял на месте можно просто использовать патч "SetPlayerPos".
Про меню настройку я напишу то а только зачем? На пакетах пакет искать лень было. "SetPlayerPos" не вижу смысла
D1ck_h3@D
31.05.2013, 20:47
Про меню настройку я напишу то а только зачем?
Тогда вообще не пиши уроков.
На пакетах пакет искать лень было.
Там все очевидно.
"SetPlayerPos" не вижу смысла
Сервер не сможет менять твою позицию, если ты используешь обычный телепорт то место спавна все равно будет меняться.
Тогда вообще не пиши уроков.
Ок меня это устраивает
это основа:
BitStream bsSend;
BitStream bsSpawn;
bsSend.Write(rand()%7);
g_RakClient->RPC( RPC_Spawn, &bsSpawn );
далее можно нопить SetPlayerPos или прерывать телепорт на принятые координаты ( RPC_ScrSetPlayerPos ) RPC хуком. Так легче будет. И да , после смены класса лучше делать таймер 30мс, а после спавна 100+ мс
это основа:
BitStream bsSend;
BitStream bsSpawn;
bsSend.Write(rand()%7);
g_RakClient->RPC( RPC_Spawn, &bsSpawn );
далее можно нопить SetPlayerPos или прерывать телепорт на принятые координаты ( RPC_ScrSetPlayerPos ) RPC хуком. Так легче будет. И да , после смены класса лучше делать таймер 30мс, а после спавна 100+ мс
Ты то написал про хук но здесь мало кто это сможет сотворить
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 );
}
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot