@JoKeR2020,
Код:
#define DRUG_SYSTEM
// локальные
#define MAX_DRUGSITES (100) // максимум помещений
#define MAX_POTS (10) // максимум горшков на помещение
#define TIME_PLANTING (24*(60*60)) // время выращивания (кол-во минут * секунды)
#define MARIVANNA_MIN (25) // мин. кол-во грамм с одного куста
#define MARIVANNA_MAX (35) // max. кол-во грамм с одного куста
#define DRUGENTER_PICKUP (0) // 1 - с пикапов / 0 - без
enum eDrugSites
{
ID,
Float
osX, Float
osY, Float
osZ,
ownerID, bool:doorStatus,
pickupID
}
enum eDrugPots
{
ID,
siteID, potsID, plantTime,
objectID, Text3D:textID
}
enum eDrugPotsPos
{
Float
osX, Float
osY, Float
osZ,
Float
osRx, Float
osRy, Float
osRz
}
new
gDrugSites[MAX_DRUGSITES][eDrugSites],
gDrugPots[MAX_DRUGSITES*MAX_POTS][eDrugPots],
gLastDrugSite = 0,
Iterator
ots<MAX_DRUGSITES*MAX_POTS>,
Iterator
rugSites<MAX_DRUGSITES>
;
new fDrugPotsPos[][eDrugPotsPos] = {
{1464.15601, -1546.95801, 2021.42578, 353.71500, 284.74301, 350.81500},
{1463.42700, -1546.97900, 2021.42578, 353.71500, 284.74301, 350.81500},
{1462.72302, -1546.99597, 2021.42578, 353.71500, 284.74301, 350.81500},
{1461.25000, -1547.11597, 2021.42578, 353.71500, 284.74301, 350.81500},
{1460.68799, -1547.06396, 2021.42578, 353.71500, 284.74301, 350.81500},
{1459.97205, -1546.98303, 2021.42578, 353.71500, 284.74301, 350.81500},
{1458.27002, -1547.08301, 2021.42578, 353.71500, 284.74301, 350.81500},
{1457.60901, -1547.04504, 2021.42578, 353.71500, 284.74301, 350.81500},
{1456.63501, -1547.12402, 2021.42578, 353.71500, 284.74301, 350.81500},
{1454.79504, -1546.93896, 2021.42578, 353.71500, 284.74301, 350.81500}
};
drugsModeInit()
{
LoadDrugSites();
#if DRUGENTER_PICKUP == (1)
CreateDynamicPickup(PICKUP_ENTERS, 23, 1461.3373, -1539.0970, 2021.2617, -1, -1, -1, 30.0);
#endif
SetTimer("checkDrugPots", 950, true);
return 1;
}
drugsModeExit()
{
SaveDrugSites();
return 1;
}
stock CreateDrugSite(playerid, Float
os[])
{
new
query[128],
Cache:cacheID,
rows, fields
;
f(query, "INSERT INTO `drug_sites` SET `pos_x`=%f, `pos_y`=%f, `pos_z`=%f, `owner_id`=%d", pos[0], pos[1], pos[2], PlayerInfo[playerid][pID]);
mysql_query(dbHandle, query, false);
f(query, "select * from `drug_sites` where `owner_id` = %d", PlayerInfo[playerid][pID]);
cacheID = mysql_query(dbHandle, query, true);
cache_get_data(rows, fields);
if(rows && (gLastDrugSite+1) < MAX_DRUGSITES)
{
new row = gLastDrugSite+1;
gDrugSites[row][ID] = cache_get_field_content_int(0, "id");
gDrugSites[row][posX] = cache_get_field_content_float(0, "pos_x");
gDrugSites[row][posY] = cache_get_field_content_float(0, "pos_y");
gDrugSites[row][posZ] = cache_get_field_content_float(0, "pos_z");
gDrugSites[row][ownerID] = cache_get_field_content_int(0, "owner_id");
gDrugSites[row][doorStatus] = bool:cache_get_field_content_int(0, "door_status");
#if DRUGENTER_PICKUP == (1)
gDrugSites[row][pickupID] = CreateDynamicPickup(PICKUP_ENTERS, 23, gDrugSites[row][posX], gDrugSites[row][posY], gDrugSites[row][posZ], -1, -1, -1, 30.0);
#endif
gLastDrugSite = row;
Iter_Add(DrugSites, row);
SendInfoMessage(playerid, "Вы успешно создали помещение для выращивания марихуанны!");
}
else
{
SendErrorMessage(playerid, "Ошибка при создании помещения, обратитесь к администратору!");
}
cache_delete(cacheID);
return 1;
}
stock SaveDrugSites()
{
new query[256];
foreach(new i
rugSites)
{
if(gDrugSites
[ID] == 0) continue;
f(query, "update drug_sites set door_status = %d where id = %d", gDrugSites[doorStatus], gDrugSites[ID]);
mysql_tquery(dbHandle, query);
foreach(new xots)
{
if(gDrugPots[x][ID] == 0) continue;
f(query, "update drug_pots set plant_time = %d where id = %d", gDrugPots[x][plantTime], gDrugPots[x][ID]);
mysql_tquery(dbHandle, query);
}
}
return 1;
}
stock LoadDrugSites()
{
new
Cache:cacheID = mysql_query(dbHandle, "select * from drug_sites", true),
rows, fields, row = -1
;
cache_get_data(rows, fields);
if(rows > 0)
{
while((++row) < rows)
{
if(row == MAX_DRUGSITES) break;
gDrugSites[row][ID] = cache_get_field_content_int(row, "id");
gDrugSites[row][posX] = cache_get_field_content_float(row, "pos_x");
gDrugSites[row][posY] = cache_get_field_content_float(row, "pos_y");
gDrugSites[row][posZ] = cache_get_field_content_float(row, "pos_z");
gDrugSites[row][ownerID] = cache_get_field_content_int(row, "owner_id");
gDrugSites[row][doorStatus] = bool:cache_get_field_content_int(row, "door_status");
#if DRUGENTER_PICKUP == (1)
gDrugSites[row][pickupID] = CreateDynamicPickup(PICKUP_ENTERS, 23, gDrugSites[row][posX], gDrugSites[row][posY], gDrugSites[row][posZ], -1, -1, -1, 30.0);
#endif
gLastDrugSite = row;
Iter_Add(DrugSites, row);
}
}
cache_delete(cacheID);
foreach(new irugSites)
{
LoadPots(gDrugSites[ID]); // загружаем горшки
}
return 1;
}
stock LoadPots(drugsite_id)
{
new
string[128],
Cache:cacheID = mysql_query(dbHandle, (format(string, 128, "select * from drug_pots where site_id = %d", drugsite_id), string), true),
rows, fields, row = -1, idx
;
cache_get_data(rows, fields);
if(rows > 0)
{
while((++row) < rows)
{
if(row == MAX_POTS) break;
gDrugPots[row][ID] = cache_get_field_content_int(row, "id");
gDrugPots[row][siteID] = cache_get_field_content_int(row, "site_id");
gDrugPots[row][potsID] = cache_get_field_content_int(row, "pots_id");
gDrugPots[row][plantTime] = cache_get_field_content_int(row, "plant_time");
idx = gDrugPots[row][potsID];
if((gettime()-(gDrugPots[row][plantTime]+TIME_PLANTING)) >= 0 || gDrugPots[row][plantTime] == 0)
{
gDrugPots[row][objectID] = CreateDynamicObject(19473, fDrugPotsPos[idx][posX], fDrugPotsPos[idx][posY], fDrugPotsPos[idx][posZ], fDrugPotsPos[idx][posRx], fDrugPotsPos[idx][posRy], fDrugPotsPos[idx][posRz], gDrugPots[row][siteID]);
gDrugPots[row][textID] = CreateDynamic3DTextLabel("[{e1af02}готово к сбору{FFFFFF}]\n"colorOoc"(( собрать /pickdrugs ))", 0xFFFFFFFF, fDrugPotsPos[idx][posX]-1, fDrugPotsPos[idx][posY], fDrugPotsPos[idx][posZ], 3.0);
gDrugPots[row][plantTime] = 0;
}
else
{
new
minStr[16]
;
getDrugPotEndTime(row, minStr);
format(string, sizeof string, "[{e1af02}до сбора осталось {699927}%s{FFFFFF}]", minStr);
gDrugPots[row][textID] = CreateDynamic3DTextLabel(string, 0xFFFFFFFF, fDrugPotsPos[idx][posX]-1, fDrugPotsPos[idx][posY], fDrugPotsPos[idx][posZ], 3.0);
gDrugPots[row][objectID] = INVALID_OBJECT_ID;
}
//gLastDrugPots = row;
Iter_Add(Pots, row);
}
}
cache_delete(cacheID);
return 1;
}
stock getDrugPotEndTime(potID, output[])
{
new
timeEnd = -(gettime()-(gDrugPots[potID][plantTime]+TIME_PLANTING)),
minStr[16]
;
Convert(timeEnd, minStr);
format(output, 16, "%s", minStr);
}
function:checkDrugPots()
{
new string[128], minStr[16], idx;
foreach(new potots)
{
if(gDrugPots[pot][objectID] == INVALID_OBJECT_ID && IsValidDynamic3DTextLabel(gDrugPots[pot][textID]))
{
if((gettime()-(gDrugPots[pot][plantTime]+TIME_PLANTING)) >= 0 && gDrugPots[pot][plantTime] != 0)
{
idx = gDrugPots[pot][potsID];
gDrugPots[pot][objectID] = CreateDynamicObject(19473, fDrugPotsPos[idx][posX], fDrugPotsPos[idx][posY], fDrugPotsPos[idx][posZ], fDrugPotsPos[idx][posRx], fDrugPotsPos[idx][posRy], fDrugPotsPos[idx][posRz], gDrugPots[pot][siteID]);
UpdateDynamic3DTextLabelText(gDrugPots[pot][textID], 0xFFFFFFFF, "[{e1af02}готово к сбору{FFFFFF}]\n"colorOoc"(( собрать /pickdrugs ))");
gDrugPots[pot][plantTime] = 0;
continue;
}
getDrugPotEndTime(pot, minStr);
format(string, sizeof string, "[{e1af02}до сбора осталось {699927}%s{FFFFFF}]", minStr);
UpdateDynamic3DTextLabelText(gDrugPots[pot][textID], 0xFFFFFFFF, string);
}
}
return;
}
stock SeatPlayerDrugs(playerid) // посадить травку
{
if(PlayerHasItem(playerid, 94) < 10) return SendErrorMessage(playerid, "Для посадки марихуанны требуется 10 семян!");
new string[128], vw = GetPlayerVirtualWorld(playerid);
for(new i = 0; i < sizeof fDrugPotsPos; ++i)
{
if(IsPlayerInRangeOfPoint(playerid, 1.5, fDrugPotsPos[posX], fDrugPotsPos[posY], fDrugPotsPos[posZ]))
{
foreach(new pots)
{
if(gDrugPots[p][potsID] == i && vw == gDrugPots[p][siteID])
{
return SendErrorMessage(playerid, "В этом горшке уже что-то растет!");
}
}
f(string, "INSERT INTO `drug_pots` SET `site_id` = %d, `pots_id` = %d, `plant_time` = %d", vw, i, gettime());
mysql_query(dbHandle, string, false);
ReloadDrugPots(vw);
Streamer_Update(playerid);
RemoveItem(playerid, 94, 10);
SendInfoMessage(playerid, "Вы успешно посадили семена, ожидайте пока они прорастут!");
break;
}
}
return 1;
}
stock ReloadDrugPots(id)
{
foreach(new iots)
{
if(gDrugPots[siteID] == id)
{
if(IsValidDynamicObject(gDrugPots[objectID])) DestroyDynamicObject(gDrugPots[objectID]);
if(IsValidDynamic3DTextLabel(gDrugPots[textID])) DestroyDynamic3DTextLabel(gDrugPots[textID]);
new next;
Iter_SafeRemove(Pots, i, next);
i = next;
}
}
LoadPots(id);
return 1;
}
// enter / exit
CMD:enter(playerid, params[])
{
if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
{
if(IsPlayerInRangeOfPoint(playerid, 3.0, 1461.3373, -1539.0970, 2021.2617))
{
foreach(new irugSites)
{
if(GetPlayerVirtualWorld(playerid) == gDrugSites[ID])
{
if(!gDrugSites[doorStatus]) return SendErrorMessage(playerid, "Дверь закрыта!");
SetPlayerPosEx(playerid, gDrugSites[posX], gDrugSites[posY], gDrugSites[posZ], 0.0, 0, 0);
return 1;
}
}
}
else
{
foreach(new irugSites)
{
if(IsPlayerInRangeOfPoint(playerid, 3.0, gDrugSites[posX], gDrugSites[posY], gDrugSites[posZ]))
{
if(!gDrugSites[doorStatus]) return SendErrorMessage(playerid, "Дверь закрыта!");
SetPlayerPosEx(playerid, 1461.3373, -1539.0970, 2021.2617, 0.0, 1, gDrugSites[ID]);
return 1;
}
}
}
}
#if defined drug_cmd_enter
drug_cmd_enter(playerid, params);
#endif
return 1;
}
#if defined _ALS_cmd_enter
#undef cmd_enter
#else
#define _ALS_cmd_enter
#endif
#define cmd_enter(%0[]) drug_cmd_enter(%0[])
#if defined drug_cmd_enter
forward drug_cmd_enter(playerid, params[]);
#endif
// lock / unlock
CMD:lock(playerid, params[])
{
if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
{
foreach(new irugSites)
{
if(
IsPlayerInRangeOfPoint(playerid, 3.0, 1461.3373, -1539.0970, 2021.2617) && GetPlayerVirtualWorld(playerid) == gDrugSites[ID] ||
IsPlayerInRangeOfPoint(playerid, 3.0, gDrugSites[posX], gDrugSites[posY], gDrugSites[posZ])
)
{
if(gDrugSites[ownerID] == PlayerInfo[playerid][pID])
{
if(!gDrugSites[doorStatus])
{
gDrugSites[doorStatus] = true;
GameTextForPlayer(playerid,"~g~Unlock", 1500, 6);
}
else
{
gDrugSites[doorStatus] = false;
GameTextForPlayer(playerid,"~r~Lock", 1500, 6);
}
}
else
{
SendErrorMessage(playerid, "У вас нет ключей от этой двери!");
}
return 1;
}
}
}
#if defined drug_cmd_lock
drug_cmd_lock(playerid, params);
#endif
return 1;
}
#if defined _ALS_cmd_lock
#undef cmd_lock
#else
#define _ALS_cmd_lock
#endif
#define cmd_lock(%0[]) drug_cmd_lock(%0[])
#if defined drug_cmd_lock
forward drug_cmd_lock(playerid, params[]);
#endif
// create drug site
CMD:cdrugroom(playerid, params[])
{
if(PlayerInfo[playerid][pAccessDrug] == 1)
{
if(GetPlayerInterior(playerid) != 0 || GetPlayerVirtualWorld(playerid) != 0)
{
SendErrorMessage(playerid, "Здесь нельзя создать комнату для выращивания травки!");
}
else
{
foreach(new irugSites)
{
if(gDrugSites[ownerID] == PlayerInfo[playerid][pID])
{
return SendErrorMessage(playerid, "Вы не можете создать более 1 помещения!");
}
}
new Floatos[3];
GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
CreateDrugSite(playerid, pos);
}
}
else
{
SendErrorMessage(playerid, "Нет доступа к этой команде!");
}
return 1;
}
// pickdrugs
CMDickdrugs(playerid, params[])
{
for(new i = 0; i < sizeof fDrugPotsPos; ++i)
{
if(IsPlayerInRangeOfPoint(playerid, 2.0, fDrugPotsPos[posX], fDrugPotsPos[posY], fDrugPotsPos[posZ]))
{
foreach(new pots)
{
if(gDrugPots[p][potsID] == i && GetPlayerVirtualWorld(playerid) == gDrugPots[p][siteID] && gDrugPots[p][plantTime] == 0)
{
if(AddItem(playerid, 95, randomEx(MARIVANNA_MIN, MARIVANNA_MAX)))
{
new string[64];
f(string, "DELETE FROM drug_pots WHERE id = %d", gDrugPots[p][ID]);
mysql_query(dbHandle, string, false);
ReloadDrugPots(GetPlayerVirtualWorld(playerid));
SendInfoMessage(playerid, "Вы собрали марихуанну с куста!");
Streamer_Update(playerid);
AddItem(playerid, 94, randomEx(3, 5));
}
else
{
SendErrorMessage(playerid, "Недостаточно места в инвентаре!");
}
return 1;
}
}
break;
}
}
SendErrorMessage(playerid, "Здесь нечего собирать!");
return 1;
}
// admin cmds
CMD:setacc(playerid, params[])
{
if(PlayerInfo[playerid][pAdmin] < 5) return 0;
if(sscanf(params, "ii", params[0], params[1])) return SendNotice2Message(playerid,"/setacc [ID] [0/1]");
PlayerInfo[params[0]][pAccessDrug] = params[1];
if(params[1] == 1)
{
SendInfoMessage(params[0], "Вам выдали доступ к созданию помещения!");
SendInfoMessage(params[0], "Команды: {e1af02}/cdrugroom (создать) | /lock (открыть/закрыть) | /gpslab (найти лабораторию)");
SendInfoMessage(playerid, "Вы выдали доступ к созданию помещения!");
}
else
{
SendInfoMessage(params[0], "У вас забрали доступ к созданию помещения!");
SendInfoMessage(playerid, "Вы забрали доступ к созданию помещения!");
}
return 1;
}
// gps
CMD:gpslab(playerid, params[])
{
if(PlayerInfo[playerid][pAccessDrug] == 1)
{
foreach(new irugSites)
{
if(gDrugSites[ownerID] == PlayerInfo[playerid][pID])
{
SetPVarInt(playerid, "gpsLab", 1);
SetPlayerCheckpoint(playerid, gDrugSites[posX], gDrugSites[posY], gDrugSites[posZ], 3.0);
SendErrorMessage(playerid, "Ваша лаборотория отмечена на радаре!");
return 1;
}
}
}
return 1;
}
Если начать компилировать, то вот:
Код:
C:\Users\Uzer\Desktop\crmp03\filterscripts\drugs.pwn(43) : error 001: expected token: "-identifier-", but found "("
C:\Users\Uzer\Desktop\crmp03\filterscripts\drugs.pwn(45) : error 010: invalid function or declaration
C:\Users\Uzer\Desktop\crmp03\filterscripts\drugs.pwn(452) : warning 203: symbol is never used: "cdrugroom"
C:\Users\Uzer\Desktop\crmp03\filterscripts\drugs.pwn(452 -- 641) : warning 203: symbol is never used: "checkDrugPots"
C:\Users\Uzer\Desktop\crmp03\filterscripts\drugs.pwn(452 -- 641) : warning 203: symbol is never used: "drugsModeExit"
C:\Users\Uzer\Desktop\crmp03\filterscripts\drugs.pwn(452 -- 641) : warning 203: symbol is never used: "drugsModeInit"
C:\Users\Uzer\Desktop\crmp03\filterscripts\drugs.pwn(452 -- 641) : warning 203: symbol is never used: "enter"
C:\Users\Uzer\Desktop\crmp03\filterscripts\drugs.pwn(452 -- 641) : warning 203: symbol is never used: "gpslab"
C:\Users\Uzer\Desktop\crmp03\filterscripts\drugs.pwn(452 -- 641) : warning 203: symbol is never used: "lock"
C:\Users\Uzer\Desktop\crmp03\filterscripts\drugs.pwn(452 -- 641) : warning 203: symbol is never used: "pickdrugs"
C:\Users\Uzer\Desktop\crmp03\filterscripts\drugs.pwn(452 -- 641) : warning 203: symbol is never used: "setacc"
C:\Users\Uzer\Desktop\crmp03\filterscripts\drugs.pwn(452 -- 641) : error 013: no entry point (no public functions)
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
3 Errors.