Szerző Téma: Megijedõ NPC  (Megtekintve 3600 alkalommal)

Megijedõ NPC
« Dátum: 2013. szeptember 25. - 21:19:41 »
+1 Show voters
Üdv mindenki. Ebben a tutorialban egy \"Megijedõ NPC\"-t mutatok be.
Ugye elõször is amire szügség lesz:
 

#define PRESSED(%0) \\
    (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))

 


stock GetPlayerIDFromName(const playername[], partofname=0)
{
    new i;
    new playername1[64];
    for (i=0;i<MAX_PLAYERS;i++)
    {
        if (IsPlayerConnected(i))
        {
            GetPlayerName(i,playername1,sizeof(playername1));
            if (strcmp(playername1,playername,true)==0)
            {
                return i;
            }
        }
    }
    new correctsigns_userid=-1;
    new tmpuname[128];
    new hasmultiple=-1;
    if(partofname)
    {
        for (i=0;i<MAX_PLAYERS;i++)
        {
            if (IsPlayerConnected(i))
            {
                GetPlayerName(i,tmpuname,sizeof(tmpuname));
                if(!strfind(tmpuname,playername1[partofname],true, 0))
                {
                    hasmultiple++;
                    correctsigns_userid=i;
                }
                if (hasmultiple>0)
                {
                    return -2;
                }
            }
        }
    }
    return correctsigns_userid;
}

 
Ezeket nem részletezném. Az elsõ a klasszikus PRESSED függvény, a második a GetPlayerIDFromName melynek lényege, hogy névrõl keres rá a játékos ID-jére.
1: Detektáljuk, a játékos mikor céloz és mikor lõ.
 
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
   if(PRESSED(KEY_FIRE))
   {
      //Tehát amikor a játékos nyomja a tûz gombot.
   }
   if(PRESSED(KEY_HANDBRAKE && IsPlayerInAnyVehicle(playerid) == 0)) //Amikor céloz. Azét kell az IsPlayerInAnyVehicle, mivel a SAMP rendszerében egy gombnak veszi a kéziféket és a célzást.
   {
      //Tehát amikor a játékos nyomja a célzás gombot és nincs jármûben   
   }
   return 1;
}

 
2. Adjunk meg néhány információt. Ez a rész az OnPlayerKeyStateChange-részbe fog kerülni
 

new npc = GetPlayerIDFromName(\"NPC\"); //Lekérjük az NPC nevérõl az ID-jét. Figyelem! Az \"NPC\" részbe az NPC nevét írd.
new Float:x,Float:y,Float:z; //Hozzuk létre az X, Y, Z float típusu változókat.
GetPlayerPos(npc,x,y,z); //Kérjük le az NPC pozícióját. Ez arra lesz jó, hogy megnézd milyen közel vagy az NPC-hez.
new weapon = GetPlayerWeapon(playerid); //Megnézzük a játékosnak milyen fegyvere van.

 
3. Nézzük meg, hogy az NPC közelébe van-e a játékos, hogy a játékosnál lõfegyver van és, hogy a játékos ránéz-e?
 

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
   new npc = GetPlayerIDFromName(\"NPC\"); //Lekérjük az NPC nevérõl az ID-jét. Figyelem! Az \"NPC\" részbe az NPC nevét írd.
   new Float:x,Float:y,Float:z; //Hozzuk létre az X, Y, Z float típusu változókat.
   GetPlayerPos(npc,x,y,z); //Kérjük le az NPC pozícióját. Ez arra lesz jó, hogy megnézd milyen közel vagy az NPC-hez.
   new weapon = GetPlayerWeapon(playerid); //Megnézzük a játékosnak milyen fegyvere van.
   
   if(IsPlayerInRangeOfPoint(20, x, y, z) && weapon > 10 && GetPlayerTargetPlayer(playerid) == npc) //Megnézzük, hogy a játékos 20 yard távolságon belül van-e a az NPC pozíciójától, hogy lõfegyver van e a játékosnál és, hogy épp az NPC-re néz-e?
   {
      //Ha igen, csak akkor nézze, hogy a játékos lõ vagy céloz-e.
      if(PRESSED(KEY_FIRE))
      {
         //Tehát amikor a játékos nyomja a tûz gombot.
      }
      if(PRESSED(KEY_HANDBRAKE && IsPlayerInAnyVehicle(playerid) == 0)) //Amikor céloz. Azét kell az IsPlayerInAnyVehicle, mivel a SAMP rendszerében egy gombnak veszi a kéziféket és a célzást.
      {
        //Tehát amikor a játékos nyomja a célzás gombot és nincs jármûben   
      }
   }
   return 1;
}

 
4. Utolsó felvonás: Animációk, halál detektálása.
 

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
   new npc = GetPlayerIDFromName(\"NPC\"); //Lekérjük az NPC nevérõl az ID-jét. Figyelem! Az \"NPC\" részbe az NPC nevét írd.
   new Float:x,Float:y,Float:z; //Hozzuk létre az X, Y, Z float típusu változókat.
   GetPlayerPos(npc,x,y,z); //Kérjük le az NPC pozícióját. Ez arra lesz jó, hogy megnézd milyen közel vagy az NPC-hez.
   new weapon = GetPlayerWeapon(playerid); //Megnézzük a játékosnak milyen fegyvere van.
   
   if(IsPlayerInRangeOfPoint(20, x, y, z) && weapon > 10 && GetPlayerTargetPlayer(playerid) == npc) //Megnézzük, hogy a játékos 20 yard távolságon belül van-e a az NPC pozíciójától, hogy lõfegyver van e a játékosnál és, hogy épp az NPC-re néz-e?
   {
      //Ha igen, csak akkor nézze, hogy a játékos lõ vagy céloz-e.
      if(PRESSED(KEY_FIRE))
      {
         //Tehát amikor a játékos nyomja a tûz gombot.
         ApplyAnimation(npc,\"CRACK\",\"crckdeth4\",3.0,0,0,0,1,0);//Rakjuk az NPC-t fekvõ animba.
         SetPVarInt(npc, \"death\", 1); //Állítsuk be a death nevû változó értékét 1-re az npc-n.
      }
      if(PRESSED(KEY_HANDBRAKE && IsPlayerInAnyVehicle(playerid) == 0)) //Amikor céloz. Azét kell az IsPlayerInAnyVehicle, mivel a SAMP rendszerében egy gombnak veszi a kéziféket és a célzást.
      {
         //Tehát amikor a játékos nyomja a célzás gombot és nincs jármûben 
         ApplyAnimation(npc,\"ped\",\"handsup\",3.0,0,0,0,1,0);//Rakja fel a kezét az NPC.
      }
      else
      {
         //Ha nem céloz a játékos
         if(GetPVarInt(npc, \"death\") == 0)//Ha nem halott az NPC
         {
            ClearAnimations(npc);//Akkor rakja le a kezét. (Vagyis ne legyen rajta anim.)
         }
      }
   }
   return 1;
}

 
Kész! :) Így néz ki a kód:
 

#define PRESSED(%0) \\
    (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
stock GetPlayerIDFromName(const playername[], partofname=0)
{
    new i;
    new playername1[64];
    for (i=0;i<MAX_PLAYERS;i++)
    {
        if (IsPlayerConnected(i))
        {
            GetPlayerName(i,playername1,sizeof(playername1));
            if (strcmp(playername1,playername,true)==0)
            {
                return i;
            }
        }
    }
    new correctsigns_userid=-1;
    new tmpuname[128];
    new hasmultiple=-1;
    if(partofname)
    {
        for (i=0;i<MAX_PLAYERS;i++)
        {
            if (IsPlayerConnected(i))
            {
                GetPlayerName(i,tmpuname,sizeof(tmpuname));
                if(!strfind(tmpuname,playername1[partofname],true, 0))
                {
                    hasmultiple++;
                    correctsigns_userid=i;
                }
                if (hasmultiple>0)
                {
                    return -2;
                }
            }
        }
    }
    return correctsigns_userid;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
   new npc = GetPlayerIDFromName(\"NPC\"); //Lekérjük az NPC nevérõl az ID-jét. Figyelem! Az \"NPC\" részbe az NPC nevét írd.
   new Float:x,Float:y,Float:z; //Hozzuk létre az X, Y, Z float típusu változókat.
   GetPlayerPos(npc,x,y,z); //Kérjük le az NPC pozícióját. Ez arra lesz jó, hogy megnézd milyen közel vagy az NPC-hez.
   new weapon = GetPlayerWeapon(playerid); //Megnézzük a játékosnak milyen fegyvere van.
   
   if(IsPlayerInRangeOfPoint(20, x, y, z) && weapon > 10 && GetPlayerTargetPlayer(playerid) == npc) //Megnézzük, hogy a játékos 20 yard távolságon belül van-e a az NPC pozíciójától, hogy lõfegyver van e a játékosnál és, hogy épp az NPC-re néz-e?
   {
      //Ha igen, csak akkor nézze, hogy a játékos lõ vagy céloz-e.
      if(PRESSED(KEY_FIRE))
      {
         //Tehát amikor a játékos nyomja a tûz gombot.
         ApplyAnimation(npc,\"CRACK\",\"crckdeth4\",3.0,0,0,0,1,0);//Rakjuk az NPC-t fekvõ animba.
         SetPVarInt(npc, \"death\", 1); //Állítsuk be a death nevû változó értékét 1-re az npc-n.
      }
      if(PRESSED(KEY_HANDBRAKE && IsPlayerInAnyVehicle(playerid) == 0)) //Amikor céloz. Azét kell az IsPlayerInAnyVehicle, mivel a SAMP rendszerében egy gombnak veszi a kéziféket és a célzást.
      {
         //Tehát amikor a játékos nyomja a célzás gombot és nincs jármûben 
         ApplyAnimation(npc,\"ped\",\"handsup\",3.0,0,0,0,1,0);//Rakja fel a kezét az NPC.
      }
      else
      {
         //Ha nem céloz a játékos
         if(GetPVarInt(npc, \"death\") == 0)//Ha nem halott az NPC
         {
            ClearAnimations(npc);//Akkor rakja le a kezét. (Vagyis ne legyen rajta anim.)
         }
      }
   }
   return 1;
}

 
Ugye nem is volt olyan nehéz?  ;)
Ha bármi hibát találnál benne, válaszban írd meg, köszönöm!
Eredeti:http://forum.sa-mp.com/showthread.php?t=176153 Fordította, Átalakította: vortexY
« Utoljára szerkesztve: 2013. szeptember 27. - 14:44:49 írta Benceee »

Megijedõ NPC
« Válasz #1 Dátum: 2013. szeptember 25. - 21:32:49 »
0 Show voters
http://forum.sa-mp.com/showthread.php?t=176153
Grat, legalább írnád ki a forrást és azt, hogy ez egy fordítás...  :facepalm:
Ne nézz már minket madárnak!

Megijedõ NPC
« Válasz #2 Dátum: 2013. szeptember 25. - 21:51:29 »
0 Show voters
Idézetet írta: kadaradam date=1380137569\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"43103\" data-ipsquote-contentclass=\"forums_Topic
http://forum.sa-mp.com/showthread.php?t=176153
Grat, legalább írnád ki a forrást és azt, hogy ez egy fordítás...  :facepalm:
Ne nézz már minket madárnak!
 
Nem néztelek madárnak.. csupán elfelejtettem odaírni. Tévedtem BEVALLOM. Mindenki hibázhat, felejthet..
Ja és amúgymeg csomó minden más rajta és csomó minden javítva van...
Nam indegy azért köszi hogy ezsembe juttattad...

Nem elérhető ZyZu.

  • Globális moderátor
  • 8939
  • my turbo diesel forum
  • Discord: ZyZu.
    • Profil megtekintése
Megijedõ NPC
« Válasz #3 Dátum: 2013. szeptember 25. - 21:54:50 »
0 Show voters
\"Üdv mindenki. Ebben a tutorialban egy \"Megijedõ NPC\"-t készítek, ami reagál a fegyverekre :) \"
Ez azt magyarázza, hogy TE írtad és készítetted.

Megijedõ NPC
« Válasz #4 Dátum: 2013. szeptember 25. - 22:12:39 »
0 Show voters
Idézetet írta: ZyZu date=1380138890\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"43103\" data-ipsquote-contentclass=\"forums_Topic
\"Üdv mindenki. Ebben a tutorialban egy \"Megijedõ NPC\"-t készítek, ami reagál a fegyverekre :) \"
Ez azt magyarázza, hogy TE írtad és készítetted.
 
Légyszi ne köss már bele... amúgy is az \"Eredeti\" ÖTLETADÓ volt csak... Mondtam sokat átalakítottam rajta. Nem értem mi bajod van velem, de már tényleg megnyugodhatnál... Mindenbe bele kell kötnöd?

Megijedõ NPC
« Válasz #5 Dátum: 2013. szeptember 25. - 22:37:00 »
0 Show voters
[admin]A jövõben tüntesd fel a felhasznált forrásokat. [/admin]

Megijedõ NPC
« Válasz #6 Dátum: 2013. szeptember 25. - 23:30:35 »
0 Show voters
Idézetet írta: vortexY date=1380139959\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"43103\" data-ipsquote-contentclass=\"forums_Topic


\"Üdv mindenki. Ebben a tutorialban egy \"Megijedõ NPC\"-t készítek, ami reagál a fegyverekre :) \"
Ez azt magyarázza, hogy TE írtad és készítetted.
 
Légyszi ne köss már bele... amúgy is az \"Eredeti\" ÖTLETADÓ volt csak... Mondtam sokat átalakítottam rajta. Nem értem mi bajod van velem, de már tényleg megnyugodhatnál... Mindenbe bele kell kötnöd?
 
[/quote]
Én semmi átalakítást nem találtam benne a //... eken kívül, de lehet hogy az én szemem a rossz  ::|

Megijedõ NPC
« Válasz #7 Dátum: 2013. szeptember 26. - 18:54:02 »
0 Show voters
Idézetet írta: .Adamcha. date=1380144635\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"43103\" data-ipsquote-contentclass=\"forums_Topic


 

\"Üdv mindenki. Ebben a tutorialban egy \"Megijedõ NPC\"-t készítek, ami reagál a fegyverekre :) \"
Ez azt magyarázza, hogy TE írtad és készítetted.
 
Légyszi ne köss már bele... amúgy is az \"Eredeti\" ÖTLETADÓ volt csak... Mondtam sokat átalakítottam rajta. Nem értem mi bajod van velem, de már tényleg megnyugodhatnál... Mindenbe bele kell kötnöd?
 
[/quote]
Én semmi átalakítást nem találtam benne a //... eken kívül, de lehet hogy az én szemem a rossz  ::|
 
[/quote]
Hát Pedig van benne... Pélául mivel nem jól mûködött a célzás detektálás azt javítottam... De látom a közösség nagy része csak kötözködni tud, tisztelet a kivételnek
« Utoljára szerkesztve: 2013. szeptember 26. - 20:33:18 írta vortexY »

Megijedõ NPC
« Válasz #8 Dátum: 2013. szeptember 26. - 20:23:10 »
+1 Show voters
Köszönjük a tutorialt, felhasználom :)

Megijedõ NPC
« Válasz #9 Dátum: 2013. szeptember 26. - 20:34:37 »
0 Show voters
Idézetet írta: Lester date=1380219790\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"43103\" data-ipsquote-contentclass=\"forums_Topic
Köszönjük a tutorialt, felhasználom :)
 
Nincsmit  :) Legalább te értékeled a másik munkát. Ez a tudat tart \"életben\", hogy vannak normális emberek, akik nem belekötnek, hanem használják, mégegyszer köszi :)

Nem elérhető Gh0st

  • 917
    • Profil megtekintése
Megijedõ NPC
« Válasz #10 Dátum: 2013. szeptember 26. - 21:15:06 »
+1 Show voters
Attól,hogy a HIV. fórumról származik az eredetije,hasznos útmutató. :)

Megijedõ NPC
« Válasz #11 Dátum: 2013. szeptember 26. - 21:16:30 »
0 Show voters
Idézetet írta: J.Carter date=1380222906\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"43103\" data-ipsquote-contentclass=\"forums_Topic
Attól,hogy a HIV. fórumról származik az eredetije,hasznos útmutató. :)
 
Köszönöm  :)

Nem elérhető Shady

  • 313
    • Profil megtekintése
Megijedõ NPC
« Válasz #12 Dátum: 2013. szeptember 27. - 23:01:32 »
0 Show voters
én azt se tudtam hogy lehet ilyet :D Kösz a magyarosítást. :)

Megijedõ NPC
« Válasz #13 Dátum: 2013. szeptember 29. - 14:57:46 »
0 Show voters
Ez jó hogy áthoztad de még jobb lenne ha magad írtál volna egyet nekünk :)
Ám kereshetnél olyat is hogyha rácélzol akkor elszalad :D az érdekes lenne :)
Üdv ClimaCool

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal