Просмотр полной версии : [Мануал] Падающая бомба
Всем привет, пользователи и гости Pro-Pawn.Ru (Pro-Pawn.Ru). В этом мануале мы попробуем создать падающую бомбу.
Создадим глобальную переменные (обычно их распологают почти в начале мода):
new
BombObject = INVALID_OBJECT_ID;
Создадим команду, с помощью которой мы запустим бомбу.
Если у вас стандартный командный процессор, то в public OnPlayerCommandText:
if(strcmp(cmdtext, "/bomb", true) == 0)
{
if(BombObject != INVALID_OBJECT_ID)
return SendClientMessage(playerid, -1, "Бомба уже падает.");
new
Float: p_pos_x,
Float: p_pos_y,
Float: p_pos_z;
GetPlayerPos(playerid, p_pos_x, p_pos_y, p_pos_z);
BombObject = CreateObject(18849, p_pos_x, p_pos_y, p_pos_z + 50, 0.0, 0.0, 0.0);
MoveObject(BombObject, p_pos_x, p_pos_y, p_pos_z + 6.5, 1);
return SendClientMessageToAll(-1, "Сейчас упадёт бомба, беги!");
}
Если dc_cmd, zcmd, ..., в конец мода:
CMD:bomb(playerid, params[])
{
if(BombObject != INVALID_OBJECT_ID)
return SendClientMessage(playerid, -1, "Бомба уже падает.");
new
Float: p_pos_x,
Float: p_pos_y,
Float: p_pos_z;
GetPlayerPos(playerid, p_pos_x, p_pos_y, p_pos_z);
BombObject = CreateObject(18849, p_pos_x, p_pos_y, p_pos_z + 50, 0.0, 0.0, 0.0);
MoveObject(BombObject, p_pos_x, p_pos_y, p_pos_z + 6.5, 2.0);
return SendClientMessageToAll(-1, "Сейчас упадёт бомба, беги!");
}
В public OnObjectMoved:
if(objectid == BombObject)
{
new
Float: o_pos_x,
Float: o_pos_y,
Float: o_pos_z;
GetObjectPos(objectid, o_pos_x, o_pos_y, o_pos_z);
DestroyObject(objectid);
BombObject = INVALID_OBJECT_ID;
return CreateExplosion(o_pos_x, o_pos_y, o_pos_z - 6.5, 2, 10.0);
}
Автор: Londlem (http://pro-pawn.ru/member.php?2057-Londlem)
Специально для: Pro-Pawn.Ru (http://pro-pawn.ru)
Копирование данной статьи без разрешения автора запрещено!
Salvacore
09.03.2014, 01:48
Бесподобно :3
iStrange
09.03.2014, 02:11
Скорость очень маленькая.
А так - идея реализована отлично!
Salvacore
09.03.2014, 02:15
Скорость очень маленькая.
А так - идея реализована отлично!
Увеличь ;)
iStrange
09.03.2014, 02:20
Увеличь ;)
Это был намёк на то, чтобы он увеличил :D
Смотрел с телефона и думал, что показалось, но нет...
public UpdateBombPos();//Ок
public UpdateBombPos()
{
new Float: p[3];
GetDynamicObjectPos(BombObject, p[0], p[1], p[2]);
if(p[2] - BombPos[2] <= 6)
{
CreateExplosion(p[0], p[1], p[2], 2, 10);
DestroyDynamicObject(BombObject);
KillTimer(BombTimer);
BombObject = -1;
return true;
}
SetDynamicObjectPos(BombObject, p[0], p[1], p[2] - 0.05);
return true;
}
Ди и тут не хватает слэша
if(!strcmp(cmdtext[1], "bomb", true))
Salvacore
09.03.2014, 08:29
Смотрел с телефона и думал, что показалось, но нет...
public UpdateBombPos();//Ок
public UpdateBombPos()
{
new Float: p[3];
GetDynamicObjectPos(BombObject, p[0], p[1], p[2]);
if(p[2] - BombPos[2] <= 6)
{
CreateExplosion(p[0], p[1], p[2], 2, 10);
DestroyDynamicObject(BombObject);
KillTimer(BombTimer);
BombObject = -1;
return true;
}
SetDynamicObjectPos(BombObject, p[0], p[1], p[2] - 0.05);
return true;
}
Ди и тут не хватает слэша
if(!strcmp(cmdtext[1], "bomb", true))
public UpdateBombPos();//Ок
public UpdateBombPos()
Попробуй и ты... Никакой разницы нет...
Seregamil
09.03.2014, 08:31
Зачем использовать стример, если разрешена одна бомба?
Паблик и снова паблик, у меня глюки?
И move object и onobjectmoved будут более экономичней и без таймеров для данной системы
Salvacore
09.03.2014, 08:33
Зачем использовать стример, если разрешена одна бомба?
Паблик и снова паблик, у меня глюки?
И move object и onobjectmoved будут более экономичней и без таймеров для данной системы
Кто то недавно втирал про функционал :D
public UpdateBombPos();//Ок
public UpdateBombPos()
Попробуй и ты... Никакой разницы нет...
О чём ты?
Кто то недавно втирал про функционал :D
Какой тут функционал? Либо ты таймером двигаешь объект, либо одной функцией указываешь финальную позицию и всё тут
Salvacore
09.03.2014, 08:44
О чём ты?
Какой тут функционал? Либо ты таймером двигаешь объект, либо одной функцией указываешь финальную позицию и всё тут
У вас с ним был спор,сейчас не найду 100%.
Он утверждал о функционале,а ты о скорости.(если не путаю что то)
Seregamil
09.03.2014, 08:47
У вас с ним был спор,сейчас не найду 100%.
Он утверждал о функционале,а ты о скорости.(если не путаю что то)
Включил логику, от того, что я предложил прирастет скорость, а функционал будет более плавным.
У вас с ним был спор,сейчас не найду 100%.
Он утверждал о функционале,а ты о скорости.(если не путаю что то)
Ситуация совсем иная была. Да и тут от move object и к функционалу, и к скорости, и к красоте кода прибавиться
Salvacore
09.03.2014, 09:40
Ситуация совсем иная была. Да и тут от move object и к функционалу, и к скорости, и к красоте кода прибавиться
Передам автору все ваши пожелания, надеюсь вы будете довольны ;)
Смотрел с телефона и думал, что показалось, но нет...
public UpdateBombPos();//Ок
public UpdateBombPos()
{
new Float: p[3];
GetDynamicObjectPos(BombObject, p[0], p[1], p[2]);
if(p[2] - BombPos[2] <= 6)
{
CreateExplosion(p[0], p[1], p[2], 2, 10);
DestroyDynamicObject(BombObject);
KillTimer(BombTimer);
BombObject = -1;
return true;
}
SetDynamicObjectPos(BombObject, p[0], p[1], p[2] - 0.05);
return true;
}
Как бы вариант с форвардом и пабликом будет рабочим.
Ди и тут не хватает слэша
if(!strcmp(cmdtext[1], "bomb", true))
Посмотри внимательно, первый символ не проверяется (cmdtext[1]), ибо все команды начинаются со слэша.
Зачем использовать стример, если разрешена одна бомба?
Паблик и снова паблик, у меня глюки?
И move object и onobjectmoved будут более экономичней и без таймеров для данной системы
Вдруг у игрока на сервере очень много объектов, а игрок просто захотел затестить эту бомбу. Лимит же, или нет?
Кстати да, совсем забыл про стандартные функции MoveObject и OnObjectMoved :|. С ними было бы лучше, да.
Seregamil
09.03.2014, 12:14
Лимит же, или нет?
нет
Как бы вариант с форвардом и пабликом будет рабочим.
В курсе, но давайте лучше называть вещи своими именами и использовать их по своему назначению? Если в ENUM к последней переменной поставить запятую, всё тоже будет прекрасно работать, но это же не значит, что такой вариант верен :)
Посмотри внимательно, первый символ не проверяется (cmdtext[1]), ибо все команды начинаются со слэша.
Ах да, не посмотрел. Прошу прощения. Но это извращение какое-то, по моему :D
Вдруг у игрока на сервере очень много объектов, а игрок просто захотел затестить эту бомбу. Лимит же, или нет?
Ну тогда стоит учесть вариант, когда вокруг игрока будет слишком много объектов и даже стример не справится с их отображением. И вариант, когда у человека руки из задницы и он неправильно вставит код. И ещё кучу всего.
P.S. Это сарказм, если что ;) Хотя можно было бы сделать так:
#if defined STREAMER_TYPE_OBJECT
BombObject = CreateDynamicObject(18849, BombPos[0], BombPos[1], BombPos[2] + 50, 0.0, 0.0, 0.0);
#else
BombObject = CreateObject(18849, BombPos[0], BombPos[1], BombPos[2] + 50, 0.0, 0.0, 0.0);
#endif
И с уничтожением так же. Выйдет полная совместимость :)
Врун!
Это американский скрипт!
Где аммуниция с неба падала!
Salvacore
24.03.2014, 15:28
Врун!
Это американский скрипт!
Где аммуниция с неба падала!
Ссылку в студию.
Кроме вас тут врунов нету.
Очень медленно на видео бомба падает, да и взрыв слабый, юзай 6-ой,он очень большой и красивый.
А так интересная разработка.
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot