Skip to content

Commit 0153ee6

Browse files
committed
removebuilding support + minor tweaks
* RemoveBuilding support has been added. * Sometimes the ped dies when in camera mode, the player now gets their camera mode re-applied properly. Bug fixed! * Toolbar tweaked a bit to fit in buildings. * Credits added for building data array. * mapedit.db modified, building data has been added. * Select Object, Vehicle, Pickup, Actor has been tweaked, it used to not react when clicking the modelid column. Bug fixed. * Added variables & messages when saving, loading and reseting the map. It now issues a message regarding how many objects, vehicles, pickups etc has been saved / loaded / reset. * PositionFromObjectOffset renamed and modified to GetAttachedObjectPos * Fixed indentation + More
1 parent 08164f6 commit 0153ee6

File tree

35 files changed

+1684
-182
lines changed

35 files changed

+1684
-182
lines changed

filterscripts/mapedit.amx

791 KB
Binary file not shown.

filterscripts/mapedit.pwn

+10-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
native IsValidVehicle(vehicleid);
66

7-
#pragma dynamic 17150 // To avoid warnings at compiling
7+
#pragma dynamic 19100 // To avoid warnings at compiling
88

99
//------------------------------------------------------------------------------
1010
// Defined Values & Enumerators
@@ -64,6 +64,8 @@ native IsValidVehicle(vehicleid);
6464
#include "mapedit/textureview/value.pwn"
6565
#include "mapedit/maplist/value.pwn"
6666
#include "mapedit/moneyrefill/value.pwn"
67+
#include "mapedit/building/value.pwn"
68+
#include "mapedit/buildlist/value.pwn"
6769

6870
//------------------------------------------------------------------------------
6971
// Variables
@@ -106,6 +108,8 @@ new
106108
#include "mapedit/pattach/var.pwn"
107109
#include "mapedit/maplist/var.pwn"
108110
#include "mapedit/maploaded/var.pwn"
111+
#include "mapedit/building/var.pwn"
112+
#include "mapedit/buildlist/var.pwn"
109113

110114
//------------------------------------------------------------------------------
111115
// Macros
@@ -126,6 +130,7 @@ new
126130
#include "mapedit/vehcolor/macro.pwn"
127131
#include "mapedit/modelcolor/macro.pwn"
128132
#include "mapedit/matalign/macro.pwn"
133+
#include "mapedit/building/macro.pwn"
129134

130135
//------------------------------------------------------------------------------
131136
// Hooked Functions
@@ -187,6 +192,8 @@ GetMapFilePath(mapname[], path[], path_size) {
187192
#include "mapedit/maplist/func.pwn"
188193
#include "mapedit/maploaded/func.pwn"
189194
#include "mapedit/mapdb/func.pwn"
195+
#include "mapedit/building/func.pwn"
196+
#include "mapedit/buildlist/func.pwn"
190197

191198
//------------------------------------------------------------------------------
192199
// Callbacks
@@ -352,4 +359,6 @@ public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ) {
352359
#include "mapedit/maplist/call.pwn"
353360
#include "mapedit/maploaded/call.pwn"
354361
#include "mapedit/moneyrefill/call.pwn"
362+
#include "mapedit/building/call.pwn"
363+
#include "mapedit/buildlist/call.pwn"
355364
#include "mapedit/printsuccess/call.pwn" // has to be at the end of callback list, prints a message if called
+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
public OnFilterScriptInit() {
2+
LoadBuildingCache();
3+
4+
#if defined build_OnFilterScriptInit
5+
build_OnFilterScriptInit();
6+
#endif
7+
}
8+
#if defined _ALS_OnFilterScriptInit
9+
#undef OnFilterScriptInit
10+
#else
11+
#define _ALS_OnFilterScriptInit
12+
#endif
13+
#define OnFilterScriptInit build_OnFilterScriptInit
14+
#if defined build_OnFilterScriptInit
15+
forward build_OnFilterScriptInit();
16+
#endif
17+
18+
19+
public OnPlayerConnect(playerid) {
20+
for(new b; b < BUILDING_DATA_SIZE; b ++) {
21+
if( g_BuildingData[b][BUILDING_DATA_ISLOADED] && g_BuildingData[b][BUILDING_DATA_ISREMOVED] ) {
22+
RemoveBuildingIDForPlayer(playerid, b);
23+
}
24+
}
25+
26+
#if defined build_OnPlayerConnect
27+
return build_OnPlayerConnect(playerid);
28+
#else
29+
return 1;
30+
#endif
31+
}
32+
#if defined _ALS_OnPlayerConnect
33+
#undef OnPlayerConnect
34+
#else
35+
#define _ALS_OnPlayerConnect
36+
#endif
37+
#define OnPlayerConnect build_OnPlayerConnect
38+
#if defined build_OnPlayerConnect
39+
forward build_OnPlayerConnect(playerid);
40+
#endif
+150
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
LoadBuildingCache() {
2+
g_DBResult = db_query(g_ResourceDB, "SELECT * FROM `building_data`");
3+
4+
new
5+
rows = db_num_rows(g_DBResult),
6+
buildings_loaded,
7+
buildingid
8+
;
9+
10+
for(new row; row < rows; row ++) {
11+
buildingid = db_get_field_assoc_int(g_DBResult, "buildingid");
12+
13+
if( IsValidBuildingID(buildingid) && !g_BuildingData[buildingid][BUILDING_DATA_ISLOADED] ) {
14+
g_BuildingData[buildingid][BUILDING_DATA_MODEL] = db_get_field_assoc_int (g_DBResult, "model");
15+
g_BuildingData[buildingid][BUILDING_DATA_LODMODEL] = db_get_field_assoc_int (g_DBResult, "lodmodel");
16+
g_BuildingData[buildingid][BUILDING_DATA_X] = db_get_field_assoc_float(g_DBResult, "x");
17+
g_BuildingData[buildingid][BUILDING_DATA_Y] = db_get_field_assoc_float(g_DBResult, "y");
18+
g_BuildingData[buildingid][BUILDING_DATA_Z] = db_get_field_assoc_float(g_DBResult, "z");
19+
g_BuildingData[buildingid][BUILDING_DATA_RX] = db_get_field_assoc_float(g_DBResult, "rx");
20+
g_BuildingData[buildingid][BUILDING_DATA_RY] = db_get_field_assoc_float(g_DBResult, "ry");
21+
g_BuildingData[buildingid][BUILDING_DATA_RZ] = db_get_field_assoc_float(g_DBResult, "rz");
22+
g_BuildingData[buildingid][BUILDING_DATA_OFFSET] = db_get_field_assoc_float(g_DBResult, "offset");
23+
g_BuildingData[buildingid][BUILDING_DATA_ISLOADED] = true;
24+
25+
buildings_loaded ++;
26+
}
27+
28+
db_next_row(g_DBResult);
29+
}
30+
31+
db_free_result(g_DBResult);
32+
33+
if( buildings_loaded != BUILDING_DATA_SIZE ) {
34+
printf("error: %i / %i buildings were loaded!", buildings_loaded, BUILDING_DATA_SIZE);
35+
}
36+
}
37+
38+
RemoveBuildingIDForPlayer(playerid, buildingid) {
39+
RemoveBuildingForPlayer(playerid,
40+
.modelid = g_BuildingData[buildingid][BUILDING_DATA_MODEL],
41+
.fX = g_BuildingData[buildingid][BUILDING_DATA_X],
42+
.fY = g_BuildingData[buildingid][BUILDING_DATA_Y],
43+
.fZ = g_BuildingData[buildingid][BUILDING_DATA_Z],
44+
.fRadius = g_BuildingData[buildingid][BUILDING_DATA_OFFSET] + REMOVE_BUILDING_RANGE
45+
);
46+
47+
if( g_BuildingData[buildingid][BUILDING_DATA_LODMODEL] != INVALID_BUILDING_LODMODEL ) {
48+
RemoveBuildingForPlayer(playerid,
49+
.modelid = g_BuildingData[buildingid][BUILDING_DATA_LODMODEL],
50+
.fX = g_BuildingData[buildingid][BUILDING_DATA_X],
51+
.fY = g_BuildingData[buildingid][BUILDING_DATA_Y],
52+
.fZ = g_BuildingData[buildingid][BUILDING_DATA_Z],
53+
.fRadius = g_BuildingData[buildingid][BUILDING_DATA_OFFSET] + REMOVE_BUILDING_RANGE
54+
);
55+
}
56+
}
57+
58+
RemoveBuildingIDForAll(buildingid) {
59+
for(new playerid, max_playerid = GetPlayerPoolSize(); playerid <= max_playerid; playerid ++) {
60+
if( IsPlayerConnected(playerid) ) {
61+
RemoveBuildingIDForPlayer(playerid, buildingid);
62+
}
63+
}
64+
}
65+
66+
GetBuildingsInRange(result[], result_size, search_modelid, Float:search_x, Float:search_y, Float:search_z, Float:search_radius) {
67+
new
68+
result_count,
69+
building_modelid,
70+
Float: building_x,
71+
Float: building_y,
72+
Float: building_z,
73+
Float: building_distance
74+
;
75+
76+
for(new b; b < BUILDING_DATA_SIZE; b ++) {
77+
if( result_count >= result_size ) {
78+
break;
79+
}
80+
81+
building_modelid = g_BuildingData[b][BUILDING_DATA_MODEL];
82+
building_x = g_BuildingData[b][BUILDING_DATA_X];
83+
building_y = g_BuildingData[b][BUILDING_DATA_Y];
84+
building_z = g_BuildingData[b][BUILDING_DATA_Z];
85+
building_distance = GetDistanceBetweenPoints(search_x, search_y, search_z, building_x, building_y, building_z);
86+
87+
if( ( search_modelid == -1 || search_modelid == building_modelid ) && building_distance <= search_radius ) {
88+
result[result_count ++] = b;
89+
}
90+
}
91+
92+
return result_count;
93+
}
94+
95+
GetNearestBuilding(Float:search_x, Float:search_y, Float:search_z, &Float:ret_distance, Float:min_distance = 0.0, incmode = BUILDING_INCMODE_ALL) {
96+
new
97+
ret_buildingid = INVALID_BUILDING_ID,
98+
Float: building_x,
99+
Float: building_y,
100+
Float: building_z,
101+
Float: building_distance
102+
;
103+
104+
for(new b; b < BUILDING_DATA_SIZE; b ++) {
105+
building_x = g_BuildingData[b][BUILDING_DATA_X];
106+
building_y = g_BuildingData[b][BUILDING_DATA_Y];
107+
building_z = g_BuildingData[b][BUILDING_DATA_Z];
108+
building_distance = GetDistanceBetweenPoints(search_x, search_y, search_z, building_x, building_y, building_z);
109+
110+
if(
111+
( incmode == BUILDING_INCMODE_ALL || ( incmode == BUILDING_INCMODE_REMOVED && g_BuildingData[b][BUILDING_DATA_ISREMOVED] ) || ( incmode == BUILDING_INCMODE_EXISTING && !g_BuildingData[b][BUILDING_DATA_ISREMOVED] ) ) &&
112+
( min_distance == 0.0 || building_distance > min_distance ) &&
113+
( ret_buildingid == INVALID_BUILDING_ID || building_distance < ret_distance )
114+
) {
115+
ret_buildingid = b;
116+
ret_distance = building_distance;
117+
}
118+
}
119+
120+
return ret_buildingid;
121+
}
122+
123+
FindBuildings(result[], result_size, offset, incmode, Float:x, Float:y, Float:z) {
124+
new
125+
buildingid,
126+
rows_found,
127+
rows_added,
128+
Float: min_distance
129+
;
130+
131+
for(new b; b < BUILDING_DATA_SIZE; b ++) {
132+
buildingid = GetNearestBuilding(x, y, z, min_distance, min_distance, incmode);
133+
134+
if( buildingid == INVALID_BUILDING_ID ) {
135+
break;
136+
}
137+
138+
if( rows_found ++ < offset ) {
139+
continue;
140+
}
141+
142+
if( rows_added >= result_size ) {
143+
break;
144+
}
145+
146+
result[rows_added ++] = buildingid;
147+
}
148+
149+
return rows_added;
150+
}
+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
#define IsValidBuildingID(%0) \
2+
( %0 >= MIN_BUILDING_ID && %0 <= MAX_BUILDING_ID )
+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#define BUILDING_DATA_SIZE \
2+
44763
3+
4+
#define INVALID_BUILDING_ID \
5+
-1
6+
7+
#define MIN_BUILDING_ID \
8+
0
9+
10+
#define MAX_BUILDING_ID \
11+
BUILDING_DATA_SIZE-1
12+
13+
#define REMOVE_BUILDING_RANGE \
14+
0.1
15+
16+
#define INVALID_BUILDING_LODMODEL \
17+
0xFFFF
18+
19+
enum {
20+
BUILDING_INCMODE_ALL,
21+
BUILDING_INCMODE_REMOVED,
22+
BUILDING_INCMODE_EXISTING
23+
}
+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
enum BUILDING_DATA {
2+
BUILDING_DATA_MODEL,
3+
BUILDING_DATA_LODMODEL,
4+
Float: BUILDING_DATA_X,
5+
Float: BUILDING_DATA_Y,
6+
Float: BUILDING_DATA_Z,
7+
Float: BUILDING_DATA_RX,
8+
Float: BUILDING_DATA_RY,
9+
Float: BUILDING_DATA_RZ,
10+
Float: BUILDING_DATA_OFFSET,
11+
bool: BUILDING_DATA_ISLOADED,
12+
bool: BUILDING_DATA_ISREMOVED
13+
}
14+
15+
new
16+
g_BuildingData[BUILDING_DATA_SIZE][BUILDING_DATA]
17+
;

0 commit comments

Comments
 (0)