Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Мануал Bang Mode

Статус
В этой теме нельзя размещать новые ответы.

Flime

Ученик
Здравствуйте!

Представляю вам систему carwars для вашего сервера.
Очень похожа на:

Отличия:
Стреляет не по направлению камеры, а по углу поворота машины.

Приступим.

Нужные инклуды:



В начало мода:

PHP:
new _carObjects[MAX_VEHICLES][2];
new _objectOwn[MAX_OBJECTS];
OnPlayerSpawn
PHP:
switch(random(3))
{
	case 0: StartCarWarsForPlayer(playerid, -290.6818,1325.1472,57.3888,87.9175);
	case 1: StartCarWarsForPlayer(playerid, -290.6818,1313.2625,57.3888,87.9175);
	case 2: StartCarWarsForPlayer(playerid, -290.6818,1299.3246,57.3888,87.9175);
}

Ко всем stock:
PHP:
stock StartCarWarsForPlayer(const playerid, Float:_x, Float: _y, Float: _z, Float: _angel)
{
    if(GetPVarInt(playerid, "_car") != 0)
    {
        DestroyObject(_carObjects[GetPVarInt(playerid, "_car")][0]);
		DestroyObject(_carObjects[GetPVarInt(playerid, "_car")][1]);
	    DestroyVehicle(GetPVarInt(playerid, "_car"));
	    DeletePVar(playerid, "_car");
    }
    new _car = CreateVehicle(541, _x, _y, _z, _angel, random(128), random(128), 9999999);
    SetPVarInt(playerid, "_car", _car);
    SetVehicleVirtualWorld(_car, 8);
	SetPlayerVirtualWorld(playerid, 8);
	SetPlayerColor(playerid,0xFF0000AA);
    SetVehicleParamsEx(_car,1,1,0,0,0,0,0);
    _carObjects[_car][0] = CreateObject(3786,0,0,-1000,0,0,0,100);
	_carObjects[_car][1] = CreateObject(3786,0,0,-1000,0,0,0,100);
	AttachObjectToVehicle(_carObjects[_car][0], _car, -1.200000,0.000000,-0.075000,43.200008,0.000001,269.999877);
	AttachObjectToVehicle(_carObjects[_car][1], _car, 1.200000,0.000000,-0.075000,43.200008,0.000001, 269.999877);
    PutPlayerInVehicle(playerid, _car, 0);
    GivePlayerWeaponEx(playerid,  35, 999999);
    SetVehicleHealth(_car, 15000.0);
}
В public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
PHP:
if(newkeys & 4 && GetPlayerVehicleID(playerid) == GetPVarInt(playerid, "_car"))
{
    new vehicleid = GetPlayerVehicleID(playerid);
	if(GetPVarInt(playerid,"_RocketReloader") > 0) return 1;
    SetPVarInt(playerid, "_RocketReloader",1);
	new _rocket;
	new Float:_position[2][3];
    new Float:_corner;
	GetVehicleZAngle(vehicleid, _corner);
    GetVehiclePos(vehicleid, _position[0][0],_position[0][1],_position[0][2]);
	_rocket = CreateObject(345, _position[0][0],_position[0][1],_position[0][2]+0.3,0,0,_corner);
	PositionFromVehicleOffset(vehicleid,0.0,100.0,0.0,_position[1][0],_position[1][1],_position[1][2]);
	MoveObject(_rocket, _position[1][0],_position[1][1],_position[1][2], 100.0);
	_objectOwn[_rocket] = playerid;
	SetTimerEx("RocketUpdate", 10, false, "i", _rocket);
}
Далее создаем новый паблик:

PHP:
forward RocketUpdate(objectid);
public RocketUpdate(objectid)
{
	if(!IsValidObject(objectid)) return 1;
	new _j = -1, Float: _pos[3];
	GetObjectPos(objectid, _pos[0], _pos[1], _pos[2]);
	new Float: _pointZ;
	MapAndreas_FindZ_For2DCoord(_pos[0],_pos[1],_pointZ);
	if(_pos[2] < _pointZ)
	{
		CreateExplosion(_pos[0], _pos[1], _pos[2], 2, 40.0);
		_objectOwn[objectid] = INVALID_PLAYER_ID;
		DestroyObject(objectid);
	    return 1;
	}
	new Float: pos_[3];
	while(++_j != MAX_VEHICLES)
	{
	    if(!IsValidVehicle(_j)) continue;
	    if(_j == GetPVarInt(_objectOwn[objectid], "_car")) continue;
	    GetVehiclePos(_j, pos_[0], pos_[1], pos_[2]);
	    if((floatsqroot(floatpower(floatabs(floatsub(pos_[0], _pos[0])), 2) + floatpower(floatabs(floatsub(pos_[1], _pos[1])), 2) + floatpower(floatabs(floatsub(pos_[2], _pos[2])), 2))) >= 4) continue;
        CreateExplosion(pos_[0], pos_[1], pos_[2], 2, 40.0);
        _objectOwn[objectid] = INVALID_PLAYER_ID;
        DestroyObject(objectid);
        return 1;
	}
	if(!IsObjectMoving(objectid))
	{
	    CreateExplosion(_pos[0], _pos[1], _pos[2], 2, 40.0);
		_objectOwn[objectid] = INVALID_PLAYER_ID;
		DestroyObject(objectid);
	    return 1;
	}
	SetTimerEx("RocketUpdate", 10, false, "i", objectid);
	return 1;
}
В 1 сек таймер:

PHP:
new _car = GetPVarInt(playerid, "_car");
new Float:_health;
GetVehicleHealth(_car, _health);
if(_health > 200.0) SetPlayerHealth(playerid, floatround(_health / 150.0));
UpdateVehicleDamageStatus(_car, 0, 0, 0, 0);
if(GetPVarInt(playerid,"_RocketReloader") > 0) SetPVarInt(playerid, "_RocketReloader",GetPVarInt(playerid,"_RocketReloader")-1);
В OnVehicleDeath(vehicleid, killerid)

PHP:
new i = GetMaxPlayers();
do
{
	--i;
	if(!IsPlayerConnected(i) || GetPVarInt(i,"_car") != vehicleid) continue;
	break;
}
while(i);
SendClientMessage(i, 0xFF6347AA, "Вы уничтожены, ожидайте респавна!");
ResetPlayerWeaponsEx(i);
return 1;
В OnPlayerStateChange(playerid, newstate, oldstate):

PHP:
if(oldstate == PLAYER_STATE_DRIVER && newstate == PLAYER_STATE_ONFOOT) PutPlayerInVehicle(playerid, GetPVarInt(playerid, "_car"), 0);
В данной работе исправлено/сделано:

Исправлено: ракеты летели криво по отношению к машине.
Исправлено: ракеты проходили через некоторые объекты.(решетки, заборы).
Исправлены: все баги, которые были найдены.
Написано: задержка между выстрелами.
Написано: система выхода из авто.
Написано: починка частей авто.
Добавлено: ракеты взрываются, по достижению конечной точки. (100 от начальной точки)
Возможно еще что-то...

Есть некоторые недоработки в системе: Таймер будет очень сильно нагружать сервер (Скоро исправлю).

Автор начальной работы: Seregamil
Автор доработки/вырезки: Flime

Копирование данной статьи без разрешения автора запрещено!
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу