SA-MP Forums

Go Back   SA-MP Forums > SA-MP Scripting and Plugins > Scripting Help

Reply
 
Thread Tools Display Modes
Old 19/07/2018, 09:02 PM   #11
Mauzen
Banned
 
Join Date: Jun 2007
Location: Western Germany
Posts: 4,880
Reputation: 1597
Default Re: CreateRNPCPolice Dont Spawn

No need to add recordings, RNPC does that automatically. Theres a RNPC.pwn in npcmodes though, that you need to recompile like a normal gamemode.

Your spawn code also is a bit messy, better use it like this:

PHP Code:
forward Route(playerid);

public 
OnGameModeInit()
{
    
// No need for the first timer
    
new rp CreateRNPCPolice ("Officerino"280);
    
AddRPOLWaypoint (rp2029.421354.3410.5);
    
AddRPOLWaypoint (rp2033.551286.2110.5);
    
AddRPOLWaypoint (rp2079.031286.0010.5);
    
AddRPOLWaypoint (rp2079.021362.0810.5);
    
SetTimerEx ("Route"5000"i"rp); // Pass the police officer id


public Route(rp)
{
StartRPOLRoute (rp); // Start the route for the given police officer id
return 1;

Mauzen is offline   Reply With Quote
Old 19/07/2018, 10:25 PM   #12
bookknp
Huge Clucker
 
bookknp's Avatar
 
Join Date: Dec 2013
Posts: 218
Reputation: 24
Default Re: CreateRNPCPolice Dont Spawn

Quote:
Originally Posted by Mauzen View Post
No need to add recordings, RNPC does that automatically. Theres a RNPC.pwn in npcmodes though, that you need to recompile like a normal gamemode.

Your spawn code also is a bit messy, better use it like this:

PHP Code:
forward Route(playerid);

public 
OnGameModeInit()
{
    
// No need for the first timer
    
new rp CreateRNPCPolice ("Officerino"280);
    
AddRPOLWaypoint (rp2029.421354.3410.5);
    
AddRPOLWaypoint (rp2033.551286.2110.5);
    
AddRPOLWaypoint (rp2079.031286.0010.5);
    
AddRPOLWaypoint (rp2079.021362.0810.5);
    
SetTimerEx ("Route"5000"i"rp); // Pass the police officer id


public Route(rp)
{
StartRPOLRoute (rp); // Start the route for the given police officer id
return 1;


I am trying to spawn the NPC but it does not appear, I show you my includes to see if anything is missing. thx friend.

PHP Code:
/**
 * RNPC Police include
 * Simple AI and tutorial script
 * Mauzen, 10.7.2012, V1.0
 */
#include <RNPC>
#pragma tabsize 0

#define RPOL_MAX_WAYPOINTS                      (12)    // Maximum number of waypoints for a policeman
#define RPOL_VISIONRANGE                        (25.0)  // Attacking players in that range will be chased
#define RPOL_ATTACKRANGE                        (15.0)  // Policeman starts firing when in this range to the player
#define MAX_RNPC_POLICE                         (8)             // Max number of police officers
#define RPOL_UPDATE                                     (200)   // Interval in ms to update movements, attacks, etc


#if defined _ALS_OnPlayerSpawn
    #undef OnPlayerSpawn
#else
    #define _ALS_OnPlayerSpawn
#endif
#define OnPlayerSpawn RNPC_OnPlayerSpawn
forward RNPC_OnPlayerSpawn(playerid);
// The enum containing all data for a single policeman
enum RPol_enum {
                        
RPOL_NPCID,
                        
RPOL_TIMER,
        
Float:  RPOL_WAYPOINTS_X[RPOL_MAX_WAYPOINTS],
        
Float:  RPOL_WAYPOINTS_Y[RPOL_MAX_WAYPOINTS],
        
Float:  RPOL_WAYPOINTS_Z[RPOL_MAX_WAYPOINTS],
                        
RPOL_WPINDEX,
                        
RPOL_NEXTWP,
                        
RPOL_CURTARGET,
                        
RPOL_SKIN
};

// Initial data
new rpol[MAX_RNPC_POLICE][RPol_enum] = {{-1, -10.00.00.000, -1}, {-1, -10.00.00.000, -1},
        {-
1, -10.00.00.000, -1}, {-1, -10.00.00.000, -1}, {-1, -10.00.00.000, -1},
        {-
1, -10.00.00.000, -1}, {-1, -10.00.00.000, -1}, {-1, -10.00.00.000, -1} };

// Creates a new policeman
stock CreateRNPCPolice(name[], skin)
{
        
// Find a free spot in the rpol array
        
new slot = -1;
        for (new 
0MAX_RNPC_POLICEi++) {
                if (
rpol[i][RPOL_NPCID] == -1) {
                        
slot i;
                        break;
                }
        }
        if (
slot == -1) return -1;

        
// Connect the NPC
        
rpol[slot][RPOL_NPCID] = ConnectRNPC(name);
        
rpol[slot][RPOL_SKIN] = skin;
        return 
slot;
}

// Adds a waypoint to the Policeman's path
stock AddRPOLWaypoint(rpolidFloat:xFloat:yFloat:z) {
        if (
rpol[rpolid][RPOL_NPCID] == -1) return false;
        if (
rpol[rpolid][RPOL_WPINDEX] >= RPOL_MAX_WAYPOINTS) return false;
        
// Store the waypoint coordinates at the last free position
        
new slot rpol[rpolid][RPOL_WPINDEX];
        
rpol[rpolid][RPOL_WAYPOINTS_X][slot] = x;
        
rpol[rpolid][RPOL_WAYPOINTS_Y][slot] = y;
        
rpol[rpolid][RPOL_WAYPOINTS_Z][slot] = z;

        
rpol[rpolid][RPOL_WPINDEX]++;
        return 
true;
}

stock StartRPOLRoute(rpolid)
{
        
// If valid and not already walking
        
if (rpol[rpolid][RPOL_TIMER] == -&& rpol[rpolid][RPOL_NPCID] != -1) {
                
rpol[rpolid][RPOL_TIMER] = SetTimerEx("WatchTimer"RPOL_UPDATE1"i"rpolid);
                
// Move to the first waypoint
                
MoveRNPC(rpol[rpolid][RPOL_NPCID], rpol[rpolid][RPOL_WAYPOINTS_X][0], rpol[rpolid][RPOL_WAYPOINTS_Y][0],
                                
rpol[rpolid][RPOL_WAYPOINTS_Z][0], RNPC_SPEED_RUN);
                return 
true;
        }
        return 
0;
}

stock RemoveRNPCPolice(rpolid)
{
        if (
rpol[rpolid][RPOL_TIMER] > -1) {
                
// Stop timer
                
KillTimer(rpol[slot][RPOL_TIMER]);
        }
        
// Kick the NPC
        
Kick(rpol[rpolid][RPOL_NPCID];
        
// Reset data
        
rpol[rpolid] = {-1, -10.00.00.000, -1};
}

// This is the timer that actually controls the policeman
// and so the actually interesting "KI" for the RNPC
forward WatchTimer(id);
public 
WatchTimer(id) {
        if (
rpol[id][RPOL_CURTARGET] > -1) {
                new 
Float:xFloat:yFloat:z;
                
GetPlayerPos(rpol[id][RPOL_CURTARGET], x,z);
                if (!
IsPlayerInRangeOfPoint(rpol[id][RPOL_NPCID], RPOL_VISIONRANGE 2.0xyz)
                        || 
GetPlayerState(rpol[id][RPOL_CURTARGET]) != PLAYER_STATE_ONFOOT) {
                        
// Target escaped or died
                        // Stop shooting
                        
RNPC_SetKeys(0);
                        
// Continue route
                        
MoveRNPC(rpol[id][RPOL_NPCID], rpol[id][RPOL_WAYPOINTS_X][rpol[id][RPOL_NEXTWP]],
                                
rpol[id][RPOL_WAYPOINTS_Y][rpol[id][RPOL_NEXTWP]], rpol[id][RPOL_WAYPOINTS_Z][rpol[id][RPOL_NEXTWP]],
                                
RNPC_SPEED_RUN);
                        
rpol[id][RPOL_CURTARGET] = -1;
                        return;
                } else
                if (
IsPlayerInRangeOfPoint(rpol[id][RPOL_NPCID], RPOL_ATTACKRANGExyz)) {
                        
// Target is in attackrange
                        // Stop running and start shhoting
                        
new Float:oxFloat:oyFloat:oz;
                        
GetPlayerPos(rpol[id][RPOL_NPCID], oxoyoz);
                        
// Angle to the target
                        
new Float:angle atan2(ox xoy y) + 180.0;
                        
// Stop and build, alternate slot for security
                        
RNPC_StopPlayback(rpol[id][RPOL_NPCID]);
                        
RNPC_CreateBuild(rpol[id][RPOL_NPCID], PLAYER_RECORDING_TYPE_ONFOOT1);
                        
// Set weapon
                        
RNPC_SetWeaponID(22);
                        
// Set facing angle to the target
                        
RNPC_SetAngleQuats(0.0angle0.0);
                        
// Start firing
                        
RNPC_SetKeys(KEY_FIRE);
                        
// Move towards the target from the current position
                        
RNPC_ConcatMovement(xyzRNPC_SPEED_RUN);
                        
// Finish build
                        
RNPC_FinishBuild();

                        
// Start playback
                        
RNPC_StartBuildPlayback(id1);

                } else {
                        
// Stop shooting
                        
RNPC_SetKeys(0);
                        
// Move towards the targets
                        
MoveRNPC(rpol[id][RPOL_NPCID], xyzRNPC_SPEED_RUN);
                }
        }
}

// Hook OnNPCPlaybackFinished to determine when a NPC reached his current waypoint
public OnRNPCPlaybackFinished(npcid)
{
        
// Find the array index of the npc
        
new slot = -1;
        for (new 
0MAX_RNPC_POLICEi++) {
                if (
rpol[i][RPOL_NPCID] == npcid) {
                        
slot i;
                        break;
                }
        }
        if (
slot > -1) {
                
// NPC is a RNPC policeman
                
if (rpol[slot][RPOL_CURTARGET] == -1) {
                        
// Increase current waypoint index, and set it to 0 when the last one is reached
                        
rpol[slot][RPOL_NEXTWP] = (rpol[slot][RPOL_NEXTWP] + 1) % rpol[slot][RPOL_WPINDEX];
                        
// Make him walk to the next waypoint
                        
MoveRNPC(rpol[slot][RPOL_NPCID], rpol[slot][RPOL_WAYPOINTS_X][rpol[slot][RPOL_NEXTWP]],
                                
rpol[slot][RPOL_WAYPOINTS_Y][rpol[slot][RPOL_NEXTWP]], rpol[slot][RPOL_WAYPOINTS_Z][rpol[slot][RPOL_NEXTWP]],
                                
RNPC_SPEED_WALK);
                }
        }
        
CallLocalFunction("RNPC_OnRNPCPlaybackFinished""i"npcid);
}
#if defined _ALS_OnRNPCPlaybackFinished
    #undef OnRNPCPlaybackFinished
#else
    #define _ALS_OnRNPCPlaybackFinished
#endif
#define OnRNPCPlaybackFinished RNPC_OnRNPCPlaybackFinished
forward RNPC_OnRNPCPlaybackFinished(npcid);

// Hook OnPlayerKeyStateChange to detect firing players
public OnPlayerKeyStateChange(playeridnewkeysoldkeys)
{
        
// Check if player started firing
        
if (!(oldkeys KEY_FIRE) && (newkeys KEY_FIRE)) {
                
// Check if player holds a gun
                
if (GetPlayerWeapon(playerid) > 16 && GetPlayerWeapon(playerid) < 40) {
                        new 
Float:pxFloat:pyFloat:pz;
                        for (new 
0MAX_RNPC_POLICEi++) {
                                
// Skip invalid and already following npcs
                                
if (rpol[i][RPOL_NPCID] == -|| rpol[i][RPOL_CURTARGET] > -1) continue;
                                
GetPlayerPos(rpol[i][RPOL_NPCID], pxpypz);
                                
// If police in in range make him chase the attacking player
                                
if (IsPlayerInRangeOfPoint(playeridRPOL_VISIONRANGEpxpypz)) {
                                        
rpol[i][RPOL_CURTARGET] = playerid;
                                }
                        }
                }
        }
        
CallLocalFunction("RNPC_OnPlayerKeyStateChange""iii"playeridnewkeysoldkeys);
}
#if defined _ALS_OnPlayerKeyStateChange
    #undef OnPlayerKeyStateChange
#else
    #define _ALS_OnPlayerKeyStateChange
#endif
#define OnPlayerKeyStateChange RNPC_OnPlayerKeyStateChange
forward RNPC_OnPlayerKeyStateChange(playeridnewkeysoldkeys);

// Hook OnPlayerSpawn to set the NPCs skin
public OnPlayerSpawn(playerid)
{
        if (
IsPlayerNPC(playerid)) {
                
// Find the array index of the npc
                
new slot = -1;
                for (new 
0MAX_RNPC_POLICEi++) {
                        if (
rpol[i][RPOL_NPCID] == playerid) {
                                
slot i;
                                break;
                        }
                }
                
// If playerid is a policeman
                
if (slot > -1) {
                        
SetPlayerSkin(playeridrpol[slot][RPOL_SKIN]);
                }
        }
        
CallLocalFunction("RNPC_OnPlayerSpawn""i"playerid);
        return 
1;

Do u know this error??

bookknp is offline   Reply With Quote
Old 20/07/2018, 05:30 PM   #13
bookknp
Huge Clucker
 
bookknp's Avatar
 
Join Date: Dec 2013
Posts: 218
Reputation: 24
Default Re: CreateRNPCPolice Dont Spawn

Bump
bookknp is offline   Reply With Quote
Old 21/07/2018, 12:46 AM   #14
bookknp
Huge Clucker
 
bookknp's Avatar
 
Join Date: Dec 2013
Posts: 218
Reputation: 24
Default Re: CreateRNPCPolice Dont Spawn

I solve it, the RNPCPolice only join if u have samp VERSION 0.3e!!!
bookknp is offline   Reply With Quote
Old 21/07/2018, 05:56 AM   #15
bookknp
Huge Clucker
 
bookknp's Avatar
 
Join Date: Dec 2013
Posts: 218
Reputation: 24
Default Re: CreateRNPCPolice Dont Spawn

If dont spawn RNPCPolice cause is file called sampnpc.exe surely no i have It. Search in ****** sampnpc.exe 0.3.7 R2 anda download It and copy in samp server carpet...

Mauzen, 1) what is te way for spawn RNPCPolice in an Zone?? for example SetPlayerPos(rp,...); i dont know if could i use it?

Other question, 2) the weapon of RNPCPolice dont hurt me, why??

Thx for all Mauzen, +rep

Last edited by bookknp; 21/07/2018 at 04:30 PM.
bookknp is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
dialog dont spawn car enzulikeS Scripting Help 18 08/05/2018 06:17 PM
dont spawn at my location truckingserver Scripting Help 1 17/08/2014 01:07 PM
Objects dont spawn coolmark1995 Scripting Help 17 19/03/2014 05:32 PM
Vehicles dont spawn jtemple042996 Scripting Help 13 12/06/2012 08:57 PM
dont spawn ingame [HKS]dlegend Help Archive 6 10/10/2009 09:18 PM


All times are GMT. The time now is 05:40 PM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.