@@ -29,6 +29,7 @@ Foreach Types:
2929- GetPlayerPoolSize
3030
3131Compiler Options:
32+ - TRYG3D_DISABLE_INIT //Use before 3DTryg.inc for disable ColAndreas Auto Init
3233- TRYG3D_ENABLE_PLAYER //Use before 3DTryg.inc for enable Player Module
3334- TRYG3D_ENABLE_VEHICLE //Use before 3DTryg.inc for enable Module
3435- TRYG3D_ENABLE_ACTOR //Use before 3DTryg.inc for enable Module
@@ -173,6 +174,8 @@ Tryg3D::GetArcPoints3D(const Float:x, const Float:y, const Float:z, const Float:
173174Tryg3D::GetCube3DPoint(const OrientationCube3D:orientation, const Float:x, const Float:y, const Float:z, const Float:rx, const Float:ry, const Float:rz, const Float:size_x, const Float:size_y, const Float:size_z, &Float:tx, &Float:ty, &Float:tz);
174175
175176# ColAndreas Functions
177+ Tryg3D::IsColAndreasInit();
178+ Tryg3D::SafeColAndreasInit();
176179Tryg3D::IsCollisionFlag(const value, const flag);
177180Tryg3D::IsPointInUnderwater(const Float:x, const Float:y, const Float:z);
178181Tryg3D::FindGroundZ(const Float:x, const Float:y, const Float:z, &Float:gZ);
@@ -201,6 +204,11 @@ Tryg3D::GetGroundRotation(const Float:x, const Float:y, const Float:size, &Float
201204bool: Tryg3D::IsPointInWaterFrontOfPlayer(const playerid, const Float:radius);
202205bool: Tryg3D::IsPointInSphericalSectorEx(const Float:px, const Float:py, const Float:pz, const Float:x, const Float:y, const Float:z, const Float:rx, const Float:rz, const Float:radius, const Float:vrx, const Float:vrz, const ignore_vehicle = INVALID_VEHICLE_ID, const ignore_player = INVALID_PLAYER_ID, const ignore_actor = INVALID_ACTOR_ID, const collision_flags = TRYG3D_COLLISION_FLAG_OBJECT);
203206
207+ # ColAndreas Callbacks
208+ OnColAndreasRemoveBuilding();
209+ OnColAndreasInitSuccess();
210+ OnColAndreasInitFail();
211+
204212# Area Functions
205213bool: Tryg3D::IsPointInCylinder3D(const Float:px, const Float:py, const Float:pz, const Float:xA, const Float:yA, const Float:zA, const Float:xB, const Float:yB, const Float:zB, const Float:radius);
206214bool: Tryg3D::IsPointInCube(const Float:px, const Float:py, const Float:pz, const Float:minx, const Float:miny, const Float:minz, const Float:maxx, const Float:maxy, const Float:maxz);
@@ -368,6 +376,24 @@ Tryg3D::SetPlayerAbsolutePositionVeh(const playerid, const Float:x, const Float:
368376bool: Tryg3D::IsVehicleFullyInArea(const vehicleid, const STREAMER_TAG_AREA:areaid);
369377Tryg3D::GetPointInDynamicArea(const STREAMER_TAG_AREA:areaid, &Float:tx, &Float:ty, &Float:tz);
370378
379+ # FCNPC Functions
380+ bool: FCNPC::InRangeOfPoint(const npcid, const Float:range, const Float:x, const Float:y, const Float:z);
381+ Float: FCNPC::GetPointInFront(const npcid, &Float:tx, &Float:ty, const Float:radius);
382+ FCNPC::GetTargetAngle(const npcid, const Float:x, const Float:y, &Float:rz);
383+ FCNPC::SetTargetAngle(const npcid, const Float:x, const Float:y, &Float:rz = 0.0);
384+ FCNPC::SetVehicleRotation(const npcid, const Float:rx, const Float:ry, const Float:rz);
385+ bool: FCNPC::SetVehicleTargetRotation(const npcid, const Float:tx, const Float:ty, const Float:tz, const Float:ry = 0.0);
386+ FCNPC::GoToAir(const npcid, const Float:x, const Float:y, const Float:z, const type = FCNPC_MOVE_TYPE_AUTO, const Float:speed = FCNPC_MOVE_SPEED_AUTO, const Float:min_distance = 0.0, const stopdelay = 250);
387+ Float: FCNPC::GetPointInFrontCol(const npcid, &Float:tx, &Float:ty, const Float:radius);
388+ FCNPC::GoToCol(const npcid, const Float:x, const Float:y, const Float:z, const type = FCNPC_MOVE_TYPE_AUTO, const Float:speed = FCNPC_MOVE_SPEED_AUTO, const mode = FCNPC_MOVE_MODE_AUTO, const Float:cut_size = 0.0, const bool:set_angle = true, const Float:min_distance = 0.0, const stopdelay = 250);
389+ FCNPC::GoToPlayerCol(const npcid, const playerid, const type = FCNPC_MOVE_TYPE_AUTO, const Float:speed = FCNPC_MOVE_SPEED_AUTO, const mode = FCNPC_MOVE_MODE_AUTO, const Float:cut_size = 0.0, const bool:set_angle = true, const Float:min_distance = 0.0, const stopdelay = 250);
390+ FCNPC::GoToPlayerOnGroundCol(const npcid, const playerid, const type = FCNPC_MOVE_TYPE_AUTO, const Float:speed = FCNPC_MOVE_SPEED_AUTO, const mode = FCNPC_MOVE_MODE_AUTO, const Float:cut_size = 1.0, const Float:climbing = 2.0, const bool:set_angle = true, const Float:min_distance = 0.0, const stopdelay = 250);
391+ FCNPC::GoToAirCol(const npcid, const Float:x, const Float:y, const Float:z, const type = FCNPC_MOVE_TYPE_AUTO, const Float:speed = FCNPC_MOVE_SPEED_AUTO, const Float:cut_size = 0.0, const Float:min_distance = 0.0, const stopdelay = 250);
392+ FCNPC::SetFloorPos(const npcid);
393+ FCNPC::GoToPlayerOnGroundColVeh(const npcid, const playerid, const type = FCNPC_MOVE_TYPE_AUTO, const Float:speed = FCNPC_MOVE_SPEED_AUTO, const mode = FCNPC_MOVE_MODE_AUTO, const Float:cut_size = 1.0, const Float:climbing = 2.0, const bool:set_angle = true, const Float:min_distance = 0.0, const stopdelay = 250);
394+ FCNPC::RandomMoveInDynamicArea(const npcid, const STREAMER_TAG_AREA:areaid, const Float:climbing = 2.0, const type = FCNPC_MOVE_TYPE_AUTO, const Float:speed = FCNPC_MOVE_SPEED_AUTO, const mode = FCNPC_MOVE_MODE_AUTO, const bool:set_angle = true, const Float:min_distance = 0.0, const stopdelay = 250);
395+ FCNPC::SetAbsolutePosition(const npcid, const Float:x, const Float:y, const Float:z, const Float:angle, const worldid = -1, const interiorid = -1, const compensatedtime = -1, const freezeplayer = 1);
396+
371397# YSF Functions
372398Tryg3D::GetPlayerHydraReactorRX(const playerid);
373399Tryg3D::IsPlayerHydraReactorBoost(const playerid);
@@ -996,7 +1022,7 @@ enum 'StreamType'
9961022# define TRYG3D_INVALID_MOVE_TIME (- 1 )
9971023# define TRYG3D_INVALID_MOVE_SPEED (- 1 .0 )
9981024# define TRYG3D_INVALID_ORIENTATION (- 1 )
999- # define TRYG3D_MAX_MODULES_STRING (400 )
1025+ # define TRYG3D_MAX_MODULES_STRING (600 )
10001026# define TRYG3D_RANDOM_MAX_ANGLE (359 .999999 )
10011027# define TRYG3D_VBTP (0x 7FFFFFFF )
10021028# define TRYG3D_VLTP (0x 80000000 )
@@ -3161,6 +3187,37 @@ stock Tryg3D::GetPointOnEllipticalCyl2D(const Float:cx, const Float:cy, const Fl
31613187
31623188 # define T3_IsCollisionFlag (%0 ,%1 ) ((%0 ) & (%1 ))
31633189 # define T3_IsPointInUnderwater (%1 ,%2 ,%3 ) (Tryg3D: : IsPointInWater((%1 ),(%2 ),(%3 )) && ((%3 ) < - 1 .0 ))
3190+
3191+ forward OnColAndreasRemoveBuilding ();
3192+ forward OnColAndreasInitSuccess ();
3193+ forward OnColAndreasInitFail ();
3194+
3195+ stock Tryg3D::IsColAndreasInit (){
3196+ new Float: mapunit;
3197+ ColAndreas: : FindZ_For2DCoord (0 .0 ,0 .0 ,mapunit);
3198+ return ! (mapunit <= 0 .0 );
3199+ }
3200+
3201+ stock Tryg3D::SafeColAndreasInit (){
3202+ // check ColAndreas Init
3203+ new bool: ColAndreasLastStat = false ;
3204+ if (! Tryg3D: : IsColAndreasInit ()){
3205+ CallRemoteFunction (" OnColAndreasRemoveBuilding" ," " );
3206+ ColAndreas: : Init ();
3207+ ColAndreasLastStat = true ;
3208+ }
3209+ if (! Tryg3D: : IsColAndreasInit ()){
3210+ print (" [ADM] Error: ColAndreas failed to initiated." );
3211+ print (" [ADM] Error: Cannot load /scriptfiles/colandreas/ColAndreas.cadb" );
3212+ Tryg3D: : UpdateErrorCount ();
3213+ CallRemoteFunction (" OnColAndreasInitFail" ," " );
3214+ } else {
3215+ if (ColAndreasLastStat){
3216+ CallRemoteFunction (" OnColAndreasInitSuccess" ," " );
3217+ print (" [ADM] Info: ColAndreas successfully init." );
3218+ }
3219+ }
3220+ }
31643221
31653222 stock Tryg3D::FindGroundZ (const Float: x, const Float: y, const Float: z, & Float: gZ){
31663223 new Float: gX,Float: gY;
@@ -5245,6 +5302,167 @@ stock Tryg3D::GetPointOnEllipticalCyl2D(const Float:cx, const Float:cy, const Fl
52455302
52465303#endif
52475304
5305+ /* *******************************
5306+ * FCNPC Functions *
5307+ ********************************/
5308+
5309+ #if defined TRYG3D_MOD_FCNPC
5310+
5311+ stock bool: FCNPC::InRangeOfPoint (const npcid, const Float: range, const Float: x, const Float: y, const Float: z){
5312+ new Float: px,Float: py,Float: pz;
5313+ FCNPC: : GetPosition (npcid,px,py,pz);
5314+ return Tryg3D: : GetDistance3D (x,y,z,px,py,pz) <= range;
5315+ }
5316+
5317+ stock Float: FCNPC::GetPointInFront (const npcid, & Float: tx, & Float: ty, const Float: radius){
5318+ new Float: rz;
5319+ FCNPC: : GetPosition (npcid,tx,ty,rz);
5320+ if (IsPlayerInAnyVehicle (npcid)){
5321+ GetVehicleZAngle (FCNPC: : GetVehicleID (npcid),rz);
5322+ } else {
5323+ rz = FCNPC: : GetAngle (npcid);
5324+ }
5325+ Tryg3D: : GetPointInFront2D (tx,ty,rz,radius,tx,ty);
5326+ return rz;
5327+ }
5328+
5329+ stock FCNPC::GetTargetAngle (const npcid, const Float: x, const Float: y, & Float: rz){
5330+ new Float: mx,Float: my;
5331+ FCNPC: : GetPosition (npcid,mx,my,rz);
5332+ Tryg3D: : GetRotationFor2Point2D (mx,my,x,y,rz);
5333+ }
5334+
5335+ stock FCNPC::SetTargetAngle (const npcid, const Float: x, const Float: y, & Float: rz = 0 .0 ){
5336+ new Float: mx,Float: my;
5337+ FCNPC: : GetPosition (npcid,mx,my,rz);
5338+ Tryg3D: : GetRotationFor2Point2D (mx,my,x,y,rz);
5339+ FCNPC: : SetAngle (npcid,rz);
5340+ }
5341+
5342+ stock FCNPC::SetVehicleRotation (const npcid, const Float: rx, const Float: ry, const Float: rz){
5343+ new Float: qw,Float: qx,Float: qy,Float: qz;
5344+ Tryg3D: : EulerToQuat (rx,ry,rz,qw,qx,qy,qz);
5345+ FCNPC: : SetQuaternion (npcid,qw,qx,qy,qz);
5346+ }
5347+
5348+ stock bool: FCNPC::SetVehicleTargetRotation (const npcid, const Float: tx, const Float: ty, const Float: tz, const Float: ry = 0 .0 ){
5349+ new Float: x,Float: y,Float: z,Float: rx,Float: rz;
5350+ GetVehiclePos (FCNPC: : GetVehicleID (npcid),x,y,z);
5351+ if (Tryg3D: : GetRotationFor2Point3D (x,y,z,tx,ty,tz,rx,rz)){
5352+ new Float: qw,Float: qx,Float: qy,Float: qz;
5353+ Tryg3D: : EulerToQuat (rx,ry,rz,qw,qx,qy,qz);
5354+ FCNPC: : SetQuaternion (npcid,qw,qx,qy,qz);
5355+ return true ;
5356+ }
5357+ return false ;
5358+ }
5359+
5360+ stock FCNPC::GoToAir (const npcid, const Float: x, const Float: y, const Float: z, const type = FCNPC_MOVE_TYPE_AUTO, const Float: speed = FCNPC_MOVE_SPEED_AUTO, const Float: min_distance = 0 .0 , const stopdelay = 250 ){
5361+ FCNPC: : SetVehicleTargetRotation (npcid,x,y,z);
5362+ FCNPC: : GoTo (npcid,x,y,z,type,speed,FCNPC_MOVE_MODE_NONE,FCNPC_MOVE_PATHFINDING_NONE,0 .0 ,false ,min_distance,stopdelay);
5363+ }
5364+
5365+ #if defined TRYG3D_MOD_COLANDREAS
5366+
5367+ stock Float: FCNPC::GetPointInFrontCol (const npcid, & Float: tx, & Float: ty, const Float: radius){
5368+ new Float: rz,Float: z;
5369+ FCNPC: : GetPosition (npcid,tx,ty,z);
5370+ if (IsPlayerInAnyVehicle (npcid)){
5371+ GetVehicleZAngle (FCNPC: : GetVehicleID (npcid),rz);
5372+ } else {
5373+ rz = FCNPC: : GetAngle (npcid);
5374+ }
5375+ Tryg3D: : GetPointInFront3DCol (tx,ty,z,0 .0 ,rz,radius,tx,ty,z);
5376+ return rz;
5377+ }
5378+
5379+ stock FCNPC::GoToCol (const npcid, const Float: x, const Float: y, const Float: z, const type = FCNPC_MOVE_TYPE_AUTO, const Float: speed = FCNPC_MOVE_SPEED_AUTO, const mode = FCNPC_MOVE_MODE_AUTO, const Float: cut_size = 0 .0 , const bool: set_angle = true , const Float: min_distance = 0 .0 , const stopdelay = 250 ){
5380+ new Float: px,Float: py,Float: pz,Float: tx,Float: ty,Float: tz;
5381+ FCNPC: : GetPosition (npcid,px,py,pz);
5382+ Tryg3D: : MovePointColCutLine (px,py,pz,x,y,z,tx,ty,tz,cut_size);
5383+ if (Tryg3D: : GetDistance3D (px,py,pz,tx,ty,tz) >= 0 .0 ){
5384+ FCNPC: : GoTo (npcid,tx,ty,tz,type,speed,mode,FCNPC_MOVE_PATHFINDING_NONE,0 .0 ,set_angle,min_distance,stopdelay);
5385+ }
5386+ }
5387+
5388+ stock FCNPC::GoToPlayerCol (const npcid, const playerid, const type = FCNPC_MOVE_TYPE_AUTO, const Float: speed = FCNPC_MOVE_SPEED_AUTO, const mode = FCNPC_MOVE_MODE_AUTO, const Float: cut_size = 0 .0 , const bool: set_angle = true , const Float: min_distance = 0 .0 , const stopdelay = 250 ){
5389+ new Float: px,Float: py,Float: pz,Float: x,Float: y,Float: z,Float: tx,Float: ty,Float: tz;
5390+ GetPlayerPos (playerid,x,y,z);
5391+ FCNPC: : GetPosition (npcid,px,py,pz);
5392+ Tryg3D: : MovePointColCutLine (px,py,pz,x,y,z,tx,ty,tz,cut_size);
5393+ if (Tryg3D: : GetDistance3D (px,py,pz,tx,ty,tz) >= 0 .0 ){
5394+ FCNPC: : GoTo (npcid,tx,ty,tz,type,speed,mode,FCNPC_MOVE_PATHFINDING_NONE,0 .0 ,set_angle,min_distance,stopdelay);
5395+ }
5396+ }
5397+
5398+ stock FCNPC::GoToPlayerOnGroundCol (const npcid, const playerid, const type = FCNPC_MOVE_TYPE_AUTO, const Float: speed = FCNPC_MOVE_SPEED_AUTO, const mode = FCNPC_MOVE_MODE_AUTO, const Float: cut_size = 1 .0 , const Float: climbing = 2 .0 , const bool: set_angle = true , const Float: min_distance = 0 .0 , const stopdelay = 250 ){
5399+ new Float: px,Float: py,Float: pz,Float: x,Float: y,Float: z,Float: tx,Float: ty,Float: tz;
5400+ GetPlayerPos (playerid,x,y,z);
5401+ FCNPC: : GetPosition (npcid,px,py,pz);
5402+ if (Tryg3D: : GetDistance1D (pz,z) > climbing) z = pz;
5403+ Tryg3D: : MovePointColCutLine (px,py,pz,x,y,z,tx,ty,tz,cut_size);
5404+ if (Tryg3D: : GetDistance3D (px,py,pz,tx,ty,tz) >= 0 .0 ){
5405+ FCNPC: : GoTo (npcid,tx,ty,tz,type,speed,mode,FCNPC_MOVE_PATHFINDING_NONE,0 .0 ,set_angle,min_distance,stopdelay);
5406+ }
5407+ }
5408+
5409+ stock FCNPC::GoToAirCol (const npcid, const Float: x, const Float: y, const Float: z, const type = FCNPC_MOVE_TYPE_AUTO, const Float: speed = FCNPC_MOVE_SPEED_AUTO, const Float: cut_size = 0 .0 , const Float: min_distance = 0 .0 , const stopdelay = 250 ){
5410+ new Float: px,Float: py,Float: pz,Float: tx,Float: ty,Float: tz;
5411+ GetVehiclePos (FCNPC: : GetVehicleID (npcid),px,py,pz);
5412+ Tryg3D: : MovePointColCutLine (px,py,pz,x,y,z,tx,ty,tz,cut_size);
5413+ if (Tryg3D: : GetDistance3D (px,py,pz,tx,ty,tz) >= 0 .0 ){
5414+ FCNPC: : SetVehicleTargetRotation (npcid,tx,ty,tz);
5415+ FCNPC: : GoTo (npcid,tx,ty,tz,type,speed,FCNPC_MOVE_MODE_NONE,FCNPC_MOVE_PATHFINDING_NONE,0 .0 ,false ,min_distance,stopdelay);
5416+ }
5417+ }
5418+
5419+ stock FCNPC::SetFloorPos (const npcid){
5420+ new Float: x,Float: y,Float: z, Float: target_z;
5421+ FCNPC: : GetPosition (npcid,x,y,z);
5422+ Tryg3D: : FindGroundZ (x,y,z,target_z);
5423+ FCNPC: : SetPosition (npcid,x,y,target_z+ TRYG3D_CHARACTER_GROUND_Z_DIFF);
5424+ }
5425+
5426+ #if defined TRYG3D_MOD_VEHICLECOLLISION
5427+ stock FCNPC::GoToPlayerOnGroundColVeh (const npcid, const playerid, const type = FCNPC_MOVE_TYPE_AUTO, const Float: speed = FCNPC_MOVE_SPEED_AUTO, const mode = FCNPC_MOVE_MODE_AUTO, const Float: cut_size = 1 .0 , const Float: climbing = 2 .0 , const bool: set_angle = true , const Float: min_distance = 0 .0 , const stopdelay = 250 ){
5428+ new Float: px,Float: py,Float: pz,Float: x,Float: y,Float: z,Float: tx,Float: ty,Float: tz;
5429+ GetPlayerPos (playerid,x,y,z);
5430+ FCNPC: : GetPosition (npcid,px,py,pz);
5431+ if (Tryg3D: : GetDistance1D (pz,z) > climbing) z = pz;
5432+ if (Tryg3D: : MovePointColWithVehicleCut (px,py,pz,x,y,z,tx,ty,tz,cut_size)){
5433+ FCNPC: : GoTo (npcid,tx,ty,tz,type,speed,mode,FCNPC_MOVE_PATHFINDING_NONE,0 .0 ,set_angle,min_distance,stopdelay);
5434+ }
5435+ }
5436+ #endif
5437+
5438+ #if defined TRYG3D_MOD_STREAMER
5439+ stock FCNPC::RandomMoveInDynamicArea (const npcid, const STREAMER_TAG_AREA: areaid, const Float: climbing = 2 .0 , const type = FCNPC_MOVE_TYPE_AUTO, const Float: speed = FCNPC_MOVE_SPEED_AUTO, const mode = FCNPC_MOVE_MODE_AUTO, const bool: set_angle = true , const Float: min_distance = 0 .0 , const stopdelay = 250 ){
5440+ if (! FCNPC: : IsValid (npcid) || FCNPC: : IsDead (npcid)) return 0 ;
5441+ new Float: x,Float: y,Float: z,Float: tx,Float: ty,Float: tz,Float:T3D: tmp,cnt = 0 ;
5442+ FCNPC: : GetPosition (npcid,x,y,z);
5443+ do {
5444+ if (cnt >= 100 ) return 0 ;
5445+ Tryg3D: : GetPointInDynamicArea (areaid,tx,ty,tz);
5446+ ColAndreas: : FindZ_For2DCoord (tx,ty,tz);
5447+ tz += TRYG3D_CHARACTER_GROUND_Z_DIFF;
5448+ cnt++ ;
5449+ } while (Tryg3D: : IsPointInWater (tx,ty) || ColAndreas: : RayCastLine (x,y,z,tx,ty,tz,T3D: tmp,T3D: tmp,T3D: tmp) || Tryg3D: : GetDistance1D (tz,z) > climbing || ! IsPointInDynamicArea (areaid,tx,ty,tz));
5450+ return FCNPC: : GoTo (npcid,tx,ty,tz,type,speed,mode,FCNPC_MOVE_PATHFINDING_NONE,0 .0 ,set_angle,min_distance,stopdelay);
5451+ }
5452+ #endif
5453+ #endif
5454+
5455+ #if defined TRYG3D_MOD_STREAMER
5456+ stock FCNPC::SetAbsolutePosition (const npcid, const Float: x, const Float: y, const Float: z, const Float: angle, const worldid = - 1 , const interiorid = - 1 , const compensatedtime = - 1 , const freezeplayer = 1 ){
5457+ Streamer: : UpdateEx (npcid,x,y,z,worldid,interiorid,- 1 ,compensatedtime,freezeplayer);
5458+ if (worldid != - 1 ) FCNPC: : SetVirtualWorld (npcid,worldid);
5459+ if (interiorid != - 1 ) FCNPC: : SetInterior (npcid,interiorid);
5460+ FCNPC: : SetPosition (npcid,x,y,z);
5461+ FCNPC: : SetAngle (npcid,angle);
5462+ }
5463+ #endif
5464+ #endif
5465+
52485466/* *******************************
52495467 * Streamer Functions *
52505468 ********************************/
@@ -5806,7 +6024,66 @@ stock Tryg3D::Init(){
58066024 Tryg3D: : UpTime = GetTickCount ();
58076025
58086026 new T3D: modules[TRYG3D_MAX_MODULES_STRING];
5809- /* todo */
6027+
6028+ #if defined TRYG3D_MOD_PLAYER
6029+ format (T3D: modules,TRYG3D_MAX_MODULES_STRING," %s %s ," ,T3D: modules,TRYG3D_MOD_PLAYER);
6030+ #endif
6031+
6032+ #if defined TRYG3D_MOD_VEHICLE
6033+ format (T3D: modules,TRYG3D_MAX_MODULES_STRING," %s %s ," ,T3D: modules,TRYG3D_MOD_VEHICLE);
6034+ #endif
6035+
6036+ #if defined TRYG3D_MOD_ACTOR
6037+ format (T3D: modules,TRYG3D_MAX_MODULES_STRING," %s %s ," ,T3D: modules,TRYG3D_MOD_ACTOR);
6038+ #endif
6039+
6040+ #if defined TRYG3D_MOD_GRENADEDETECTION
6041+ format (T3D: modules,TRYG3D_MAX_MODULES_STRING," %s %s ," ,T3D: modules,TRYG3D_MOD_GRENADEDETECTION);
6042+ #endif
6043+
6044+ #if defined TRYG3D_MOD_VEHICLECOL
6045+ format (T3D: modules,TRYG3D_MAX_MODULES_STRING," %s %s ," ,T3D: modules,TRYG3D_MOD_VEHICLECOL);
6046+ #endif
6047+
6048+ #if defined TRYG3D_MOD_PLAYERCOL
6049+ format (T3D: modules,TRYG3D_MAX_MODULES_STRING," %s %s ," ,T3D: modules,TRYG3D_MOD_PLAYERCOL);
6050+ #endif
6051+
6052+ #if defined TRYG3D_MOD_ACTORCOL
6053+ format (T3D: modules,TRYG3D_MAX_MODULES_STRING," %s %s ," ,T3D: modules,TRYG3D_MOD_ACTORCOL);
6054+ #endif
6055+
6056+ #if defined TRYG3D_MOD_UNIVERSAL
6057+ format (T3D: modules,TRYG3D_MAX_MODULES_STRING," %s %s ," ,T3D: modules,TRYG3D_MOD_UNIVERSAL);
6058+ #endif
6059+
6060+ #if defined TRYG3D_MOD_DRAW3D
6061+ format (T3D: modules,TRYG3D_MAX_MODULES_STRING," %s %s ," ,T3D: modules,TRYG3D_MOD_DRAW3D);
6062+ #endif
6063+
6064+ #if defined TRYG3D_MOD_CAST3D
6065+ format (T3D: modules,TRYG3D_MAX_MODULES_STRING," %s %s ," ,T3D: modules,TRYG3D_MOD_CAST3D);
6066+ #endif
6067+
6068+ #if defined TRYG3D_MOD_CATCHITEMS
6069+ format (T3D: modules,TRYG3D_MAX_MODULES_STRING," %s %s ," ,T3D: modules,TRYG3D_MOD_CATCHITEMS);
6070+ #endif
6071+
6072+ #if defined TRYG3D_MOD_COLANDREAS
6073+ format (T3D: modules,TRYG3D_MAX_MODULES_STRING," %s %s ," ,T3D: modules,TRYG3D_MOD_COLANDREAS);
6074+ #endif
6075+
6076+ #if defined TRYG3D_MOD_STREAMER
6077+ format (T3D: modules,TRYG3D_MAX_MODULES_STRING," %s %s ," ,T3D: modules,TRYG3D_MOD_STREAMER);
6078+ #endif
6079+
6080+ #if defined TRYG3D_MOD_FCNPC
6081+ format (T3D: modules,TRYG3D_MAX_MODULES_STRING," %s %s ," ,T3D: modules,TRYG3D_MOD_FCNPC);
6082+ #endif
6083+
6084+ #if defined TRYG3D_MOD_YSF
6085+ format (T3D: modules,TRYG3D_MAX_MODULES_STRING," %s %s ," ,T3D: modules,TRYG3D_MOD_YSF);
6086+ #endif
58106087
58116088 new T3D: ver_name[16 ];
58126089 format (T3D: ver_name,sizeof (T3D: ver_name)," %d .%d .%d " ,Tryg3D: : GetVersion (TRYG3D_VERSION));
@@ -5838,6 +6115,20 @@ stock Tryg3D::Init(){
58386115 Tryg3D: : UpdateErrorCount ();
58396116 }
58406117
6118+ #if defined TRYG3D_MOD_FCNPC
6119+ if (! fexist (" FCNPC/nodes" )){
6120+ print (" [ADM] Error: Plugin data not found /scriptfiles/FCNPC/nodes/*.dat" );
6121+ Tryg3D: : UpdateErrorCount ();
6122+ }
6123+ #endif
6124+
6125+ // Init Map Precision
6126+ #if ! defined TRYG3D_DISABLE_INIT
6127+ #if defined TRYG3D_MOD_COLANDREAS
6128+ Tryg3D: : SafeColAndreasInit ();
6129+ #endif
6130+ #endif
6131+
58416132 new T3D: errors = Tryg3D: : GetErrorCount ();
58426133 if (T3D: errors > 0 ) printf (" [ADM] Info: 3DTryg running with %d errors detected, see above" ,T3D: errors);
58436134}
0 commit comments