Аццкий план.
Движок готов.
Запись в файл - есть.
Чтение из файла - есть. Кол-во объектов:
1 ворота (1)
8 стен (9)
1 гараж (10)
1 здание (11)
1 ящик покупки оружия (12)
1 сейф для съема денег (13)
2 вышки (15)
1 пикап открытия ворот (1)
Итого: 15 объектов. 1 пикап.
Покупаем будьдозер, назначаецо база.
И так. Принцип расстановки:
1. садимся в бульдозер
2. подъежаем к объекту
3. тыкаем h
4. везем объект. Num8-2 - высота, Num4-6 - вращение
5. везем объект
6. жмем h, объект ставицо
Ворота - оперируем вот такой функцией, получая ID фраки из енума:
Code
if (strcmp(cmd, "/openbase", true)==0)
{
if(MyFactReturn(playerid) == 0)
{
SendClientMessage(playerid,COLOR_RED,"Not a faction member!");
return 1;
}
new base = -1;
for(new i = 0; i < MAX_CAMPS; i++)
{
if(CCM[i][basefact] == 0)
{
continue;
}
new myfact = MyFactReturn(playerid);
if(myfact == CCM[i][basefact])
{
new Float:x, Float:y, Float:z; GetObjectPos(CCM[i][ccmgate], x, y, z);
if(IsPlayerInRangeOfPoint(playerid, 35.0, x,y,z))
{
base = i;
break;
}
}
}
if(base == -1)
{
return 1;
}
new Float:x,Float:y,Float:z;
if(CCM[base][gatestatus] == 1)
{
CCM[base][gatestatus] = 0;
GetObjectPos(CCM[base][ccmgate], x, y, z); MoveObject(CCM[base][ccmgate], x, y, z-5, 2.2);
SendClientMessage(playerid,COLOR_GREEN,"Gate closed");
}
else
{
CCM[base][gatestatus] = 1;
GetObjectPos(CCM[base][ccmgate], x, y, z); MoveObject(CCM[base][ccmgate], x, y, z+5, 2.2);
SendClientMessage(playerid,COLOR_GREEN,"Gate opened");
}
return 1;
}
Пикапы по умолчанию в нуле. Изменяем положение командой.
Стены - тут все просто.
Гараж - просто огромный ангар, удобен, 1 вход.
Здание - ставим, заходим. при помощи команды, можем спавницо там.
Ящик с патронами - где хотим, хоть в здании или в гараже, тоже самое с сейфом, клацаем С, попадаем в меню
Вышки - тож самое что и стены.
Пикап открытия ворот, ставим командой
Пикапы - стрелки.
ID моделей: Ворота 971, забор 987, Большой гараж 10831, или гараж с заездом 9244, дом 13681 - большой такой, 9247 с гаражем, или открытый красивый 9361, вышка 3279, сейф 2332, ящик 1271
Code
/* C O D E */
enum CCMInfo //
{
/* baseid // 0 */
ccmowner[64], // 1
ccmvehicleid, // 2
Float:gatex,Float:gatey,Float:gatez,Float:gatea, // 3 4 5 6
gatestatus, // 7
Float:fence1x, Float:fence1y, Float:fence1z, Float:fence1a, Float:fence2x, Float:fence2y, Float:fence2z, Float:fence2a, // 8 9 10 11 12 13 14 15
Float:fence3x, Float:fence3y, Float:fence3z, Float:fence3a, Float:fence4x, Float:fence4y, Float:fence4z, Float:fence4a, // 16 17 18 19 20 21 22 23
Float:fence5x, Float:fence5y, Float:fence5z, Float:fence5a, Float:fence6x, Float:fence6y, Float:fence6z, Float:fence6a, // 24 25 26 27 28 29 30 31
Float:fence7x, Float:fence7y, Float:fence7z, Float:fence7a, Float:fence8x, Float:fence8y, Float:fence8z, Float:fence8a, // 32 33 34 35 36 37 38 39
Float:parkx,Float:parky,Float:parkz,Float:parka, // 40 41 42 43
Float:hqx,Float:hqy,Float:hqz,Float:hqa, // 44 45 46 47
Float:ambxx,Float:ambxy,Float:ambxz,Float:ambxa, Float:safex,Float:safey,Float:safez,Float:safea, // 48 49 50 51 52 53 54 55
Float:tower1x,Float:tower1y,Float:tower1z, Float:tower1a, Float:tower2x,Float:tower2y,Float:tower2z,Float:tower2a, // 56 57 58 59 60 61
Float:ccmpickup1x, Float:ccmpickup1y, Float:ccmpickup1z, // 62 63 64
basecash, basegun1, basegun1a, basegun2, basegun2a, basegun3, basegun3a, basegun4, basegun4a, basefact, // 65 66 67 68 69 70 71 72 73
ccmgate, ccmfence1, ccmfence2, ccmfence3, ccmfence4, ccmfence5, ccmfence6, ccmfence7, ccmfence8, // 74 75 76 77 78 79 80 81 82
ccmpark, ccmhq, ccmammobox, ccmsafe, ccmtower1, ccmtower2, ccmpickup // 83 84 85 86 87 88 89
} //
new CCM[MAX_CAMPS][CCMInfo];
new CSP[2000][14];
/* C O D E E N D */
план сохранения
0|iEnemY|1036|188.765243|-225.602310|4.000000|360.175201|198.931045|-282.575622|0.500000|129.327423|222.440444|-248.215255|0.2 50000|87.272994|198.797683|-291.807220|0.500000|89.546127|222.666000|-271.456024|0.250000|89.996414|2713.071533|-1134.524780|68.500000|455.2 09045|208.965362|-223.350143|0.250000|0.383666|172.670196|-225.302963|0.250000|-2.114928|222.415603|-248.284835|0.250000|-449.775299|206.489 089|-260.432464|4.000000|267.967346|191.117843|-135.899368|3.000000|-43.605987|195.540786|-233.826980|1.000000|95.804763|194.945663|-134.952 804|1.000000|631.638061|198.720474|-228.718994|5.750000|0.000000|175.257385|-258.156799|0.250000|0.000000|196.268524|-273.144714|1.570330|0| 0|0|0|0|0|0|0|0|15|
или функция
Code
stock SaveCCM()
{
new File:fileX;
fileX = fopen("CCM/BASE.ini", io_write);
fclose(fileX);
fileX = fopen("CCM/BASE.ini", io_append);
new position[1512];
for(new i = 0; i < MAX_CAMPS; i++)
{
new Float:x, Float:y, Float:z, Float:a, Float:notneed;
GetObjectPos(CCM[i][ccmgate], x, y, z); GetObjectRot(CCM[i][ccmgate],notneed,notneed,a);
new pos1[64]; format(pos1,sizeof(pos1),"%f|%f|%f|%f",x,y,z,a);
if(CCM[i][gatestatus] == 1) { format(pos1,sizeof(pos1),"%f|%f|%f|%f",x,y,z-5,a); }
GetObjectPos(CCM[i][ccmfence1], x, y, z); GetObjectRot(CCM[i][ccmfence1],notneed,notneed,a);
new pos2[64]; format(pos2,sizeof(pos2),"%f|%f|%f|%f",x,y,z,a);
GetObjectPos(CCM[i][ccmfence2], x, y, z); GetObjectRot(CCM[i][ccmfence2],notneed,notneed,a);
new pos3[64]; format(pos3,sizeof(pos3),"%f|%f|%f|%f",x,y,z,a);
GetObjectPos(CCM[i][ccmfence3], x, y, z); GetObjectRot(CCM[i][ccmfence3],notneed,notneed,a);
new pos4[64]; format(pos4,sizeof(pos4),"%f|%f|%f|%f",x,y,z,a);
GetObjectPos(CCM[i][ccmfence4], x, y, z); GetObjectRot(CCM[i][ccmfence4],notneed,notneed,a);
new pos5[64]; format(pos5,sizeof(pos5),"%f|%f|%f|%f",x,y,z,a);
GetObjectPos(CCM[i][ccmfence5], x, y, z); GetObjectRot(CCM[i][ccmfence5],notneed,notneed,a);
new pos6[64]; format(pos6,sizeof(pos6),"%f|%f|%f|%f",x,y,z,a);
GetObjectPos(CCM[i][ccmfence6], x, y, z); GetObjectRot(CCM[i][ccmfence6],notneed,notneed,a);
new pos7[64]; format(pos7,sizeof(pos7),"%f|%f|%f|%f",x,y,z,a);
GetObjectPos(CCM[i][ccmfence7], x, y, z); GetObjectRot(CCM[i][ccmfence7],notneed,notneed,a);
new pos8[64]; format(pos8,sizeof(pos8),"%f|%f|%f|%f",x,y,z,a);
GetObjectPos(CCM[i][ccmfence8], x, y, z); GetObjectRot(CCM[i][ccmfence8],notneed,notneed,a);
new pos9[64]; format(pos9,sizeof(pos9),"%f|%f|%f|%f",x,y,z,a);
GetObjectPos(CCM[i][ccmpark], x, y, z); GetObjectRot(CCM[i][ccmpark],notneed,notneed,a);
new pos10[64]; format(pos10,sizeof(pos10),"%f|%f|%f|%f",x,y,z,a);
GetObjectPos(CCM[i][ccmhq], x, y, z); GetObjectRot(CCM[i][ccmhq],notneed,notneed,a);
new pos11[64]; format(pos11,sizeof(pos11),"%f|%f|%f|%f",x,y,z,a);
GetObjectPos(CCM[i][ccmammobox], x, y, z); GetObjectRot(CCM[i][ccmammobox],notneed,notneed,a);
new pos12[64]; format(pos12,sizeof(pos12),"%f|%f|%f|%f",x,y,z,a);
GetObjectPos(CCM[i][ccmsafe], x, y, z); GetObjectRot(CCM[i][ccmsafe],notneed,notneed,a);
new pos13[64]; format(pos13,sizeof(pos13),"%f|%f|%f|%f",x,y,z,a);
GetObjectPos(CCM[i][ccmtower1], x, y, z); GetObjectRot(CCM[i][ccmtower1],notneed,notneed,a);
new pos14[64]; format(pos14,sizeof(pos14),"%f|%f|%f|%f",x,y,z);
GetObjectPos(CCM[i][ccmtower2], x, y, z); GetObjectRot(CCM[i][ccmtower2],notneed,notneed,a);
new pos15[64]; format(pos15,sizeof(pos15),"%f|%f|%f|%f",x,y,z);
GetPickupPos(CCM[i][ccmpickup], x, y, z);
new pos16[64]; format(pos16,sizeof(pos16),"%f|%f|%f",x,y,z);
new pos17[128]; format(pos17,sizeof(pos17),"%d|%d|%d|%d|%d|%d|%d|%d|%d|%d", CCM[i][basecash], CCM[i][basegun1], CCM[i][basegun1a], CCM[i][basegun2], CCM[i][basegun2a], CCM[i][basegun3], CCM[i][basegun3a], CCM[i][basegun4], CCM[i][basegun4a], CCM[i][basefact]);
format(position,sizeof(position),"%d|%s|%d|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|\n",
i,
CCM[i][ccmowner],
CCM[i][ccmvehicleid],
pos1,
pos2,
pos3,
pos4,
pos5,
pos6,
pos7,
pos8,
pos9,
pos10,
pos11,
pos12,
pos13,
p os14,
pos1 5,
pos16,
pos17
);
fwrite(fileX, position);
}
fclose(fileX);
}
план чтения
функция
Code
stock LoadCCM()
{
new string[2048]; new File:file = fopen("CCM/BASE.ini");
if (file)
{
for(new i = 0; i < MAX_CAMPS; i++)
{
fread(file, string); split(string, CSP, '|');
new p = 1;
strmid(CCM [ strval(CSP[0]) ] [ccmowner] , CSP[p], 0, strlen(CSP[p]), 255); p++; // 1
CCM [ strval(CSP[0]) ][ ccmvehicleid ] = strval(CSP[p]); p++; //2
CCM [ strval(CSP[0]) ][ gatex ] = floatstr(CSP[p]); p++; //3
CCM [ strval(CSP[0]) ][ gatey ] = floatstr(CSP[p]); p++; //4
CCM [ strval(CSP[0]) ][ gatez ] = floatstr(CSP[p]); p++; //5
CCM [ strval(CSP[0]) ][ gatea ] = floatstr(CSP[p]); p++; //6
CCM[strval(CSP[0])][ccmgate]=CreateObject(971,CCM[strval(CSP[0])][gatex],CCM[strval(CSP[0])][gatey],CCM[strval(CSP[0])][gatez],0.0,0.0,CCM[strval(CSP[0])][gatea],300);
print(" 81 ");
CCM [ strval(CSP[0]) ][ fence1x ] = floatstr(CSP[p]) ;p++; //7
print(" 82 ");
CCM [ strval(CSP[0]) ][ fence1y ] = floatstr(CSP[p]); p++; //8
print(" 83 ");
CCM [ strval(CSP[0]) ][ fence1z ] = floatstr(CSP[p]); p++; //9
print(" 84 ");
CCM [ strval(CSP[0]) ][ fence1a ] = floatstr(CSP[p]); p++; //10
print(" 85 ");
CCM[strval(CSP[0])][ccmfence1]=CreateObject(987,CCM[strval(CSP[0])][fence1x],CCM[strval(CSP[0])][fence1y],CCM[strval(CSP[0])][fence1z],0.0,0.0,CCM[strval(CSP[0])][fence1a],300);
print(" 9 ");
CCM [ strval(CSP[0]) ][ fence2x ] = floatstr(CSP[p]); p++; //12
CCM [ strval(CSP[0]) ][ fence2y ] = floatstr(CSP[p]); p++; //13
CCM [ strval(CSP[0]) ][ fence2z ] = floatstr(CSP[p]); p++; //14
CCM [ strval(CSP[0]) ][ fence2a ] = floatstr(CSP[p]); p++; //15
CCM[strval(CSP[0])][ccmfence2]=CreateObject(987,CCM[strval(CSP[0])][fence2x],CCM[strval(CSP[0])][fence2y],CCM[strval(CSP[0])][fence2z],0.0,0.0,CCM[strval(CSP[0])][fence2a],300);
CCM [ strval(CSP[0]) ][ fence3x ] = floatstr(CSP[p]); p++; //16
CCM [ strval(CSP[0]) ][ fence3y ] = floatstr(CSP[p]); p++; //17
CCM [ strval(CSP[0]) ][ fence3z ] = floatstr(CSP[p]); p++; //18
CCM [ strval(CSP[0]) ][ fence3a ] = floatstr(CSP[p]); p++; //19
CCM[strval(CSP[0])][ccmfence3]=CreateObject(987,CCM[strval(CSP[0])][fence3x],CCM[strval(CSP[0])][fence3y],CCM[strval(CSP[0])][fence3z],0.0,0.0,CCM[strval(CSP[0])][fence3a],300);
CCM [ strval(CSP[0]) ][ fence4x ] = floatstr(CSP[p]); p++; //20
CCM [ strval(CSP[0]) ][ fence4y ] = floatstr(CSP[p]); p++; //
CCM [ strval(CSP[0]) ][ fence4z ] = floatstr(CSP[p]); p++; //
CCM [ strval(CSP[0]) ][ fence4a ] = floatstr(CSP[p]); p++; //
CCM[strval(CSP[0])][ccmfence4]=CreateObject(987,CCM[strval(CSP[0])][fence4x],CCM[strval(CSP[0])][fence4y],CCM[strval(CSP[0])][fence4z],0.0,0.0,CCM[strval(CSP[0])][fence4a],300);
CCM [ strval(CSP[0]) ][ fence5x ] = floatstr(CSP[p]); p++; //
CCM [ strval(CSP[0]) ][ fence5y ] = floatstr(CSP[p]); p++; //25
CCM [ strval(CSP[0]) ][ fence5z ] = floatstr(CSP[p]); p++; //
CCM [ strval(CSP[0]) ][ fence5a ] = floatstr(CSP[p]); p++; //
CCM[strval(CSP[0])][ccmfence5]=CreateObject(987,CCM[strval(CSP[0])][fence5x],CCM[strval(CSP[0])][fence5y],CCM[strval(CSP[0])][fence5z],0.0,0.0,CCM[strval(CSP[0])][fence5a],300);
CCM [ strval(CSP[0]) ][ fence6x ] = floatstr(CSP[p]); p++; //
CCM [ strval(CSP[0]) ][ fence6y ] = floatstr(CSP[p]); p++; //
CCM [ strval(CSP[0]) ][ fence6z ] = floatstr(CSP[p]); p++; //30
CCM [ strval(CSP[0]) ][ fence6a ] = floatstr(CSP[p]); p++; //
CCM[strval(CSP[0])][ccmfence6]=CreateObject(987,CCM[strval(CSP[0])][fence6x],CCM[strval(CSP[0])][fence6y],CCM[strval(CSP[0])][fence6z],0.0,0.0,CCM[strval(CSP[0])][fence6a],300);
CCM [ strval(CSP[0]) ][ fence7x ] = floatstr(CSP[p]); p++; //
CCM [ strval(CSP[0]) ][ fence7y ] = floatstr(CSP[p]); p++; //
CCM [ strval(CSP[0]) ][ fence7z ] = floatstr(CSP[p]); p++; //
CCM [ strval(CSP[0]) ][ fence7a ] = floatstr(CSP[p]); p++; //35
CCM[strval(CSP[0])][ccmfence7]=CreateObject(987,CCM[strval(CSP[0])][fence7x],CCM[strval(CSP[0])][fence7y],CCM[strval(CSP[0])][fence7z],0.0,0.0,CCM[strval(CSP[0])][fence7a],300);
CCM [ strval(CSP[0]) ][ fence8x ] = floatstr(CSP[p]); p++; //
CCM [ strval(CSP[0]) ][ fence8y ] = floatstr(CSP[p]); p++; //
CCM [ strval(CSP[0]) ][ fence8z ] = floatstr(CSP[p]); p++; //
CCM [ strval(CSP[0]) ][ fence8a ] = floatstr(CSP[p]); p++; //39
CCM[strval(CSP[0])][ccmfence8]=CreateObject(987,CCM[strval(CSP[0])][fence8x],CCM[strval(CSP[0])][fence8y],CCM[strval(CSP[0])][fence8z],0.0,0.0,CCM[strval(CSP[0])][fence8a],300);
CCM [ strval(CSP[0]) ][ parkx ] = floatstr(CSP[p]); p++; //40
CCM [ strval(CSP[0]) ][ parky ] = floatstr(CSP[p]); p++; //41
CCM [ strval(CSP[0]) ][ parkz ] = floatstr(CSP[p]); p++; //42
CCM [ strval(CSP[0]) ][ parka ] = floatstr(CSP[p]); p++; //43
CCM[strval(CSP[0])][ccmpark]=CreateObject(10831,CCM[strval(CSP[0])][parkx],CCM[strval(CSP[0])][parky],CCM[strval(CSP[0])][parkz],0.0,0.0,CCM[strval(CSP[0])][parka],300);
CCM [ strval(CSP[0]) ][ hqx ] = floatstr(CSP[p]); p++; //44
CCM [ strval(CSP[0]) ][ hqy ] = floatstr(CSP[p]); p++; //45
CCM [ strval(CSP[0]) ][ hqz ] = floatstr(CSP[p]); p++; //46
CCM [ strval(CSP[0]) ][ hqa ] = floatstr(CSP[p]); p++; //47
CCM[strval(CSP[0])][ccmhq]=CreateObject(9361,CCM[strval(CSP[0])][hqx],CCM[strval(CSP[0])][hqy],CCM[strval(CSP[0])][hqz],0.0,0.0,CCM[strval(CSP[0])][hqa],300);
CCM [ strval(CSP[0]) ][ ambxx ] = floatstr(CSP[p]); p++; //48
CCM [ strval(CSP[0]) ][ ambxy ] = floatstr(CSP[p]); p++; //49
CCM [ strval(CSP[0]) ][ ambxz ] = floatstr(CSP[p]); p++; //50
CCM [ strval(CSP[0]) ][ ambxa ] = floatstr(CSP[p]); p++; //51
CCM[strval(CSP[0])][ccmammobox]=CreateObject(1271,CCM[strval(CSP[0])][ambxx],CCM[strval(CSP[0])][ambxy],CCM[strval(CSP[0])][ambxz],0.0,0.0,CCM[strval(CSP[0])][ambxa],300);
CCM [ strval(CSP[0]) ][ safex ] = floatstr(CSP[p]); p++; //52
CCM [ strval(CSP[0]) ][ safey ] = floatstr(CSP[p]); p++; //53
CCM [ strval(CSP[0]) ][ safez ] = floatstr(CSP[p]); p++; //54
CCM [ strval(CSP[0]) ][ safea ] = floatstr(CSP[p]); p++; //55
CCM[strval(CSP[0])][ccmsafe]=CreateObject(2332,CCM[strval(CSP[0])][safex],CCM[strval(CSP[0])][safey],CCM[strval(CSP[0])][safez],0.0,0.0,CCM[strval(CSP[0])][safea],300);
CCM [ strval(CSP[0]) ][ tower1x ] = floatstr(CSP[p]); p++; //56
CCM [ strval(CSP[0]) ][ tower1y ] = floatstr(CSP[p]); p++; //57
CCM [ strval(CSP[0]) ][ tower1z ] = floatstr(CSP[p]); p++; //58
CCM [ strval(CSP[0]) ][ tower1a ] = floatstr(CSP[p]); p++; //58
CCM[strval(CSP[0])][ccmtower1]=CreateObject(3279,CCM[strval(CSP[0])][tower1x],CCM[strval(CSP[0])][tower1y],CCM[strval(CSP[0])][tower1z],0.0,0.0,CCM[strval(CSP[0])][tower1a],300);
CCM [ strval(CSP[0]) ][ tower2x ] = floatstr(CSP[p]); p++; //59
CCM [ strval(CSP[0]) ][ tower2y ] = floatstr(CSP[p]); p++; //60
CCM [ strval(CSP[0]) ][ tower2z ] = floatstr(CSP[p]); p++; //61
CCM [ strval(CSP[0]) ][ tower2a ] = floatstr(CSP[p]); p++; //61
CCM[strval(CSP[0])][ccmtower2]=CreateObject(3279,CCM[strval(CSP[0])][tower2x],CCM[strval(CSP[0])][tower2y],CCM[strval(CSP[0])][tower2z],0.0,0.0,CCM[strval(CSP[0])][tower2a],300);
CCM [ strval(CSP[0]) ][ ccmpickup1x ] = floatstr(CSP[p]); p++; //62
CCM [ strval(CSP[0]) ][ ccmpickup1y ] = floatstr(CSP[p]); p++; //63
CCM [ strval(CSP[0]) ][ ccmpickup1z ] = floatstr(CSP[p]); p++; //64
CCM [ strval(CSP[0]) ][ ccmpickup ] = CreatePickupEx(1318, 2,CCM[strval(CSP[0])][ccmpickup1x],CCM[strval(CSP[0])][ccmpickup1y],CCM[strval(CSP[0])][ccmpickup1z]);
CCM [ strval(CSP[0]) ][ basecash ] = strval(CSP[p]); p++; //65
CCM [ strval(CSP[0]) ][ basegun1 ] = strval(CSP[p]); p++; //66
CCM [ strval(CSP[0]) ][ basegun1a ] = strval(CSP[p]); p++; //67
CCM [ strval(CSP[0]) ][ basegun2 ] = strval(CSP[p]); p++; //68
CCM [ strval(CSP[0]) ][ basegun2a ] = strval(CSP[p]); p++; //69
CCM [ strval(CSP[0]) ][ basegun3 ] = strval(CSP[p]); p++; //70
CCM [ strval(CSP[0]) ][ basegun3a ] = strval(CSP[p]); p++; //71
CCM [ strval(CSP[0]) ][ basegun4 ] = strval(CSP[p]); p++; //72
CCM [ strval(CSP[0]) ][ basegun4a ] = strval(CSP[p]); p++; //73
CCM [ strval(CSP[0]) ][ basefact ] = strval(CSP[p]); p++; //74
}
fclose(file);
}
}
И так, чтение\сохранение\расстановка реализована. Теперь нужно не леницо, и цуко взять и начать через нехочу делать все фишки мода >_<
1. Ворота. Открываюцо пикапом. И командой.. покачто сделаю командой. +
2. Спавн на базе +
3. ТП всех компонентов +
4. Покупка оружия в ящике +
5. Снятие денег через сейф +
6. Возможность членам базы открывать ворота +
7. Выбор модели зданий для гаража, HQ, вероятно вышки и ворот
8. Многие фичи, типо сохр. оружия в ящиках НЕ реализованы. Много неспользуемых переменных. Исправлю.
У кого какие идеи по улучшению мода есть, излагайте