Szerző Téma: Ha más valaki van a közeledben...  (Megtekintve 1836 alkalommal)

Nem elérhető Flash

  • 5726
  • (っ◕‿◕)っ
    • Profil megtekintése
Ha más valaki van a közeledben...
« Dátum: 2011. április 04. - 14:50:24 »
0 Show voters
Csõ all!
Én egy versenyzõs rendõrös szervert fogok csinálni, és azt nem tudom megcsinálni hogy amikor a rendõr a versenyzõ közelében van akkor nem használhat semmilyen parancsot és ha használ akkor ezt írja ki:
Nem használhatsz parancsokat addig amíg üldöznek a rendõrök!
Elõre is köszi ;)

Nem elérhető kurta999

  • 2759
  • Éllő fédisznó
    • Profil megtekintése
Ha más valaki van a közeledben...
« Válasz #1 Dátum: 2011. április 04. - 15:04:28 »
0 Show voters
Ezzel tudod ellenõrizni, hogy van-e a megadott játékos közeléebn valaki.
 

stock IsPlayerInRangeOfPlayer(playerid, targetid, Float:radi = 5.0)
{
    if(IsPlayerConnected(playerid) && IsPlayerConnected(targetid))
{
new Float: posx,
   Float: posy,
   Float: posz;
new Float: oldposx,
   Float: oldposy,
   Float: oldposz;
new Float: tempposx,
   Float: tempposy,
   Float: tempposz;
GetPlayerPos(playerid, oldposx, oldposy, oldposz);
GetPlayerPos(targetid, posx, posy, posz);
tempposx = (oldposx -posx);
tempposy = (oldposy -posy);
tempposz = (oldposz -posz);
if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
{
   return 1;
}
}
return 0;
}

 
http://forum.sa-mp.com/showthread.php?t=92679&highlight=foreach
foreach
 
if(!strcmp(cmdtext, \"/mycmd\"))
{
new
bool:IsTrue;
foreach(Player, i)
{
if(IsPlayerInRangeOfPlayer(playerid, i)
{
   IsTrue = true;
   break;
}
}
if(IsTrue)
{
Közelibe van
}
else
{
Nincs
}
}
« Utoljára szerkesztve: 2011. április 04. - 15:11:23 írta kurta999 »

Nem elérhető Flash

  • 5726
  • (っ◕‿◕)っ
    • Profil megtekintése
Ha más valaki van a közeledben...
« Válasz #2 Dátum: 2011. április 04. - 15:10:44 »
0 Show voters
kösz, és ezt hogy oldjam meg?

Nem elérhető Flash

  • 5726
  • (っ◕‿◕)っ
    • Profil megtekintése
Ha más valaki van a közeledben...
« Válasz #3 Dátum: 2011. április 04. - 15:24:08 »
0 Show voters
E:\\[HUNDriftstuntWorld [0.3c]\\gamemodes\\DriftstuntWorld.pwn(4785) : error 001: expected token: \")\", but found \"{\"
Pawn compiler 3.2.3664           Copyright (c) 1997-2006, ITB CompuPhase
 
1 Error.

 
1 error

Nem elérhető kurta999

  • 2759
  • Éllő fédisznó
    • Profil megtekintése
Ha más valaki van a közeledben...
« Válasz #4 Dátum: 2011. április 04. - 15:33:49 »
0 Show voters
Keresd meg és javítsd ki.

Ha más valaki van a közeledben...
« Válasz #5 Dátum: 2011. április 04. - 18:16:13 »
0 Show voters
Nem tudom,hogy oldodtad meg a csapatokat,én most ezt gTeam-el teszem.
Kurta a tied több szempontból is hibás.
 
if(!strcmp(cmdtext, \"/mycmd\"))
{
new
bool:IsTrue;
foreach(Player, i)
{
if(IsPlayerInRangeOfPlayer(playerid, i) && gTeam[playerid] == TEAM_ZSARU)
{
   IsTrue = true;
   break;
}
}
if(IsTrue)
{
Közelibe van
}
else
{
Nincs
}
}

 
Vagy,ha semmilyen parancsot ne tudjon használni:
 

public OnPlayerCommandText(playerid, cmdtext[])
{
foreach(Player, i)
{
if(IsPlayerInRangeOfPlayer(playerid, i) && gTeam[playerid] == TEAM_ZSARU)
                     return SendClientMessage(playerid, 0xFFFFFFFF, \"Nem használhatsz parancsot rendõr közelében.\");
}
    //Inentõl jönnek a parancsaid,ez a help csak egy példa,vedd ki
    if(!strcmp(cmdtext, \"/help\", true))
    {
        SendClientMessage(playerid, 0xFFFFFFFF, \"blabla\");
        return 1;
    }
    return 0;
}

Nem elérhető Flash

  • 5726
  • (っ◕‿◕)っ
    • Profil megtekintése
Ha más valaki van a közeledben...
« Válasz #6 Dátum: 2011. április 05. - 06:33:14 »
0 Show voters
Ezt raktam be:
 
public OnPlayerCommandText(playerid, cmdtext[])
{
   foreach(Player, i)
   {
      if(IsPlayerInRangeOfPlayer(playerid, i) && gTeam[playerid] == TEAM_ZSARU)
                     return SendClientMessage(playerid, 0xFFFFFFFF, \"Nem használhatsz parancsot rendõr közelében.\");
   }
    //Inentõl jönnek a parancsaid,ez a help csak egy példa,vedd ki
    if(!strcmp(cmdtext, \"/help\", true))
    {
        SendClientMessage(playerid, 0xFFFFFFFF, \"blabla\");
        return 1;
    }
    return 0;
}

 
1 error van benne:
 
C:\\Documents and Settings\\Rendszergazda\\Asztal\\RaC\\gamemodes\\RaC.pwn(251) : error 017: undefined symbol \"IsPlayerInRangeOfPlayer\"
Pawn compiler 3.2.3664           Copyright (c) 1997-2006, ITB CompuPhase
 
1 Error.

 
Mi lehet a hiba?

Ha más valaki van a közeledben...
« Válasz #7 Dátum: 2011. április 05. - 09:38:56 »
0 Show voters
error 017: undefined symbol \"IsPlayerInRangeOfPlayer\"

 
Azt jelenti, hogy az  \"IsPlayerInRangeOfPlayer\" Nincs definiálva.
Menj a mod elejére, és csinálj egy new-t.

Nem elérhető DrAkE

  • 2078
    • Profil megtekintése
Ha más valaki van a közeledben...
« Válasz #8 Dátum: 2011. április 05. - 10:07:55 »
0 Show voters
Idézetet írta: mauladam date=1301989136\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"7300\" data-ipsquote-contentclass=\"forums_Topic

error 017: undefined symbol \"IsPlayerInRangeOfPlayer\"

 
Azt jelenti, hogy az  \"IsPlayerInRangeOfPlayer\" Nincs definiálva.
Menj a mod elejére, és csinálj egy new-t.
 
Ha nem értesz a scripteléshez hülyeségeket ne írj :)
Ezt rakd be a módodba vhova:
 
stock IsPlayerInRangeOfPlayer(playerid, targetid, Float:radi = 5.0)
{
    if(IsPlayerConnected(playerid) && IsPlayerConnected(targetid))
   {
      new Float: posx,
         Float: posy,
         Float: posz;
      new Float: oldposx,
         Float: oldposy,
         Float: oldposz;
      new Float: tempposx,
         Float: tempposy,
         Float: tempposz;
      GetPlayerPos(playerid, oldposx, oldposy, oldposz);
      GetPlayerPos(targetid, posx, posy, posz);
      tempposx = (oldposx -posx);
      tempposy = (oldposy -posy);
      tempposz = (oldposz -posz);
      if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
      {
         return 1;
      }
   }
   return 0;
}
« Utoljára szerkesztve: 2011. április 05. - 10:09:41 írta DrAkE »

Ha más valaki van a közeledben...
« Válasz #9 Dátum: 2011. április 05. - 16:47:12 »
0 Show voters
Kritika megengedett.  :amazed:
Látom születnek az átgondolatlan kódok.
 

   foreach(Player, i)
   {
      if(IsPlayerInRangeOfPlayer(playerid, i) && gTeam[playerid] == TEAM_ZSARU)
                     return SendClientMessage(playerid, 0xFFFFFFFF, \"Nem használhatsz parancsot rendõr közelében.\");
   }

 
Átfutási folyamat:
for ciklus a szerveren lévõ online playerid értékekkel.
 

foreach(Player, i)

 
Én kis naiv játékos beírok egy parancsot, most rendõr team tagjaként.
Hah.
Leellenõrzõm hogy más játékos közelében vagyok-e, sõt még azt is hogy saját magamhoz képest is.
 

if(IsPlayerInRangeOfPlayer(playerid, i)

 
Na igen elég közel vagyok saját magamhoz.
Akkor megnézem rendõr vagyok-e?
 

gTeam[playerid] == TEAM_ZSARU

 
Teszem mind ezt rendõrként aztán erre az jön ki, elég közel vagyok magamhoz sõt rendõr team tagja is vagyok és erre kapom ezt az üzenetet:
 
Nem használhatsz parancsot rendõr közelében.[/quote]
Írtam egy változatot tesztelni nem teszteltem, ha nem jól mûködik jelezd javítani fogom.
Mivel én se tudom milyen változót használsz ezért én is gTeam[MAX_PLAYERS] deklarációval írtam meg.
 

stock
kozelembenvanerendor(const playerid, Float:korsugar = 6.0)
{
new
Float:px,
Float:py,
Float:pz;
GetPlayerPos(playerid, px, py, pz); // Játékos pozició lekérdezés
foreach(Player, i)
{
if(i == playerid) continue;
if(gTeam == TEAM_RENDOR) // Az online játékosok közül megkeressük a rendõr teamhez tartozókat
{
   if(IsPlayerInRangeOfPoint(i, korsugar, px, py, pz)) // a versenyzõ koordináta pontjához képest (adott gömb alakú tér melynek radiusza a korsugar deklaráció) tartózkódik-e rendõr játékos
   {
      return true; // Oh igen van egy a közeledben
   }
}
}
return false;
}
COMMAND:mycmd(playerid, params[])
{
if(gTeam[playerid] == TEAM_RENDOR) return SendClientMessage(playerid, -1, \"Rendõr vagy.\");
if(kozelembenvanerendor(playerid)) return SendClientMessage(playerid, -1, \"Van rendõr a közeledben\");
//   használni kívánt parancs többi kódja..
return 1;
}
« Utoljára szerkesztve: 2011. április 05. - 17:29:55 írta Zsolesszka »

Nem elérhető Flash

  • 5726
  • (っ◕‿◕)っ
    • Profil megtekintése
Ha más valaki van a közeledben...
« Válasz #10 Dátum: 2011. április 06. - 07:20:22 »
0 Show voters
kösz mindenkinek. Tökéletesen mûködik!:D
Témát zárom.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal