• Страница 1 из 1
  • 1
Модератор форума: [east_side]_trane, drifter-dron, valych, admin  
урок по NPCs 0.1a by Skorch
adminДата: Вторник, 28.06.2011, 14:29:47 | Сообщение # 1

Группа: Администраторы
Сообщений: 3869
Это мой первый [FS],в котором я выпустил npc, это было очень легко создавать, только основные математику, и здравый смысл. В общем, вы можете установить NPC, чтобы стрелять, следовать или диск для вас.

функции:
Code
SetNPCFollowPlayer(npcid, playerid); // Это позволит установить NPC следовать игрока.
SetNPCDriveToPlayer(npcid, playerid); // Это сделает NPC следовать за игроком в автомобиле.
SetNPCAttackPlayer(npcid, playerid, weapon); // Это сделает NPC атаковать игрока


Как использовать функции: (для новичков)

Code
SetNPCFollowPlayer(npcid, playerid)


Code
if(strcmp("/npc", cmdtext, true, 10) == 0)
{
          SetNPCFollowPlayer(50, playerid);
          return 1;
}

SetNPCDriveToPlayer(npcid, playerid);


Code
if(strcmp("/npc", cmdtext, true, 10) == 0)
{
          PutNPCInVehicle(npcid,vehicleid,0);
          SetNPCDriveToPlayer(npcid, playerid);
          return 1;
}


Code
if(strcmp("/npc", cmdtext, true, 10) == 0)
{
          SetNPCShootPlayer(npcid, playerid, weapon);
          return 1;
}


Как установить ее на свой режим игры:
Скопируйте include ai_npc.inc. Положите include в папку pawno/includes.
Скопируйте и вставьте эти строки в ваш режим игры:
#include

Code
//под OnPlayerDeath
public OnPlayerDeath(playerid, killerid, reason)
{
     AI_PlayerDeath(playerid);
     return 1;
}

public OnGameModeInit()
{
     AI_OnGameModeInit();
}


И код готов к использованию.
Видео: (оно содержит ошибку показывает)

кредиты:
Skorch - Создание этого [FS]
Для CNPC автора
Для автора MapAndreas.

GetXYInFrontOfPoint(&Float, &Float:y, Float:angle, Float:distance)
GetPointAngleToPoint(Float2, Float:y2, Float:X, Float:Y)
DistanceCameraTargetToLocation()
GetDistanceBetweenPlayers(playerid,targetplayerid)

ПРИМЕЧАНИЕ: Он использует CNPC и MapAndreas плагинов.

Code
/*
         -----------------------------------------------------------
                         Module - Artificial Intelligence
                         for NPCS.
                         Version: 0.1
                         Date created: 2011, 25th May.
                         By: Skorch
         -----------------------------------------------------------
*/
#define NPC_REACTION_TIME 400

#define TASK_FOLLOW 1
#define TASK_SHOOT 2
#define TASK_DRIVE 3

#define INVALID_TASK 0

#define MOVEMENT_ARRAY 0
#define SHOOTING_ARRAY 1
#define DRIVING_ARRAY 2

#define SHOOT_OFFSET -1.5

new Task[MAX_NPCS][3][3];

forward UpdateTasks();
forward Float:GetDistanceBetweenPlayers(playerid,targetplayerid);
forward AI_PlayerDeath(playerid);

stock SetNPCFollowPlayer(npcid, playerid)
{
     Task[npcid][MOVEMENT_ARRAY][0] = TASK_FOLLOW;
     Task[npcid][MOVEMENT_ARRAY][1] = playerid;
     return true;
}

stock SetNPCShootPlayer(npcid, playerid, weapon)
{
     Task[npcid][SHOOTING_ARRAY][0] = TASK_SHOOT;
     Task[npcid][SHOOTING_ARRAY][1] = playerid;
     SetNPCWeapon(npcid, weapon);
     return true;
}

stock SetNPCDriveToPlayer(npcid, playerid)
{
     Task[npcid][DRIVING_ARRAY][0] = TASK_DRIVE;
     Task[npcid][DRIVING_ARRAY][1] = playerid;
     return true;
}

stock CancelAllNPCActions(npcid)
{
     new     Float:X;
     new     Float:Y;
     new     Float:Z;

     GetPlayerPos(npcid, X, Y, Z);
     
     for(new i = 0; i < 4; i++)
     {
         Task[npcid][i][0] = INVALID_TASK;
         Task[npcid][i][1] = INVALID_TASK;
         Task[npcid][i][2] = INVALID_TASK;
         //NPC_WalkTo(npcid, X, Y, Z, 1);
     }
}

AI_PlayerDeath(playerid)
{
     foreach(NPC, npcid)
     {
         if(Task[npcid][SHOOTING_ARRAY][0] == TASK_SHOOT)
         {
              if(playerid == Task[npcid][SHOOTING_ARRAY][1])
              {
                 CancelAllNPCActions(npcid);
              }
         }
     }
}
AI_OnGameModeInit()
{
     SetTimer("UpdateTasks", NPC_REACTION_TIME, true);
}

public OnNPCDeath(npcid,killerid,reason)
{
     CancelAllNPCActions(npcid);
     DestroyNPC(npcid);
}

public UpdateTasks()
{
     foreach(NPC, npcid)
     {
         if(Task[npcid][MOVEMENT_ARRAY][0] == TASK_FOLLOW)
         {
             new     Float:Distance;
             new     Float:X;
             new     Float:Y;
             new     Float:Z;

             GetPlayerPos(Task[npcid][MOVEMENT_ARRAY][1], X, Y, Z);
             
             Distance    =   GetDistanceBetweenPlayers(npcid, Task[npcid][MOVEMENT_ARRAY][1]);
             
             if(Distance < 3)
             {

             }
             else if(Distance > 2 && Distance < 5 && Task[npcid][SHOOTING_ARRAY][0] != TASK_SHOOT )
             {
                 NPC_WalkTo(npcid, X, Y, Z, 1);
             }
             else if(Distance > 5 && Distance < 10 )
             {
                     if(Task[npcid][SHOOTING_ARRAY][0] == TASK_SHOOT && IsPlayerAimingAt(npcid, X, Y, Z, 1))
                     {
                         NPC_ShotAt(npcid, X, Y, Z + SHOOT_OFFSET);
                     }
                     else
                     {
                         NPC_RunTo(npcid, X, Y, Z, 1);
                     }
                 
             }
             else if(Distance > 10 )
             {
                 if(Task[npcid][SHOOTING_ARRAY][0] == TASK_SHOOT)
                 {
                     NPC_WalkTo(npcid, X, Y, Z, 1);
                     NPC_ShotAt(npcid, X, Y, Z + SHOOT_OFFSET);
                 }
                 else
                 {
                     NPC_SprintTo(npcid, X, Y, Z, 1);
                 }
                 
             }
             
         }
         if(Task[npcid][SHOOTING_ARRAY][0] == TASK_SHOOT)
         {
             new     Float:Distance;
             new     Float:X;
             new     Float:Y;
             new     Float:Z;

             GetPlayerPos(Task[npcid][SHOOTING_ARRAY][1], X, Y, Z);

             Distance    =   GetDistanceBetweenPlayers(npcid, Task[npcid][SHOOTING_ARRAY][1]);
             
             if(Distance > 40 && Distance < 1000 && IsPlayerAimingAt(npcid, X, Y, Z, 1) == 0 )
             {
                 NPC_RunTo(npcid, X, Y, Z, 1);
             }
             else
             {
                 NPC_ShotAt(npcid, X, Y, Z + SHOOT_OFFSET);
             }
             
         }
         if(Task[npcid][DRIVING_ARRAY][0] == TASK_DRIVE)
         {
             new     Float:X;
             new     Float:Y;
             new     Float:Z;
             new     Float:Distance;

             GetPlayerPos(Task[npcid][DRIVING_ARRAY][1], X, Y, Z);
             Distance    =   GetDistanceBetweenPlayers(npcid, Task[npcid][SHOOTING_ARRAY][1]);
             if(Distance > 0 && Distance < 6)
             {
                 // stop
             }
             else if(Distance > 17 && Distance < 30)
             {
                 NPC_DriveTo(npcid, X, Y, Z, 30, 1);
             }
             else if(Distance > 30 && Distance < 100)
             {
                 NPC_DriveTo(npcid, X, Y, Z, 60, 1);
             }
             else if(Distance > 100)
             {
                 NPC_DriveTo(npcid, X, Y, Z, 150, 1);
             }
         }
     }
}
                         

             
             

public Float:GetDistanceBetweenPlayers(playerid,targetplayerid)
{
     new     Float:x1;
     new     Float:y1;
     new     Float:z1;
     new     Float:x2;
     new     Float:y2;
     new     Float:z2;
     
     if(!IsPlayerConnected(playerid) || !IsPlayerConnected(targetplayerid))
     {
         return -1.00;
     }
     
     GetPlayerPos(playerid,x1,y1,z1);
     GetPlayerPos(targetplayerid,x2,y2,z2);
     
     return floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));
}

Float:DistanceCameraTargetToLocation(Float:CamX, Float:CamY, Float:CamZ, Float:ObjX, Float:ObjY, Float:ObjZ, Float:FrX, Float:FrY, Float:FrZ) {

     new Float:TGTDistance;

     TGTDistance = floatsqroot((CamX - ObjX) * (CamX - ObjX) + (CamY - ObjY) * (CamY - ObjY) + (CamZ - ObjZ) * (CamZ - ObjZ));

     new Float:tmpX, Float:tmpY, Float:tmpZ;

     tmpX = FrX * TGTDistance + CamX;
     tmpY = FrY * TGTDistance + CamY;
     tmpZ = FrZ * TGTDistance + CamZ;

     return floatsqroot((tmpX - ObjX) * (tmpX - ObjX) + (tmpY - ObjY) * (tmpY - ObjY) + (tmpZ - ObjZ) * (tmpZ - ObjZ));
}

stock Float:GetPointAngleToPoint(Float:x2, Float:y2, Float:X, Float:Y) {

   new Float:DX, Float:DY;
   new Float:angle;

   DX = floatabs(floatsub(x2,X));
   DY = floatabs(floatsub(y2,Y));

   if (DY == 0.0 || DX == 0.0) {
     if(DY == 0 && DX > 0) angle = 0.0;
     else if(DY == 0 && DX < 0) angle = 180.0;
     else if(DY > 0 && DX == 0) angle = 90.0;
     else if(DY < 0 && DX == 0) angle = 270.0;
     else if(DY == 0 && DX == 0) angle = 0.0;
   }
   else {
     angle = atan(DX/DY);

     if(X > x2 && Y <= y2) angle += 90.0;
     else if(X <= x2 && Y < y2) angle = floatsub(90.0, angle);
     else if(X < x2 && Y >= y2) angle -= 90.0;
     else if(X >= x2 && Y > y2) angle = floatsub(270.0, angle);
   }

   return floatadd(angle, 90.0);
}

stock GetXYInFrontOfPoint(&Float:x, &Float:y, Float:angle, Float:distance) {
     x += (distance * floatsin(-angle, degrees));
     y += (distance * floatcos(-angle, degrees));
}

stock IsPlayerAimingAt(playerid, Float:x, Float:y, Float:z, Float:radius)
{
   new   Float:camera_x;
   new   Float:camera_y;
   new   Float:camera_z;
   new   Float:vector_x;
   new   Float:vector_y;
   new   Float:vector_z;
   
   GetPlayerCameraPos(playerid, camera_x, camera_y, camera_z);
   GetPlayerCameraFrontVector(playerid, vector_x, vector_y, vector_z);

     new Float:vertical, Float:horizontal;

   switch (GetPlayerWeapon(playerid))
   {
       case 34,35,36:
       {
         if (DistanceCameraTargetToLocation(camera_x, camera_y, camera_z, x, y, z, vector_x, vector_y, vector_z) < radius) return true;
         return false;
       }
       case 30,31: {vertical = 4.0; horizontal = -1.6;}
       case 33: {vertical = 2.7; horizontal = -1.0;}
       default: {vertical = 6.0; horizontal = -2.2;}
   }
   new Float:angle = GetPointAngleToPoint(0, 0, floatsqroot(vector_x*vector_x+vector_y*vector_y), vector_z) - 270.0;
   new Float:resize_x, Float:resize_y, Float:resize_z = floatsin(angle+vertical, degrees);
   GetXYInFrontOfPoint(resize_x, resize_y, GetPointAngleToPoint(0, 0, vector_x, vector_y)+horizontal, floatcos(angle+vertical, degrees));

   if (DistanceCameraTargetToLocation(camera_x, camera_y, camera_z, x, y, z, resize_x, resize_y, resize_z) < radius) return true;
   return false;
}

Источник:sa-mp.com
Автор:Skorch
Думаю и для вас пригодится это чтоб создавать ботов легче было :)


zm-jail.ru

Разработка сайта samp-pawno.ru


 
СообщениеЭто мой первый [FS],в котором я выпустил npc, это было очень легко создавать, только основные математику, и здравый смысл. В общем, вы можете установить NPC, чтобы стрелять, следовать или диск для вас.

функции:
Code
SetNPCFollowPlayer(npcid, playerid); // Это позволит установить NPC следовать игрока.
SetNPCDriveToPlayer(npcid, playerid); // Это сделает NPC следовать за игроком в автомобиле.
SetNPCAttackPlayer(npcid, playerid, weapon); // Это сделает NPC атаковать игрока


Как использовать функции: (для новичков)

Code
SetNPCFollowPlayer(npcid, playerid)


Code
if(strcmp("/npc", cmdtext, true, 10) == 0)
{
          SetNPCFollowPlayer(50, playerid);
          return 1;
}

SetNPCDriveToPlayer(npcid, playerid);


Code
if(strcmp("/npc", cmdtext, true, 10) == 0)
{
          PutNPCInVehicle(npcid,vehicleid,0);
          SetNPCDriveToPlayer(npcid, playerid);
          return 1;
}


Code
if(strcmp("/npc", cmdtext, true, 10) == 0)
{
          SetNPCShootPlayer(npcid, playerid, weapon);
          return 1;
}


Как установить ее на свой режим игры:
Скопируйте include ai_npc.inc. Положите include в папку pawno/includes.
Скопируйте и вставьте эти строки в ваш режим игры:
#include

Code
//под OnPlayerDeath
public OnPlayerDeath(playerid, killerid, reason)
{
     AI_PlayerDeath(playerid);
     return 1;
}

public OnGameModeInit()
{
     AI_OnGameModeInit();
}


И код готов к использованию.
Видео: (оно содержит ошибку показывает)

кредиты:
Skorch - Создание этого [FS]
Для CNPC автора
Для автора MapAndreas.

GetXYInFrontOfPoint(&Float, &Float:y, Float:angle, Float:distance)
GetPointAngleToPoint(Float2, Float:y2, Float:X, Float:Y)
DistanceCameraTargetToLocation()
GetDistanceBetweenPlayers(playerid,targetplayerid)

ПРИМЕЧАНИЕ: Он использует CNPC и MapAndreas плагинов.

Code
/*
         -----------------------------------------------------------
                         Module - Artificial Intelligence
                         for NPCS.
                         Version: 0.1
                         Date created: 2011, 25th May.
                         By: Skorch
         -----------------------------------------------------------
*/
#define NPC_REACTION_TIME 400

#define TASK_FOLLOW 1
#define TASK_SHOOT 2
#define TASK_DRIVE 3

#define INVALID_TASK 0

#define MOVEMENT_ARRAY 0
#define SHOOTING_ARRAY 1
#define DRIVING_ARRAY 2

#define SHOOT_OFFSET -1.5

new Task[MAX_NPCS][3][3];

forward UpdateTasks();
forward Float:GetDistanceBetweenPlayers(playerid,targetplayerid);
forward AI_PlayerDeath(playerid);

