View difference between Paste ID: T5aLz8GU and 23CkgczC
SHOW: | | - or go back to the newest paste.
1
// Easy and automatically connecting NPCs to the server, by Amit_B
2
#include "a_samp"
3
#define MAX_NPCS 10 // Max NPCs in the server
4
#define SERVER_IP "127.0.0.1" // IP of your server
5
enum NPCsData
6
{
7
	npcFile[16],
8
	npcName[MAX_PLAYER_NAME],
9
	npcVehicle,
10
	npcVehicleSeat,
11
	Text3D:npcText,
12
	npcSkin,
13
	npcVehicleModel,
14
	Float:npcPos[4],
15
	npcVehicleColor[2],
16
	npcInterior,
17
	npcWorld,
18
	npcColor
19
};
20
new npcVehicles[MAX_NPCS] = {INVALID_VEHICLE_ID,...};
21
new NPCs[][NPCsData] =
22
{   // file, name, vehicle, vseat, text, skin, veh model, veh xyza, veh colors, interior, world, color
23
	// These ones are examples. You need to edit this list to your NPCs so it will work fine.
24-
	{"pilot","DM_Pilot",1,0,(Text3D:1024),61,511,{1388.7698,1666.8741,12.1944,179.9533},{130,128},0,0,0},
24+
25
	{"bus","DM_Bus",1,0,(Text3D:1024),255,431,{1734.6570,1626.7157,9.2003,163.3937},{132,131},0,0,0},
26
	{"shamal","DM_Plane",1,0,(Text3D:1024),61,519,{0.0,0.0,0.0,0.0},{-1,-1},0,0,0},
27
	{"idle","DM_Bank",0,0,(Text3D:1024),147,0,{-23.3069,-57.6647,1003.5469,357.6211},{-1,-1},6,0,0},
28-
	{"idle","DM_Bank2",0,0,(Text3D:1024),147,0,{278.1820,-1611.4216,114.4512,262.8170},{-1,-1},6,0,0},
28+
	{"idle","DM_Bank2",0,0,(Text3D:1024),147,0,{278.1820,-1611.4216,114.4512,262.8170},{-1,-1},6,0,0}
29-
	{"idle","DM_PhoneShop",0,0,(Text3D:1024),172,0,{557.0210,1664.4828,539.7238,177.6691},{-1,-1},0,0,0},
29+
30-
	{"idle","DM_BombShop",0,0,(Text3D:1024),179,0,{2570.9924,-2197.4797,-0.2188,4.7310},{-1,-1},0,0,0},
30+
31-
	{"idle","DM_PetShop",0,0,(Text3D:1024),11,0,{512.8277,-1951.2592,2.6859,89.6683},{-1,-1},0,0,0}
31+
32
	new maxnpc[16], maxnpcs = sizeof(NPCs);
33
	format(maxnpc,sizeof(maxnpc),"maxnpc %d",maxnpcs);
34
	SendRconCommand(maxnpc);
35
	for(new i = 0; i < maxnpcs; i++)
36
	{
37
		ConnectNPC(NPCs[i][npcName],NPCs[i][npcFile]);
38
		NPCs[i][npcColor] = rgba2hex(random(256),random(256),random(256),255);
39
		NPCs[i][npcText] = Create3DTextLabel(NPCs[i][npcName],(NPCs[i][npcColor] & 0xFFFFFF00) | 175,0.0,0.0,0.0,50.0,0,0);
40
		if(NPCs[i][npcVehicle])
41
		{
42
			npcVehicles[i] = CreateVehicle(NPCs[i][npcVehicleModel],NPCs[i][npcPos][0],NPCs[i][npcPos][1],NPCs[i][npcPos][2],NPCs[i][npcPos][3],NPCs[i][npcVehicleColor][0],NPCs[i][npcVehicleColor][1],180);
43
			LinkVehicleToInterior(npcVehicles[i],NPCs[i][npcInterior]);
44
			SetVehicleVirtualWorld(npcVehicles[i],NPCs[i][npcWorld]);
45
		}
46
	}
47
	return 1;
48
}
49
public OnFilterScriptExit()
50
{
51
	return 1;
52
}
53
public OnPlayerConnect(playerid)
54
{
55
	if(IsPlayerNPC(playerid))
56
	{
57
		new npcIP[16], npcN[MAX_PLAYER_NAME], bool:flag = false;
58
		GetPlayerIp(playerid,npcIP,16);
59
		GetPlayerName(playerid,npcN,MAX_PLAYER_NAME);
60
		for(new i = 0; i < sizeof(NPCs) && !flag; i++) if(!strcmp(npcN,NPCs[i][npcName])) flag = true;
61
		if(flag && strcmp(npcIP,SERVER_IP) != 0) flag = false;
62
		if(!flag) return Kick(playerid), 0;
63
	}
64
	return 1;
65
}
66
public OnPlayerSpawn(playerid)
67
{
68
	if(IsPlayerNPC(playerid))
69
	{
70
		new n[MAX_PLAYER_NAME];
71
		GetPlayerName(playerid,n,sizeof(n));
72
		new npcid = GetNPCID(n);
73
		if(npcid == -1) return 1;
74
		if(NPCs[npcid][npcVehicle]) PutPlayerInVehicle(playerid,npcVehicles[npcid],NPCs[npcid][npcVehicleSeat]);
75
		else if(NPCs[npcid][npcPos][0] != 0.0)
76
		{
77
			SetPlayerPos(playerid,NPCs[npcid][npcPos][0],NPCs[npcid][npcPos][1],NPCs[npcid][npcPos][2]);
78
			SetPlayerFacingAngle(playerid,NPCs[npcid][npcPos][3]);
79
		}
80
		SetPlayerInterior(playerid,NPCs[npcid][npcInterior]);
81
		SetPlayerVirtualWorld(playerid,NPCs[npcid][npcWorld]);
82
		Attach3DTextLabelToPlayer(NPCs[npcid][npcText],playerid,0.0,0.0,0.2);
83
		SetPlayerSkin(playerid,NPCs[npcid][npcSkin]);
84
		SetPlayerColor(playerid,NPCs[npcid][npcColor]);
85
	}
86
	return 1;
87
}
88
stock rgba2hex(r,g,b,a) return (r*16777216) + (g*65536) + (b*256) + a;
89
stock GetNPCID(name[])
90
{
91
	for(new i = 0; i < sizeof(NPCs); i++) if(!strcmp(NPCs[i][npcName],name)) return i;
92
	return -1;
93
}