Hali, ma amikor haza jöttem letöltöttem a South Central Roleplay játékmódot. Sokan mondták nem valami híres mód de szerintem egészen jó és játszható mód tele apró hibákkal ami javítható. Megtetszett pár dolog és mondom kiveszem belőle mivel tervezek én is több dolgokat megírni a következő projektebe így nem akarom azért is az időmet veszíteni ha már megírták, inkább kiveszem. Azért publikálom, hogy ha másnak is kellene akkor ne kínlódjon keresgélni, ha már én megtettem helyette. A lényeg ebben a szkriptben, hogy ha átmész egy detectoron akkor lekérdezi, hogy van nálad fegyver vagy nincs, így blokkol / tilt a rendszer téged bemenni abba az épületbe vagy boltba. A szkript MySQL r39 -el lett írva, eredeti készítő gondolom iConvict, én csak kivettem és egybe írtam.
Ha van a játékosnál fegyver akkor ezzel kérheted le: IsPlayerArmed(playerid)
Összesen 171 sorból áll, de ezt lehet rövidíteni.
// @ sampfórum.hu
#include a_samp
#include a_mysql
#include sscanf2
#include streamer
#include zcmd
#define SQL_HOST \"\"
#define SQL_USER \"\"
#define SQL_PASS \"\"
#define SQL_DB \"\"
#define MAX_METAL_DETECTORS (20)
enum detectorData {
detectorID,
detectorExists,
Float:detectorPos[4],
detectorInterior,
detectorWorld,
detectorObject[2]
};
new g_iHandle;
new MetalDetectors[MAX_METAL_DETECTORS][detectorData];
public OnGameModeInit() {
g_iHandle = mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS);
if (mysql_errno(g_iHandle) != 0) {
printf(\"[sql] Connection to \\\"%s\\\" failed! Please check the connection settings...\\a\", SQL_HOST);
}
else {
printf(\"[sql] Connection to \\\"%s\\\" passed!\", SQL_HOST);
}
mysql_tquery(g_iHandle, \"SELECT * FROM `detectors`\", \"Detector_Load\", \"\");
return 1;
}
CMD:createdetector(playerid, params[])
{
static
query[255];
for (new i = 0; i < MAX_METAL_DETECTORS; i ++) if (!MetalDetectors[detectorExists])
{
MetalDetectors[detectorExists] = 1;
MetalDetectors[detectorInterior] = GetPlayerInterior(playerid);
MetalDetectors[detectorWorld] = GetPlayerVirtualWorld(playerid);
GetPlayerPos(playerid, MetalDetectors[detectorPos][0], MetalDetectors[detectorPos][1], MetalDetectors[detectorPos][2]);
GetPlayerFacingAngle(playerid, MetalDetectors[detectorPos][3]);
format(query, sizeof(query), \"INSERT INTO `detectors` (`detectorX`, `detectorY`, `detectorZ`, `detectorAngle`, `detectorInterior`, `detectorWorld`) VALUES(\'%.4f\', \'%.4f\', \'%.4f\', \'%.4f\', \'%d\', \'%d\')\", MetalDetectors[detectorPos][0], MetalDetectors[detectorPos][1], MetalDetectors[detectorPos][2], MetalDetectors[detectorPos][3], MetalDetectors[detectorInterior], MetalDetectors[detectorWorld]);
mysql_tquery(g_iHandle, query, \"OnDetectorCreated\", \"d\", i);
Detector_Refresh(i);
SendClientMessage(playerid, -1, \"You have created metal detector.\");
return 1;
}
SendClientMessage(playerid, -1, \"The server has reached a limit for metal detectors.\");
return 1;
}
CMD:destroydetector(playerid, params[])
{
static
id = 0;
if (sscanf(params, \"d\", id))
return SendClientMessage(playerid, -1, \"/destroydetector [detector id]\");
if ((id < 0 || id >= MAX_METAL_DETECTORS) || !MetalDetectors[id][detectorExists])
return SendClientMessage(playerid, -1, \"You have specified an invalid detector ID.\");
Detector_Delete(id);
SendClientMessage(playerid, -1, \"You have successfully destroyed detector.\");
return 1;
}
forward OnDetectorCreated(id);
public OnDetectorCreated(id)
{
MetalDetectors[id][detectorID] = cache_insert_id(g_iHandle);
return 1;
}
forward Detector_Load();
public Detector_Load()
{
static
rows,
fields;
cache_get_data(rows, fields, g_iHandle);
for (new i = 0; i < rows; i ++) if (i < MAX_METAL_DETECTORS)
{
MetalDetectors[detectorExists] = 1;
MetalDetectors[detectorID] = cache_get_field_content_int(i, \"detectorID\", g_iHandle);
MetalDetectors[detectorPos][0] = cache_get_field_content_float(i, \"detectorX\", g_iHandle);
MetalDetectors[detectorPos][1] = cache_get_field_content_float(i, \"detectorY\", g_iHandle);
MetalDetectors[detectorPos][2] = cache_get_field_content_float(i, \"detectorZ\", g_iHandle);
MetalDetectors[detectorPos][3] = cache_get_field_content_float(i, \"detectorAngle\", g_iHandle);
MetalDetectors[detectorInterior] = cache_get_field_content_int(i, \"detectorInterior\", g_iHandle);
MetalDetectors[detectorWorld] = cache_get_field_content_int(i, \"detectorWorld\", g_iHandle);
Detector_Refresh(i);
}
return 1;
}
stock Detector_Delete(id)
{
if (id != -1 && MetalDetectors[id][detectorExists])
{
new
query[64];
DestroyDynamicObject(MetalDetectors[id][detectorObject][0]);
DestroyDynamicObject(MetalDetectors[id][detectorObject][1]);
format(query, sizeof(query), \"DELETE FROM `detectors` WHERE `detectorID` = \'%d\'\", MetalDetectors[id][detectorID]);
mysql_tquery(g_iHandle, query);
MetalDetectors[id][detectorID] = 0;
MetalDetectors[id][detectorExists] = 0;
}
return 1;
}
stock Detector_Refresh(id)
{
if (id != -1 && MetalDetectors[id][detectorExists])
{
MetalDetectors[id][detectorObject][0] = CreateDynamicObject(2412, MetalDetectors[id][detectorPos][0], MetalDetectors[id][detectorPos][1], MetalDetectors[id][detectorPos][2] - 0.9, 0.0, 0.0, MetalDetectors[id][detectorPos][3], MetalDetectors[id][detectorWorld], MetalDetectors[id][detectorInterior]);
MetalDetectors[id][detectorObject][1] = CreateDynamicObject(2412, MetalDetectors[id][detectorPos][0] + (1.0 * floatsin(-(MetalDetectors[id][detectorPos][3] - 90), degrees)), MetalDetectors[id][detectorPos][1] + (1.0 * floatcos(-(MetalDetectors[id][detectorPos][3] - 90), degrees)), MetalDetectors[id][detectorPos][2] - 0.9, 0.0, 0.0, MetalDetectors[id][detectorPos][3], MetalDetectors[id][detectorWorld], MetalDetectors[id][detectorInterior]);
}
return 1;
}
stock Detector_Nearest(playerid)
{
for (new i = 0; i < MAX_METAL_DETECTORS; i ++) if (MetalDetectors[detectorExists])
{
if (IsPlayerInRangeOfPoint(playerid, 1.0, MetalDetectors[detectorPos][0], MetalDetectors[detectorPos][1], MetalDetectors[detectorPos][2]) && GetPlayerInterior(playerid) == MetalDetectors[detectorInterior] && GetPlayerVirtualWorld(playerid) == MetalDetectors[detectorWorld])
return i;
}
return -1;
}
stock IsPlayerArmed(playerid)
{
new
weapon,
ammo;
for (new i = 0; i < 13; i ++) {
GetPlayerWeaponData(playerid, i, weapon, ammo);
if (ammo > 0) {
switch (weapon) {
case 1, 2, 4, 6, 8, 9, 15, 22..38: return 1;
}
}
}
return 0;
}
CREATE TABLE IF NOT EXISTS `detectors` (
`detectorID` int(12) NOT NULL AUTO_INCREMENT,
`detectorX` float DEFAULT \'0\',
`detectorY` float DEFAULT \'0\',
`detectorZ` float DEFAULT \'0\',
`detectorAngle` float DEFAULT \'0\',
`detectorInterior` int(12) DEFAULT \'0\',
`detectorWorld` int(12) DEFAULT \'0\',
PRIMARY KEY (`detectorID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;