free.time_
Умник
Здравствуйте уважаемые пользователи Pawno-Info.Ru.
Хотелось бы вам представить систему DropGun, сразу хочу сказать система не моя, и я взял ее с
Но я его переделал под себя и в лучшую сторону!
Версия оригинальной системы 1.3, я ее изменил, и пусть это будет версия 1.4, и так ее изменения:
• Система была на mxini, теперь переведена на MySQL r8.
• Действия были через команды, теперь на кнопках.
• Исправлены мелкие баги.
Если кто-то из "профессионалов" решит обосрать данный код, то я сразу попрошу пройти мимо.
Да, в некоторых местах код не оптимизирован, но он и не такой ужасный, все работает хорошо и быстро, багов не замечал.
И так приступим:
Идем в начало мода, или в то место, где у вас обычно присутствует enum, и вставляем следующее:
Это у нас данные о оружии.
Далее мы идем к нашим переменным(new) и вставляем это:
Тут у нас названия оружия для вывода на экран, и иды модельки(объекта).
Сейчас нам надо перейти к паблику OnPlayerKeyStateChange, и вставить следующее:
Быстро объясню, данный паблик отвечает реагирует на нажатие клавиш.
if (newkeys == KEY_NO) - Проверка нажата ли клавиша, в нашем случае клавиша 'N'
if (newkeys == KEY_YES) - Клавиша "Y"
Иды кнопок вот:
Идем дальше, нам нужно создать паблик загрузки оружия из нашей базы данных:
Ко всем define прошу добавить:
Далее нам необходимо перейти в паблик OnGameModeInit, и добавить туда следующее:
Данный паблик вызывается при запуске мода, и с помощью этой функции мы будем подключаться к нашей базе данных "guns", и произойдет вызов паблика LoadGuns.
Теперь нам надо сделать сохранения оружия на земле, в конец мода:
Данный паблик вызывается только после того, как мы выбросим оружие на землю, он запишет модель оружия, координаты, кол-во патронов.
И самое последнее, добавляем в конец мода:
Этот сток мы используем чтобы забрать у игрока определенное оружие, когда он его выбрасывает.
Теперь нам необходимо перейти в БД и создать таблицу под названием guns(регистр учитывается),
Далее переходим в нашу созданную таблицу guns, и выбираем раздел "SQL"
И вставляем следующее:
Вроде бы все, если есть какие-то ошибки, баги, недоработки, может писать:
• В комментарии
• Skype
•
Помогу чем смогу.
UPDATE:
Система авто очистки территории и БД от моделей
Идем в public OnGameModeInit() и добавляем следующее:
1000 - это миллисекунды, т.е. 1 секунда, выставляете свое значение!
Далее в конец мода и добавляем это:
Писал на скорую руку, если будут баги, пишите.
Хотелось бы вам представить систему DropGun, сразу хочу сказать система не моя, и я взял ее с
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
(не реклама), автор
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
.Но я его переделал под себя и в лучшую сторону!
Версия оригинальной системы 1.3, я ее изменил, и пусть это будет версия 1.4, и так ее изменения:
• Система была на mxini, теперь переведена на MySQL r8.
• Действия были через команды, теперь на кнопках.
• Исправлены мелкие баги.
Если кто-то из "профессионалов" решит обосрать данный код, то я сразу попрошу пройти мимо.
Да, в некоторых местах код не оптимизирован, но он и не такой ужасный, все работает хорошо и быстро, багов не замечал.
И так приступим:
Идем в начало мода, или в то место, где у вас обычно присутствует enum, и вставляем следующее:
PHP:
enum dGunEnum
{
Float:ObjPos[3],
ObjID,
ObjData[2]
};
new dGunData[MAX_OBJ][dGunEnum];
Далее мы идем к нашим переменным(new) и вставляем это:
PHP:
new GunNames[48][] = {
"Nothink", "Brass Knuckles", "Golf Club", "Nitestick", "Knife", "Baseball Bat",
"Showel", "Pool Cue", "Katana", "Chainsaw", "Purple Dildo", "Small White Dildo",
"Long White Dildo", "Vibrator", "Flowers", "Cane", "Grenade", "Tear Gas", "Molotov",
"Vehicle Missile", "Hydra Flare", "Jetpack", "Glock", "Silenced Colt", "Desert Eagle",
"Shotgun", "Sawn Off", "Combat Shotgun", "Micro UZI", "MP5", "AK47", "M4", "Tec9",
"Rifle", "Sniper Rifle", "Rocket Launcher", "HS Rocket Launcher", "Flamethrower", "Minigun",
"Satchel Charge", "Detonator", "Spraycan", "Fire Extinguisher", "Camera", "Nightvision",
"Infrared Vision", "Parachute", "Fake Pistol"
};
// -----------------------------------------------------------------------------
new GunObjects[47] = {
0,331,333,334,335,336,337,338,339,341,321,322,323,324,325,326,342,343,344,
0,0,0,346,347,348,349,350,351,352,353,355,356,372,357,358,359,360,361,362,
363,364,365,366,367,368,368,371
};
Сейчас нам надо перейти к паблику OnPlayerKeyStateChange, и вставить следующее:
PHP:
if (newkeys == KEY_NO)
{
if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT) return 1;
new GunID = GetPlayerWeapon(playerid);
new GunAmmo = GetPlayerAmmo(playerid);
if(GunID > 0 && GunAmmo != 0)
{
new f = MAX_OBJ+1;
for(new a = 0; a < MAX_OBJ; a++)
{
if(dGunData[a][ObjPos][0] == 0.0)
{
f = a;
break;
}
}
if(f > MAX_OBJ) return SendClientMessage(playerid, 0x33AA3300, "Вы не можете выбросить оружие.");
SetPVarInt(playerid, "fe", f);
RemovePlayerWeapon(playerid, GunID);
dGunData[f][ObjData][0] = GunID;
dGunData[f][ObjData][1] = GunAmmo;
GetPlayerPos(playerid, dGunData[f][ObjPos][0], dGunData[f][ObjPos][1], dGunData[f][ObjPos][2]);
dGunData[f][ObjID] = CreateObject(GunObjects[GunID], dGunData[f][ObjPos][0], dGunData[f][ObjPos][1], dGunData[f][ObjPos][2]-1, 93.7, 120.0, 120.0);
new buffer[50];
SaveGunsDrop(f);
format(buffer, sizeof(buffer), "Вы выбросили: {77dd77}%s", GunNames[dGunData[f][ObjData][0]]);
SendClientMessage(playerid, 0x33AA3300, buffer);
}
}
if (newkeys == KEY_YES)
{
if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT) return 1;
new f = MAX_OBJ+1;
new queryip[160];
for(new a = 0; a < MAX_OBJ; a++)
{
if(IsPlayerInRangeOfPoint(playerid, 2.0, dGunData[a][ObjPos][0], dGunData[a][ObjPos][1], dGunData[a][ObjPos][2]))
{
f = a;
break;
}
}
if(f > MAX_OBJ) return SendClientMessage(playerid, 0x33AA3300, "Вы не можете поднять оружие");
DestroyObject(dGunData[f][ObjID]);
format(queryip,sizeof(queryip), "DELETE FROM "TABLE_GUNS" WHERE id = '%d'", dGunData[f][ObjID]);
mysql_function_query(connectionHandl, queryip, false,"","");
GivePlayerWeapon(playerid, dGunData[f][ObjData][0], dGunData[f][ObjData][1]);
dGunData[f][ObjPos][0] = 0.0;
dGunData[f][ObjPos][1] = 0.0;
dGunData[f][ObjPos][2] = 0.0;
dGunData[f][ObjID] = -1;
dGunData[f][ObjData][1] = 0;
new buffer[50];
format(buffer, sizeof(buffer), "Вы подняли: {77dd77}%s", GunNames[dGunData[f][ObjData][0]]);
SendClientMessage(playerid, 0x33AA3300, buffer);
return 1;
}
if (newkeys == KEY_NO) - Проверка нажата ли клавиша, в нашем случае клавиша 'N'
if (newkeys == KEY_YES) - Клавиша "Y"
Иды кнопок вот:
PHP:
KEY_CROUCH 2 Присесть
KEY_FIRE 4 Огонь
KEY_SPRINT 8 Спринт
KEY_SECONDARY_ATTACK 16 Вторичная атака
KEY_JUMP 32 Прыжок
KEY_LOOK_RIGHT 64 Смотреть в право
KEY_HANDBRAKE 128 Ручной тормоз
KEY_LOOK_LEFT 256 Смотреть в лево
KEY_SUBMISSION 512 Субмиссия
KEY_LOOK_BEHIND 512 Смотреть назад
KEY_WALK 1024 Идти шагом
KEY_ANALOG_UP 2048 Аналог вверх
KEY_ANALOG_DOWN 4096 Аналог ввниз
KEY_ANALOG_LEFT 8192 Аналог влево
KEY_ANALOG_RIGHT 16384 Аналог вправо
KEY_UP -128 Вверх
KEY_DOWN 128 Вниз
KEY_LEFT -128 Влево
KEY_RIGHT 128 Вправо
KEY_YES 65536 Разговор (ДА)
KEY_NO 131072 Разговор (НЕТ)
KEY_CTRL_BACK 262144
Идем дальше, нам нужно создать паблик загрузки оружия из нашей базы данных:
PHP:
publics: LoadGuns()
{
for(new n = 0; n < MAX_OBJ; n++) dGunData[n][ObjID] = -1;
new rows,fields;
cache_get_data(rows, fields);
if(rows)
{
for(new g = 0; g < rows; ++g)
{
dGunData[g][ObjID] = cache_get_field_content_int(g,"id");
dGunData[g][ObjPos][0] = cache_get_field_content_float(g,"fic0");
dGunData[g][ObjPos][1] = cache_get_field_content_float(g,"fic1");
dGunData[g][ObjPos][2] = cache_get_field_content_float(g,"fic2");
dGunData[g][ObjData][0] = cache_get_field_content_int(g,"fic3");
dGunData[g][ObjData][1] = cache_get_field_content_int(g,"fic4");
if(dGunData[g][ObjData][0] > 0 && dGunData[g][ObjData][1] != 0 && dGunData[g][ObjPos][0] != 0)
{
dGunData[g][ObjID] = CreateObject(GunObjects[dGunData[g][ObjData][0]], dGunData[g][ObjPos][0], dGunData[g][ObjPos][1], dGunData[g][ObjPos][2]-1, 93.7, 120.0, 120.0);
}
}
}
else print("База данных с оружием пуста");
return 1;
}
PHP:
#define MAX_OBJ 50
#define publics:%0(%1) forward %0(%1); public %0(%1)
#define TABLE_GUNS "guns"
PHP:
mysql_function_query(connectionHandl,"SELECT * FROM `guns`",true,"LoadGuns","");
Теперь нам надо сделать сохранения оружия на земле, в конец мода:
PHP:
stock SaveGunsDrop(g)
{
if(dGunData[g][ObjData][0] != 0)
{
mysql_format(connectionHandl,query,512,"INSERT INTO `guns` (`fic0`, `fic1`, `fic2`, `fic3`, `fic4`) VALUES ('%f', '%f', '%f', '%i', '%i')",
dGunData[g][ObjPos][0],
dGunData[g][ObjPos][1],
dGunData[g][ObjPos][2],
dGunData[g][ObjData][0],
dGunData[g][ObjData][1]);
mysql_function_query(connectionHandl, query, false,"","");
}
return 1;
}
И самое последнее, добавляем в конец мода:
PHP:
stock RemovePlayerWeapon(playerid, weaponid)
{
new plyWeapons[12] = 0;
new plyAmmo[12] = 0;
for(new sslot = 0; sslot != 12; sslot++)
{
new wep, ammo;
GetPlayerWeaponData(playerid, sslot, wep, ammo);
if(wep != weaponid && ammo != 0) GetPlayerWeaponData(playerid, sslot, plyWeapons[sslot], plyAmmo[sslot]);
}
ResetPlayerWeapons(playerid);
for(new sslot = 0; sslot != 12; sslot++) if(plyAmmo[sslot] != 0) GivePlayerWeapon(playerid, plyWeapons[sslot], plyAmmo[sslot]);
return 1;
}
Теперь нам необходимо перейти в БД и создать таблицу под названием guns(регистр учитывается),
Далее переходим в нашу созданную таблицу guns, и выбираем раздел "SQL"
И вставляем следующее:
PHP:
CREATE TABLE IF NOT EXISTS `guns` (
`fic0` float NOT NULL,
`fic1` float NOT NULL,
`fic2` float NOT NULL,
`fic3` int(11) NOT NULL,
`fic4` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
• В комментарии
• Skype
•
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Помогу чем смогу.
UPDATE:
Система авто очистки территории и БД от моделей
Идем в public OnGameModeInit() и добавляем следующее:
PHP:
SetTimer("DGuns", 1000, false);
Далее в конец мода и добавляем это:
PHP:
publics: DGuns()
{
new queryip[160];
for(new g = 0; g < MAX_OBJ; g++)
{
if(dGunData[g][ObjData][0] > 0 && dGunData[g][ObjPos][1] != 0)
{
DestroyObject(dGunData[g][ObjID]);
}
}
format(queryip,sizeof(queryip), "DELETE FROM "TABLE_GUNS" WHERE id");
mysql_function_query(connectionHandl, queryip, false,"","");
return true;
}
Последнее редактирование:
