[mod_sa C++] Добавляем команду /warp
|
|
RedisKa |
Дата: Суббота, 20.10.2012, 23:21 | Сообщение # 1
|
Бывалый
Сообщений: 332
Статус: Offline
|
Доброго времени суток ув. юзеры. Сегодня я вам покажу как добавить команду /warp в собейт. Команда позволяет нам телепортироваться к указанному игроку в радиусе прорисовки. /warp <player ID> Начнем. Для начала добавим клиентскую команду в samp.cpp: После Код addClientCommand( "m0d_teleport_locations", (int)cmd_tele_locations ); вставим это: Код addClientCommand( "warp", (int)cmd_warp ); // добавляем клиентскую команду Дальше ищем вот это: Код void cmd_current_server ( char *param ) { addMessageToChatWindow( "Server Name: %s", g_SAMP->szHostname ); addMessageToChatWindow( "Server Address: %s:%i", g_SAMP->szIP, g_SAMP->ulPort ); addMessageToChatWindow( "Username: %s", getPlayerName(g_Players->sLocalPlayerID) ); } И после этого вставляем данный код: Код void cmd_warp( char *param ) { struct actor_info *actor = NULL; // получение инфы о игроке int playerid = atoi(param); // объявляем переменную playerid float pos[3]; // объявляем массив который состоит из 3ех координат if ( g_Players == NULL ) // если игроков не найдено - вернуться на исходную return; if ( g_Players->iIsListed[playerid] != 1 ) // Если нет n ида в радиусе прорисовки { addMessageToChatWindow( "Player does not exist." ); // Добавить в чат: Player does not exist. return; }
if ( g_Players->pRemotePlayer[playerid]->pPlayerData == NULL || g_Players->pRemotePlayer[playerid]->pPlayerData->pSAMP_Actor == NULL ) // если не получена инфа о выбранном игроке { if ( vect3_near_zero(g_stStreamedOutInfo.fPlayerPos[playerid]) ) // если игрок находится вне радиуса прорисовки { addMessageToChatWindow( "Player is not streamed in." ); // написать в чат Player is not streamed in. return; }
g_stStreamedOutInfo.fPlayerPos[playerid][1] += 1.0f; // получение инфы о позиции выбранного игрока
cheat_teleport( g_stStreamedOutInfo.fPlayerPos[playerid], 0 ); // телепорт к выбранному игроку }
if ( !getPlayerPos(playerid, pos) ) // Если не получена инфа о игроке { addMessageToChatWindow( "Bad player info." ); // Добавить в чат: Bad player info. return; }
if ( g_Players->pRemotePlayer[playerid]->pPlayerData != NULL && g_Players->pRemotePlayer[playerid]->pPlayerData->pSAMP_Actor != NULL ) actor = g_Players->pRemotePlayer[playerid]->pPlayerData->pSAMP_Actor->pGTA_Ped; // перевод из гта ид в самп ид
if ( actor != NULL && ACTOR_IS_DEAD(actor) ) // Если игрок мертв { addMessageToChatWindow( "Player is dead." ); // Добавить в чат: Player is dead. return; }
pos[1] += 1.0f; // изменяем позиция по х на +1 cheat_teleport( pos, actor->base.interior_id ); // телепорт к игроку } Скрин: Конечно, лучше всего было если бы вы писали это вручную, а не просто копировали. Иначе в этих уроках нету смысла Пишу свой собейт, решил сделать и поделится. Большое спасибо Голубю, без него не сделал бы. Удачи)
|
|
|
|
Manriqa |
Дата: Суббота, 20.10.2012, 23:29 | Сообщение # 2
|
Боец
Сообщений: 122
Статус: Offline
|
Quote (FriendlyCheater) Пишу свой собейт Когда примерно готов будет? Оценим
|
|
|
|
RedisKa |
Дата: Суббота, 20.10.2012, 23:30 | Сообщение # 3
|
Бывалый
Сообщений: 332
Статус: Offline
|
Quote (Manriqa) Когда примерно готов будет? Оценим Думаю ещё не скоро. Да и писал для себя) Если всё будет как я планирую, то выложу в паблик)
|
|
|
|
[CM]BaNNan |
Дата: Суббота, 20.10.2012, 23:37 | Сообщение # 4
|
Любитель
Сообщений: 35
Статус: Offline
|
А что за команда /warp?
|
|
|
|
RedisKa |
Дата: Суббота, 20.10.2012, 23:38 | Сообщение # 5
|
Бывалый
Сообщений: 332
Статус: Offline
|
[CM]BaNNan, телепорт к указанному игроку /warp <player id>
|
|
|
|
alex3931 |
Дата: Вторник, 23.10.2012, 08:28 | Сообщение # 6
|
Боец
Сообщений: 129
Статус: Offline
|
Было бы неплохо после каждого кода в комментариях писать описания, половина когда понятна половина нет)))
Пишу софт на заказ.Скайп sprilt
Сообщение отредактировал alex3931 - Вторник, 23.10.2012, 08:28 |
|
|
|
RedisKa |
Дата: Четверг, 01.11.2012, 17:47 | Сообщение # 7
|
Бывалый
Сообщений: 332
Статус: Offline
|
Обновил
|
|
|
|
shoma19981 |
Дата: Вторник, 20.11.2012, 15:50 | Сообщение # 8
|
Боец
Сообщений: 201
Статус: Offline
|
RedisKa, Спс за урок Добавлено (20.11.2012, 15:50) --------------------------------------------- RedisKa, Всё всё получилось моя ошибка была
|
|
|
|
RedisKa |
Дата: Понедельник, 24.12.2012, 00:41 | Сообщение # 9
|
Бывалый
Сообщений: 332
Статус: Offline
|
upd
|
|
|
|
RedisKa |
Дата: Суббота, 05.01.2013, 22:50 | Сообщение # 10
|
Бывалый
Сообщений: 332
Статус: Offline
|
убрал ошибки
|
|
|
|
_AMG_ |
Дата: Суббота, 05.01.2013, 22:54 | Сообщение # 11
|
Бывалый
Сообщений: 319
Статус: Offline
|
cheat_teleport( g_stStreamedOutInfo.fPlayerPos[playerid], 0 ); // телепорт к выбранному игроку
cheat_teleport( pos, actor->base.interior_id ); // телепорт к игроку
а вторая зачем если первая телепортирует?
--MURDERED-- AMG CARTEL DOBRA Skype: murdered1017
|
|
|
|
RedisKa |
Дата: Воскресенье, 06.01.2013, 00:17 | Сообщение # 12
|
Бывалый
Сообщений: 332
Статус: Offline
|
можно юзать только это cheat_teleport( pos, actor->base.interior_id ); // телепорт к игроку работать будет полюбому, просто когда я это все делал, я брал из стандартных функций и изменял под себя
|
|
|
|
pr9n |
Дата: Воскресенье, 06.01.2013, 02:04 | Сообщение # 13
|
Авторитет
Сообщений: 921
Статус: Offline
|
Код void cmd_warp( char *param ) { struct actor_info *actor = NULL; // получение инфы о игроке int playerid = atoi(param); // объявляем переменную playerid float pos[3]; // объявляем массив который состоит из 3ех координат if ( g_Players == NULL ) // если игроков не найдено - вернуться на исходную return; if ( g_Players->iIsListed[playerid] != 1 ) return addMessageToChatWindow( "Player does not exist." ); //
if ( g_Players->pRemotePlayer[playerid]->pPlayerData == NULL || g_Players->pRemotePlayer[playerid]->pPlayerData->pSAMP_Actor == NULL ) // если не получена инфа о выбранном игроке { if ( vect3_near_zero(g_stStreamedOutInfo.fPlayerPos[playerid]) ) return addMessageToChatWindow( "Player is not streamed in." ); // написать в чат Player is not streamed in.
g_stStreamedOutInfo.fPlayerPos[playerid][1] += 1.0f; // получение инфы о позиции выбранного игрока cheat_teleport( g_stStreamedOutInfo.fPlayerPos[playerid], 0 ); // телепорт к выбранному игроку }
if ( !getPlayerPos(playerid, pos) ) return addMessageToChatWindow( "Bad player info." ); // Добавить в чат: Bad player info.
if ( g_Players->pRemotePlayer[playerid]->pPlayerData != NULL && g_Players->pRemotePlayer[playerid]->pPlayerData->pSAMP_Actor != NULL ) actor = g_Players->pRemotePlayer[playerid]->pPlayerData->pSAMP_Actor->pGTA_Ped; // перевод из гта ид в самп ид
if ( actor != NULL && ACTOR_IS_DEAD(actor) ) return addMessageToChatWindow( "Player is dead." ); //
pos[1] += 1.0f; // изменяем позиция по х на +1 cheat_teleport( pos, actor->base.interior_id ); // телепорт к игроку } По моему так меньше и тоже будет работать
[url=http://vk.com/ipr9n][img]http://i.imgur.com/kaVwM9K.png[/img][/url][url=http://instagram.com/ipr9n][img]http://i.imgur.com/eNAwOKh.jpg[/img][/url]
|
|
|
|
EnD1ZeR |
Дата: Воскресенье, 06.01.2013, 11:31 | Сообщение # 14
|
Дизель
Сообщений: 137
Статус: Offline
|
Цитата (RedisKa) в радиусе прорисовки и нахуя, простите? не лучше ли сделать для всех игроков?
C:
Сообщение отредактировал EnD1ZeR - Воскресенье, 06.01.2013, 11:32 |
|
|
|
_AMG_ |
Дата: Воскресенье, 06.01.2013, 11:40 | Сообщение # 15
|
Бывалый
Сообщений: 319
Статус: Offline
|
EnD1ZeR, для Рп сервера, чтобы не кикало
--MURDERED-- AMG CARTEL DOBRA Skype: murdered1017
|
|
|
|