Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include a_samp
- #include rnpc
- #include mapandreas
- #define MAX_ROTA 500
- #undef MAX_PLAYERS
- #define MAX_PLAYERS 15
- #define VELOCIDADE 0.005
- new Float:RotasAlvoX[MAX_PLAYERS][MAX_PLAYERS][MAX_ROTA];
- new Float:RotasAlvoY[MAX_PLAYERS][MAX_PLAYERS][MAX_ROTA];
- new Float:RotasAlvoZ[MAX_PLAYERS][MAX_PLAYERS][MAX_ROTA];
- new seguindo[MAX_PLAYERS] = {-1, ...};
- new contagemSeguindo[MAX_PLAYERS];
- new casaAtualSeguindo[MAX_PLAYERS];
- public OnGameModeInit() {
- MapAndreas_Init(2);
- AddPlayerClass(144, 1958.3783,1343.1572,15.3746, 0.0, 0, 0, 0, 0, 0, 0);
- AddPlayerClass(056, 1958.3783,1343.1572,15.3746, 0.0, 0, 0, 0, 0, 0, 0);
- SetTimer("UpdatePlayers", 700, true);
- SetTimer("checarBOT", 1000, true);
- return true;
- }
- main() {
- }
- public OnGameModeExit(){
- return true;
- }
- public OnPlayerCommandText(playerid, cmdtext[]) {
- if(cmdtext[1] == 'c') {
- ConnectRNPC("TestNpc");
- }
- return true;
- }
- public OnPlayerRequestSpawn(playerid) {
- return true;
- }
- public OnPlayerDeath(playerid, killerid, reason)
- {
- SetPVarInt(playerid, "sapawn", 0);
- return true;
- }
- public OnPlayerSpawn(playerid) {
- SetPlayerPos(playerid, 1759.0189,-1898.1260,13.5622); // todos jogadores nasceram aqui
- SetPVarInt(playerid, "sapawn", 1);
- return true;
- }
- public OnPlayerConnect(playerid) {
- return true;
- }
- public OnPlayerRequestClass(playerid,classid) {
- return true;
- }
- UpdatePlayers();
- public UpdatePlayers() {
- for(new i; i < MAX_PLAYERS; i++) {
- if(IsPlayerConnected(i)) OnPlayerUpdateEx(i);
- }
- return true;
- }
- OnPlayerUpdateEx(playerid);
- public OnPlayerUpdateEx(playerid) {
- if(IsPlayerNPC(playerid) || !GetPVarInt(playerid, "sapawn")) return true;
- static Float:x, Float:y, Float:z;
- GetPlayerPos(playerid, x, y, z);
- for(new i; i < MAX_PLAYERS; i++) {
- if(IsPlayerNPC(i) && IsPlayerInRangeOfPoint(i, 60.0, x, y, z)) {
- CalcularRota(i, playerid);
- }
- }
- return true;
- }
- /*
- * Algorítimo para desviar edifícios
- * Criado por Bruno da Silva
- * Começado 04:24 20/07/2014
- */
- checarBOT();
- public checarBOT() {
- for(new npcid; npcid < MAX_PLAYERS; npcid++) {
- if(!IsPlayerNPC(npcid) || seguindo[npcid] == -1) continue;
- new playerid = seguindo[npcid];
- static Float: x, Float:y, Float:z;
- GetPlayerPos(playerid, x,y,z);
- RotasAlvoX[playerid][npcid][contagemSeguindo[npcid]] = x;
- RotasAlvoY[playerid][npcid][contagemSeguindo[npcid]] = y;
- RotasAlvoZ[playerid][npcid][contagemSeguindo[npcid]] = z;
- contagemSeguindo[npcid]++;
- if( contagemSeguindo[npcid] == MAX_ROTA ) {
- contagemSeguindo[npcid] = 0;
- }
- }
- }
- stock CalcularRota(npcid, playerid) {
- static Float: x, Float:y, Float:z, Float: angle, Float: pz, Float: px, Float:py;
- GetPlayerPos(npcid, x,y,z);
- GetPlayerFacingAngle(npcid, angle);
- if(seguindo[npcid] == -1) {
- seguindo[npcid] = playerid;
- SendClientMessage(playerid, -1, "Tá te seguindo");
- GetPlayerPos(playerid, px,py,pz);
- MoveRNPC(npcid, px,py,pz, 0.007);
- contagemSeguindo[npcid] = 0;
- casaAtualSeguindo[npcid] = 0;
- }
- else {
- GetPlayerPos(seguindo[npcid], x,y,z);
- if(casaAtualSeguindo[npcid] < contagemSeguindo[npcid]) {
- /*
- if(Poligonal(npcid, seguindo[npcid])) {
- contagemSeguindo[npcid] = 0;
- casaAtualSeguindo[npcid] = 0;
- SendClientMessage(0, -1, "INDO RETO");
- MoveRNPC(npcid,x,y,z, VELOCIDADE);
- }
- */
- MoveRNPC(npcid, RotasAlvoX[playerid][npcid][casaAtualSeguindo[npcid]] ,RotasAlvoY[playerid][npcid][casaAtualSeguindo[npcid]],RotasAlvoZ[playerid][npcid][casaAtualSeguindo[npcid]], VELOCIDADE);
- casaAtualSeguindo[npcid]++;
- if( casaAtualSeguindo[npcid] == MAX_ROTA ) {
- casaAtualSeguindo[npcid] = 0;
- }
- }
- if(!IsPlayerInRangeOfPoint(npcid, 60.0, x, y, z)) {
- SendClientMessage(seguindo[npcid], -1, "Parou de te segui");
- contagemSeguindo[npcid] = 0;
- casaAtualSeguindo[npcid] = 0;
- return seguindo[npcid] = -1;
- }
- }
- return true;
- }
- stock Poligonal(npcid, playerid) {
- static Float:nPos[3], Float:pPos[3];
- GetPlayerPos(npcid,nPos[0],nPos[1],nPos[2]);
- GetPlayerPos(playerid,pPos[0],pPos[1],pPos[2]);
- if(nPos[2] != pPos[2]) return false;
- if(nPos[0] > pPos[0]) {
- for( ; nPos[0] > pPos[0]; nPos[0] -= 0.66) {
- if(nPos[1] > pPos[1]) {
- for( ; nPos[1] > pPos[1]; nPos[1] -= 0.66) {
- MapAndreas_FindZ_For2DCoord(nPos[0], nPos[1], pPos[2]);
- if(nPos[2] != pPos[2]) return false;
- }
- }
- else {
- for( ; nPos[1] < pPos[1]; nPos[1] += 0.66) {
- MapAndreas_FindZ_For2DCoord(nPos[0], nPos[1], pPos[2]);
- if(nPos[2] != pPos[2]) return false;
- }
- }
- }
- }
- else {
- for( ; nPos[0] < pPos[0]; nPos[0] += 0.66) {
- if(nPos[1] > pPos[1]) {
- for( ; nPos[1] > pPos[1]; nPos[1] -= 0.66) {
- MapAndreas_FindZ_For2DCoord(nPos[0], nPos[1], pPos[2]);
- if(nPos[2] != pPos[2]) return false;
- }
- }
- for( ; nPos[1] < pPos[1]; nPos[1] += 0.66) {
- MapAndreas_FindZ_For2DCoord(nPos[0], nPos[1], pPos[2]);
- if(nPos[2] != pPos[2]) return false;
- }
- }
- }
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement