Jump to content
  • 0

pomoc Prohledávání objektu


GT222

Dotaz

Popis problému:

Ahoj, v map editoru jsem vytvořil objekty mrtvol je jich hodně a potřeboval bych jestli by šlo udělat že když hráč stojí u toho objektu mrtvoly a napíše /search tak to tu mrtvolu prohledá ale aby pak už prohledat nešla.

 

Tím mám na mysli že hráč může prohledat mrtvolu ale když ji prohledá tak pak už znovu nemůže , může jen tu další nikoli tu kterou už prohledával.

 

Zkoušel všem všelijak přes GetPlayerPos , GetObjectPos , IsPlayerInRangeOfPoint .. nefungovalo .. objectu pro mrtvol mam pres 1 000.

 

Předem díky.

 

Chyby/varování kompilátoru a při běhu:

--

 

Kód:

 

--

 

 

 

Dodatečné poznámky:

--

Link to comment
Share on other sites

11 odpovědí na tuto otázku

Recommended Posts

  • 0

prikaz /prohledat

{

  cyklus for

  {

      podmienka IsPlayerInRangeOfPoint // getObjectPos

      {

          podmienka !IsDeadBodySearched

          {

               SearchDeadBody

          } else "Telo už bolo prehladané"

          break;

      }

  }

  return true;

}

Link to comment
Share on other sites

  • 0

Použil jsem toto

 

new mrtt

 

stock Deadd(playerid, Float:range = 7.0)
{
    new Float:x, Float:y, Float:z;
    GetDynamicObjectPos(mrtt, x, y, z);
    if(IsPlayerInRangeOfPoint(playerid, range, x, y ,z)) return 1;
    return 0;
}

 

/prikaz

if(Deadd(playerid, 2.0)){
SendClientMessage(playerid, -1, "Test fungovani");
 }

 

pak

mrtt = createdynamicobject ()

mrtt = createdynamicobject ()

mrtt = createdynamicobject ()

nekolikrat ...

 

a nejde :/

Edited by GT222
Link to comment
Share on other sites

  • 0

stock Deadd(playerid, Float:range = 7.0)
{
    new Float:x, Float:y, Float:z;
    GetDynamicObjectPos(mrtt, x, y, z);
    if(IsPlayerInRangeOfPoint(playerid, range, x, y ,z)) return 1;
    return 0;
}

 

/prikaz

if(Deadd(playerid, 2.0) == 1){
SendClientMessage(playerid, -1, "Test fungovani");
 }

Skus to takto

Link to comment
Share on other sites

  • 0

Arci ti sem dal uplne stejny kod, lol :d

 

Problem je v tom, ze kontrolujes vzdalenost pouze od objektu, ktery jsi vytvoril jako posledni. Ne od vsech.

  • Líbí se mi to! (+1) 1
Link to comment
Share on other sites

  • 0

Pokuď se nepletu tak v kódu co sem dal on je to takto:

stock Deadd(playerid, Float:range = 7.0)
{
    new Float:x, Float:y, Float:z;
    GetDynamicObjectPos(mrtt, x, y, z);
    if(IsPlayerInRangeOfPoint(playerid, range, x, y ,z)) return 1;
    return 0;
}
 
/prikaz
if(Deadd(playerid, 2.0)){ // On zde podmínku na hodnotu 1. nemá
SendClientMessage(playerid, -1, "Test fungovani");
 }
Skus to takto

Jenže já to dávám takto:

stock Deadd(playerid, Float:range = 7.0)
{
    new Float:x, Float:y, Float:z;
    GetDynamicObjectPos(mrtt, x, y, z);
    if(IsPlayerInRangeOfPoint(playerid, range, x, y ,z)) return 1;
    return 0;
}
 
/prikaz
if(Deadd(playerid, 2.0) == 1){ // Zde jelikož v stocku dává return 1 a IF -> porovnání tak pokuď tedy return v stocku vrátí 1 tak se to vykoná.
SendClientMessage(playerid, -1, "Test fungovani");
 }

Link to comment
Share on other sites

  • 0

a bude to fugovat kdyz pouzivam

 

new mrtt

 

a pak 100x mrtt = createdynamicobject?

 

a taky že když to prohledá tak aby uz to neprohledaval znovu , ale take aby šly prohledávat zase ostatní objecty , tim mam na mysli že když prohledá jeden object tak už ho prohledat nemůže a může prohledat další .. icon_e_smile.gif

 

taky by mi to ušetrilo kdyby stačilo použít GetDynamicObjectPos(ID, x, y, z); misto mrtt ID objectu , stejně to chci použít aby šli prohledávat všecky tyto určené objecty s daným ID

Edited by GT222
Link to comment
Share on other sites

  • 0

arci.. jako promin ale nerad když neznáš základy programovaní... 

 

if(Deadd(...)) má stejný vliv jako if(Deadd(...) == 1) 

Edited by Steam wallet
Link to comment
Share on other sites

  • 0

Arci, tvuj a jeho kod je identicky.

 

GT222 uz jednou jsem ti psal, ze ti to fungovat nebude. Kazdy objekt ma sve unikatni id, ktere ukladas do jedne promenne, tzn. mas pouze id jednoho vytvoreneho objektu, u ktereho kontrolujes, jestli je hrac v jeho blizkosti.

  • Líbí se mi to! (+1) 1
Link to comment
Share on other sites

  • 0

Arci, tvuj a jeho kod je identicky.

 

GT222 uz jednou jsem ti psal, ze ti to fungovat nebude. Kazdy objekt ma sve unikatni id, ktere ukladas do jedne promenne, tzn. mas pouze id jednoho vytvoreneho objektu, u ktereho kontrolujes, jestli je hrac v jeho blizkosti.

Máš pravdu, ale podám mu to tak aby tomu rozumel...

 

Musíš si vytvoriť premennú s polom...

tj:

 

new mrtt[1000]; // 1000 - počet mrtvol

//a premennú na kontrolu či už bola mrtvola prehladaná

new bool:isSearched[1000];

 

potom si vytváraj mrtvoly

 

mrtt[0] = Create.... ;// začínaš číslom 0 a končíš 999 (tj 1000-1)

 

snáď som ti trochu pomohol

Link to comment
Share on other sites

  • 0

Dobrá, děkuji vám za pomoc :)

Jen se chci zeptat nevíte o nějakém programu který by mi ty čísla dal automaticky od 0 do 999? Psát takovou hromadu čísel to je na cely den , děkuji

Link to comment
Share on other sites

  • 0

Dobrá, děkuji vám za pomoc icon_e_smile.gif

Jen se chci zeptat nevíte o nějakém programu který by mi ty čísla dal automaticky od 0 do 999? Psát takovou hromadu čísel to je na cely den , děkuji

Pokud jich tam máš hodně, udělej si CreateObjectEx kde budeš rovnou zapisovat do proměnné ten objekt. :)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...