stock SetNPCFollowPlayer(npcid, playerid)
{
     Task[npcid][MOVEMENT_ARRAY][0] = TASK_FOLLOW;
     Task[npcid][MOVEMENT_ARRAY][1] = playerid;
     return true;
}

stock SetNPCShootPlayer(npcid, playerid, weapon)
{
     Task[npcid][SHOOTING_ARRAY][0] = TASK_SHOOT;
     Task[npcid][SHOOTING_ARRAY][1] = playerid;
     SetNPCWeapon(npcid, weapon);
     return true;
}

stock SetNPCDriveToPlayer(npcid, playerid)
{
     Task[npcid][DRIVING_ARRAY][0] = TASK_DRIVE;
     Task[npcid][DRIVING_ARRAY][1] = playerid;
     return true;
}

stock CancelAllNPCActions(npcid)
{
     new     Float:X;
     new     Float:Y;
     new     Float:Z;

     GetPlayerPos(npcid, X, Y, Z);
     
     for(new i = 0; i < 4; i++)
     {
         Task[npcid][i][0] = INVALID_TASK;
         Task[npcid][i][1] = INVALID_TASK;
         Task[npcid][i][2] = INVALID_TASK;
         //NPC_WalkTo(npcid, X, Y, Z, 1);
     }
}

AI_PlayerDeath(playerid)
{
     foreach(NPC, npcid)
     {
         if(Task[npcid][SHOOTING_ARRAY][0] == TASK_SHOOT)
         {
              if(playerid == Task[npcid][SHOOTING_ARRAY][1])
              {
                 CancelAllNPCActions(npcid);
              }
         }
     }
}
AI_OnGameModeInit()
{
     SetTimer("UpdateTasks", NPC_REACTION_TIME, true);
}

public OnNPCDeath(npcid,killerid,reason)
{
     CancelAllNPCActions(npcid);
     DestroyNPC(npcid);
}

public UpdateTasks()
{
     foreach(NPC, npcid)
     {
         if(Task[npcid][MOVEMENT_ARRAY][0] == TASK_FOLLOW)
         {
             new     Float:Distance;
             new     Float:X;
             new     Float:Y;
             new     Float:Z;

             GetPlayerPos(Task[npcid][MOVEMENT_ARRAY][1], X, Y, Z);
             
             Distance    =   GetDistanceBetweenPlayers(npcid, Task[npcid][MOVEMENT_ARRAY][1]);
             
             if(Distance < 3)
             {

             }
             else if(Distance > 2 && Distance < 5 && Task[npcid][SHOOTING_ARRAY][0] != TASK_SHOOT )
             {
                 NPC_WalkTo(npcid, X, Y, Z, 1);
             }
             else if(Distance > 5 && Distance < 10 )
             {
                     if(Task[npcid][SHOOTING_ARRAY][0] == TASK_SHOOT && IsPlayerAimingAt(npcid, X, Y, Z, 1))
                     {
                         NPC_ShotAt(npcid, X, Y, Z + SHOOT_OFFSET);
                     }
                     else
                     {
                         NPC_RunTo(npcid, X, Y, Z, 1);
                     }
                 
             }
             else if(Distance > 10 )
             {
                 if(Task[npcid][SHOOTING_ARRAY][0] == TASK_SHOOT)
                 {
                     NPC_WalkTo(npcid, X, Y, Z, 1);
                     NPC_ShotAt(npcid, X, Y, Z + SHOOT_OFFSET);
                 }
                 else
                 {
                     NPC_SprintTo(npcid, X, Y, Z, 1);
                 }
                 
             }
             
         }
         if(Task[npcid][SHOOTING_ARRAY][0] == TASK_SHOOT)
         {
             new     Float:Distance;
             new     Float:X;
             new     Float:Y;
             new     Float:Z;

             GetPlayerPos(Task[npcid][SHOOTING_ARRAY][1], X, Y, Z);

             Distance    =   GetDistanceBetweenPlayers(npcid, Task[npcid][SHOOTING_ARRAY][1]);
             
             if(Distance > 40 && Distance < 1000 && IsPlayerAimingAt(npcid, X, Y, Z, 1) == 0 )
             {
                 NPC_RunTo(npcid, X, Y, Z, 1);
             }
             else
             {
                 NPC_ShotAt(npcid, X, Y, Z + SHOOT_OFFSET);
             }
             
         }
         if(Task[npcid][DRIVING_ARRAY][0] == TASK_DRIVE)
         {
             new     Float:X;
             new     Float:Y;
             new     Float:Z;
             new     Float:Distance;

             GetPlayerPos(Task[npcid][DRIVING_ARRAY][1], X, Y, Z);
             Distance    =   GetDistanceBetweenPlayers(npcid, Task[npcid][SHOOTING_ARRAY][1]);
             if(Distance > 0 && Distance < 6)
             {
                 // stop
             }
             else if(Distance > 17 && Distance < 30)
             {
                 NPC_DriveTo(npcid, X, Y, Z, 30, 1);
             }
             else if(Distance > 30 && Distance < 100)
             {
                 NPC_DriveTo(npcid, X, Y, Z, 60, 1);
             }
             else if(Distance > 100)
             {
                 NPC_DriveTo(npcid, X, Y, Z, 150, 1);
             }
         }
     }
}
                         

             
             

public Float:GetDistanceBetweenPlayers(playerid,targetplayerid)
{
     new     Float:x1;
     new     Float:y1;
     new     Float:z1;
     new     Float:x2;
     new     Float:y2;
     new     Float:z2;
     
     if(!IsPlayerConnected(playerid) || !IsPlayerConnected(targetplayerid))
     {
         return -1.00;
     }
     
     GetPlayerPos(playerid,x1,y1,z1);
     GetPlayerPos(targetplayerid,x2,y2,z2);
     
     return floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));
}

Float:DistanceCameraTargetToLocation(Float:CamX, Float:CamY, Float:CamZ, Float:ObjX, Float:ObjY, Float:ObjZ, Float:FrX, Float:FrY, Float:FrZ) {

     new Float:TGTDistance;

     TGTDistance = floatsqroot((CamX - ObjX) * (CamX - ObjX) + (CamY - ObjY) * (CamY - ObjY) + (CamZ - ObjZ) * (CamZ - ObjZ));

     new Float:tmpX, Float:tmpY, Float:tmpZ;

     tmpX = FrX * TGTDistance + CamX;
     tmpY = FrY * TGTDistance + CamY;
     tmpZ = FrZ * TGTDistance + CamZ;

     return floatsqroot((tmpX - ObjX) * (tmpX - ObjX) + (tmpY - ObjY) * (tmpY - ObjY) + (tmpZ - ObjZ) * (tmpZ - ObjZ));
}

stock Float:GetPointAngleToPoint(Float:x2, Float:y2, Float:X, Float:Y) {

   new Float:DX, Float:DY;
   new Float:angle;

   DX = floatabs(floatsub(x2,X));
   DY = floatabs(floatsub(y2,Y));

   if (DY == 0.0 || DX == 0.0) {
     if(DY == 0 && DX > 0) angle = 0.0;
     else if(DY == 0 && DX < 0) angle = 180.0;
     else if(DY > 0 && DX == 0) angle = 90.0;
     else if(DY < 0 && DX == 0) angle = 270.0;
     else if(DY == 0 && DX == 0) angle = 0.0;
   }
   else {
     angle = atan(DX/DY);

     if(X > x2 && Y <= y2) angle += 90.0;
     else if(X <= x2 && Y < y2) angle = floatsub(90.0, angle);
     else if(X < x2 && Y >= y2) angle -= 90.0;
     else if(X >= x2 && Y > y2) angle = floatsub(270.0, angle);
   }

   return floatadd(angle, 90.0);
}

stock GetXYInFrontOfPoint(&Float:x, &Float:y, Float:angle, Float:distance) {
     x += (distance * floatsin(-angle, degrees));
     y += (distance * floatcos(-angle, degrees));
}

stock IsPlayerAimingAt(playerid, Float:x, Float:y, Float:z, Float:radius)
{
   new   Float:camera_x;
   new   Float:camera_y;
   new   Float:camera_z;
   new   Float:vector_x;
   new   Float:vector_y;
   new   Float:vector_z;
   
   GetPlayerCameraPos(playerid, camera_x, camera_y, camera_z);
   GetPlayerCameraFrontVector(playerid, vector_x, vector_y, vector_z);

     new Float:vertical, Float:horizontal;

   switch (GetPlayerWeapon(playerid))
   {
       case 34,35,36:
       {
         if (DistanceCameraTargetToLocation(camera_x, camera_y, camera_z, x, y, z, vector_x, vector_y, vector_z) < radius) return true;
         return false;
       }
       case 30,31: {vertical = 4.0; horizontal = -1.6;}
       case 33: {vertical = 2.7; horizontal = -1.0;}
       default: {vertical = 6.0; horizontal = -2.2;}
   }
   new Float:angle = GetPointAngleToPoint(0, 0, floatsqroot(vector_x*vector_x+vector_y*vector_y), vector_z) - 270.0;
   new Float:resize_x, Float:resize_y, Float:resize_z = floatsin(angle+vertical, degrees);
   GetXYInFrontOfPoint(resize_x, resize_y, GetPointAngleToPoint(0, 0, vector_x, vector_y)+horizontal, floatcos(angle+vertical, degrees));

   if (DistanceCameraTargetToLocation(camera_x, camera_y, camera_z, x, y, z, resize_x, resize_y, resize_z) < radius) return true;
   return false;
}

Источник:sa-mp.com
Автор:Skorch
Думаю и для вас пригодится это чтоб создавать ботов легче было :)

Автор - admin
Дата добавления - 28.06.2011 в 14:29:47
  • Страница 1 из 1
  • 1
Поиск:
Загрузка страницы, займет меньше минуты...
Загрузка...

Статистика Форума
Последнии темы Читаемые темы Лучшие пользователи Новые пользователи
Система телефонов поломалась
Не в себе
фильм скалайн
Трансформеры 3
форсаж 6
Ищу [FS]Для админок на сервер
нужны координаты карты для отметки зон...
Помогите найти мод
pawno урок автоматические ворота
обращение к скриптерам.
Вопросы по скриптингу
Ваши ошибки при компиляции GM/FS

Вопросы по скриптингу

(1081)

Считаем до 1000

(274)

Ваши ошибки при компиляция gm

(260)

Набор в команду

(80)

Ваши ошибки при компиляции GM/FS

(71)

вопроосы по скриптингу от 22.04.2013

(64)

Баннеробмен

(64)

несколько команд на samp 0.3 c

(64)

Оценки сайта samp-pawno.ru

(55)

Заказ хостинга

(51)

Набор в команду(форум)

(45)

Урок №61 по созданию системы авто для GodFather

(45)

admin

(3869)

[east_side]_trane

(443)

TWiX

(316)

valych

(501)

drifter-dron

(477)

danik_rok

(317)

Dimka_71rus

(360)

Drifter96

(300)

MaNb9K

(220)

[MTA]MaPeR5518

(181)

Dima_Tkach

(107)

Nik_Ull

(184)

system32xzxz

(Четверг 09:25:24)

torbin169

(Суббота 23:09:29)

kuchuk_00

(Суббота 17:10:14)

artem_boyko_3

(Суббота 15:57:37)

greggelbak

(Среда 18:29:37)

vladisvlavs

(Среда 13:51:57)

add02102002

(Понедельник 22:37:15)

Диман221

(Понедельник 18:12:45)

almas051004

(Воскресенье 11:05:32)

megasuccessms

(Суббота 14:15:36)

nawe

(Пятница 22:25:23)

swoysb

(Пятница 14:55:29)

Вверх
02:46:50
ОбновитьСмайлыУправление мини-чатом
ЧАТ-PAWNO
2010-2025

vkontakte :samp-pawno.ru: