CreateRNPCPolice Dont Spawn
#3

Quote:
Originally Posted by RedRex;4037i895
Show us line RNPC2.inc(222) at the include.
This is include... can u help me?? i donwloaded it


PHP код:
/**
 * RNPC Police include
 * Simple AI and tutorial script
 * Mauzen, 10.7.2012, V1.0
 */
#include <RNPC>
#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
new pol;
// 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, -1, 0.0, 0.0, 0.0, 0, 0, -1}, {-1, -1, 0.0, 0.0, 0.0, 0, 0, -1},
        {-
1, -1, 0.0, 0.0, 0.0, 0, 0, -1}, {-1, -1, 0.0, 0.0, 0.0, 0, 0, -1}, {-1, -1, 0.0, 0.0, 0.0, 0, 0, -1},
        {-
1, -1, 0.0, 0.0, 0.0, 0, 0, -1}, {-1, -1, 0.0, 0.0, 0.0, 0, 0, -1}, {-1, -1, 0.0, 0.0, 0.0, 0, 0, -1} };
// Creates a new policeman
stock CreateRNPCPolice(name[], skin)
{
        
// Find a free spot in the rpol array
        
new slot = -1;
        for (new 
i = 0; i < MAX_RNPC_POLICE; i++) {
                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(rpolid, Float:x, Float:y, Float: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] == -1 && rpol[rpolid][RPOL_NPCID] != -1) {
                
rpol[rpolid][RPOL_TIMER] = SetTimerEx("WatchTimer", RPOL_UPDATE, 1, "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, -1, 0.0, 0.0, 0.0, 0, 0, -1};
}
public 
OnGameModeInit()
{
if(
IsPlayerNPC(playerid)){
pol = ConnectRNPC("Officerino");
new 
rp = CreateRNPCPolice ("Officerino", 280);
AddRPOLWaypoint (rp, 2029.42, 1354.34, 10.5);
AddRPOLWaypoint (rp, 2033.55, 1286.21, 10.5);
AddRPOLWaypoint (rp, 2079.03, 1286.00, 10.5);
AddRPOLWaypoint (rp, 2079.02, 1362.08, 10.5);
StartRPOLRoute(rp);
}
return 
1;
}
// This is the timer that actually controls the policeman
// and so the actually interesting "KI" for the RNPC
forward Bots(playerid);
public 
Bots(playerid)
{
SetTimer("StartAllRoutes", 500, 0);
}
forward StartAllRoutes();
public 
StartAllRoutes() {
    
    
// etc
}
forward WatchTimer(id);
public 
WatchTimer(id) {
        if (
rpol[id][RPOL_CURTARGET] > -1) {
                new 
Float:x, Float:y, Float:z;
                
GetPlayerPos(rpol[id][RPOL_CURTARGET], x, y ,z);
                if (!
IsPlayerInRangeOfPoint(rpol[id][RPOL_NPCID], RPOL_VISIONRANGE * 2.0, x, y, z)
                        || 
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_ATTACKRANGE, x, y, z)) {
                        
// Target is in attackrange
                        // Stop running and start shhoting
                        
new Float:ox, Float:oy, Float:oz;
                        
GetPlayerPos(rpol[id][RPOL_NPCID], ox, oy, oz);
                        
// Angle to the target
                        
new Float:angle = atan2(ox - x, oy - 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_ONFOOT, 1);
                        
// Set weapon
                        
RNPC_SetWeaponID(22);
                        
// Set facing angle to the target
                        
RNPC_SetAngleQuats(0.0, angle, 0.0);
                        
// Start firing
                        
RNPC_SetKeys(KEY_FIRE);
                        
// Move towards the target from the current position
                        
RNPC_ConcatMovement(x, y, z, RNPC_SPEED_RUN);
                        
// Finish build
                        
RNPC_FinishBuild();
                        
// Start playback
                        
RNPC_StartBuildPlayback(id, 1);
                } else {
                        
// Stop shooting
                        
RNPC_SetKeys(0);
                        
// Move towards the targets
                        
MoveRNPC(rpol[id][RPOL_NPCID], x, y, z, RNPC_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 
i = 0; i < MAX_RNPC_POLICE; i++) {
                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(playerid, newkeys, oldkeys)
{
        
// 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:px, Float:py, Float:pz;
                        for (new 
i = 0; i < MAX_RNPC_POLICE; i++) {
                                
// Skip invalid and already following npcs
                                
if (rpol[i][RPOL_NPCID] == -1 || rpol[i][RPOL_CURTARGET] > -1) continue;
                                
GetPlayerPos(rpol[i][RPOL_NPCID], px, py, pz);
                                
// If police in in range make him chase the attacking player
                                
if (IsPlayerInRangeOfPoint(playerid, RPOL_VISIONRANGE, px, py, pz)) {
                                        
rpol[i][RPOL_CURTARGET] = playerid;
                                }
                        }
                }
        }
        
CallLocalFunction("RNPC_OnPlayerKeyStateChange", "iii", playerid, newkeys, oldkeys);
}
#if defined _ALS_OnPlayerKeyStateChange
    #undef OnPlayerKeyStateChange
#else
    #define _ALS_OnPlayerKeyStateChange
#endif
#define OnPlayerKeyStateChange RNPC_OnPlayerKeyStateChange
forward RNPC_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
// 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 
i = 0; i < MAX_RNPC_POLICE; i++) {
                        if (
rpol[i][RPOL_NPCID] == playerid) {
                                
slot = i;
                                break;
                        }
                }
                
// If playerid is a policeman
                
if (slot > -1) {
                        
SetPlayerSkin(playerid, rpol[slot][RPOL_SKIN]);
                }
        }
       
CallLocalFunction("RNPC_OnPlayerSpawn", "i", playerid);
} 
//<--------------- (Line 222)
#if defined _ALS_OnPlayerSpawn
    #undef OnPlayerSpawn
#else
    #define _ALS_OnPlayerSpawn
#endif
#define OnPlayerSpawn RNPC_OnPlayerSpawn
forward RNPC_OnPlayerSpawn(playerid); 
Reply


Messages In This Thread
CreateRNPCPolice Dont Spawn - by bookknp - 18.07.2018, 22:01
Re: CreateRNPCPolice Dont Spawn - by RedRex - 18.07.2018, 22:27
Re: CreateRNPCPolice Dont Spawn - by bookknp - 18.07.2018, 22:58
Re: CreateRNPCPolice Dont Spawn - by RedRex - 18.07.2018, 23:02
Re: CreateRNPCPolice Dont Spawn - by bookknp - 18.07.2018, 23:10
Re: CreateRNPCPolice Dont Spawn - by RedRex - 18.07.2018, 23:15
Re: CreateRNPCPolice Dont Spawn - by bookknp - 21.07.2018, 04:56

Forum Jump:


Users browsing this thread: 1 Guest(s)