Flime
Ученик
Здравствуйте!
Представляю вам систему carwars для вашего сервера.
Очень похожа на:
Отличия:
Стреляет не по направлению камеры, а по углу поворота машины.
Приступим.
Нужные инклуды:
В начало мода:
OnPlayerSpawn
Ко всем stock:
В public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
Далее создаем новый паблик:
В 1 сек таймер:
В OnVehicleDeath(vehicleid, killerid)
В OnPlayerStateChange(playerid, newstate, oldstate):
В данной работе исправлено/сделано:
Исправлено: ракеты летели криво по отношению к машине.
Исправлено: ракеты проходили через некоторые объекты.(решетки, заборы).
Исправлены: все баги, которые были найдены.
Написано: задержка между выстрелами.
Написано: система выхода из авто.
Написано: починка частей авто.
Добавлено: ракеты взрываются, по достижению конечной точки. (100 от начальной точки)
Возможно еще что-то...
Есть некоторые недоработки в системе: Таймер будет очень сильно нагружать сервер (Скоро исправлю).
Автор начальной работы: Seregamil
Автор доработки/вырезки: Flime
Копирование данной статьи без разрешения автора запрещено!
Представляю вам систему carwars для вашего сервера.
Очень похожа на:
Отличия:
Стреляет не по направлению камеры, а по углу поворота машины.
Приступим.
Нужные инклуды:
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
В начало мода:
PHP:
new _carObjects[MAX_VEHICLES][2];
new _objectOwn[MAX_OBJECTS];
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);
}
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;
}
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);
PHP:
new i = GetMaxPlayers();
do
{
--i;
if(!IsPlayerConnected(i) || GetPVarInt(i,"_car") != vehicleid) continue;
break;
}
while(i);
SendClientMessage(i, 0xFF6347AA, "Вы уничтожены, ожидайте респавна!");
ResetPlayerWeaponsEx(i);
return 1;
PHP:
if(oldstate == PLAYER_STATE_DRIVER && newstate == PLAYER_STATE_ONFOOT) PutPlayerInVehicle(playerid, GetPVarInt(playerid, "_car"), 0);
Исправлено: ракеты летели криво по отношению к машине.
Исправлено: ракеты проходили через некоторые объекты.(решетки, заборы).
Исправлены: все баги, которые были найдены.
Написано: задержка между выстрелами.
Написано: система выхода из авто.
Написано: починка частей авто.
Добавлено: ракеты взрываются, по достижению конечной точки. (100 от начальной точки)
Возможно еще что-то...
Есть некоторые недоработки в системе: Таймер будет очень сильно нагружать сервер (Скоро исправлю).
Автор начальной работы: Seregamil
Автор доработки/вырезки: Flime
Копирование данной статьи без разрешения автора запрещено!
Последнее редактирование:
