Szerző Téma: Spec hiba!  (Megtekintve 1641 alkalommal)

Spec hiba!
« Dátum: 2016. December 11. - 23:28:53 »
+1
Sziasztok! Van egy spec parancsom, és annyi a problémám vele, hogy miután meghal a játékos akit specelek, nem specel tovább senkit.
OnPlayerSpawn alatti rész:
 
 

if(PlayerInfo[playerid][pSpec] == 1)
{
    for(new x = 0; x < MAX_PLAYERS; x++)
    {
    TogglePlayerSpectating(x, true);
    PlayerSpectatePlayer(x, true);
    }
}

 
Spec, illetve a Specoff:
 
 

CMD:spec(playerid, params[]) {
    if(gTeam[playerid] == FIRST_TEAM & SECOND_TEAM)
   return MSG(playerid, COLOR_RED, \"Hiba: Nem használhatod ezt a parancsot, mivel részt veszel a warban!\");
   
if(sscanf(params,\"u\", id))
   return MSG(playerid, -1, \"Használat: /spec <JátékosNév/ID>\");
if(id == INVALID_PLAYER_ID)
   return MSG(playerid, COLOR_RED, \"Hiba: Nincs ilyen játékos!\");
   
if(id == playerid)
    return MSG(playerid, COLOR_RED, \"Hiba: Magadat nem specelheted!\");
    PlayerInfo[playerid][pSpecID] = id;
TogglePlayerSpectating(playerid, true);
    PlayerSpectatePlayer(playerid, id);
SetPlayerInterior(playerid, GetPlayerInterior( id ));
    SetPlayerVirtualWorld(playerid, GetPlayerVirtualWorld( id ));
    
    PlayerInfo[playerid][pSpec] = 1;
    
    return ( 1 );
}
CMD:specoff( playerid ) {
    if(gTeam[playerid] != SPEC_TEAM)
   return MSG(playerid, COLOR_RED, \"Hiba: Nem használhatod ezt a parancsot, mivel részt veszel a warban!\");
    if(gTeam[playerid] == SPEC_TEAM && ServerInfo[AutoSpec] == true)
   return MSG(playerid, COLOR_RED, \"Hiba: Nem használhatod ezt a parancsot, mivel az autospec be van kapcsolva.\");
    TogglePlayerSpectating(playerid, false);
PlayerInfo[playerid][pSpecID] = INVALID_PLAYER_ID;
SetPlayerInterior(playerid, 0);
    SetPlayerVirtualWorld(playerid, 0);
    PlayerInfo[playerid][pSpec] = 0;
SpawnPlayer( playerid );
return ( 1 );
}

 
Valaki tudna segíteni? Előre is köszönöm szépen!

Nem elérhető AweFM

  • 205
    • Profil megtekintése
Spec hiba!
« Válasz #1 Dátum: 2016. December 11. - 23:32:31 »
+1
Segítsetek testvéremnek pls

Spec hiba!
« Válasz #2 Dátum: 2016. December 11. - 23:42:48 »
+2
Szia.
 
Szerintem hatékonyabb, ha annak a játékosnak állítod a specid változóját, akit figyel a játékos, tehát:
 

PlayerInfo[id][pSpecID] = playerid;

 
 
 
Majd OnPlayerSpawnnál:
 

if(PlayerInfo[playerid][pSpecID] != INVALID_PLAYER_ID)
{
TogglePlayerSpectating(PlayerInfo[playerid][pSpecID],true);
PlayerSpectatePlayer(PlayerInfo[playerid][pSpecID],playerid,SPECTATE_MODE_NORMAL);
}

 
 
 
Illetve specoff parancshoz írj egy ilyet:
 

for(new i = 0; i < MAX_PLAYERS; i++)
{
if(PlayerInfo[pSpecID] == playerid)
    {
       PlayerInfo[pSpecID] = INVALID_PLAYER_ID;
    }
}

 
 
 
(Nem teszteltem, de elvileg jónak kell lennie. Ha nem értesz valamit, szólj!)

Spec hiba!
« Válasz #3 Dátum: 2016. December 11. - 23:55:21 »
0
Nem jó! Lespawnol, kb 1 mp-ig speceli, de lehet, még annyi se, és utána betesz oda, ahol ilyen madarak röpködnek. (mint maikor connectelsz a szeróra)

Nem elérhető AweFM

  • 205
    • Profil megtekintése
Spec hiba!
« Válasz #4 Dátum: 2016. December 12. - 16:13:29 »
+1
Várjuk továbbra is a segítségeket :)

Spec hiba!
« Válasz #5 Dátum: 2016. December 12. - 20:58:17 »
0
Valaki segítene? :D

Nem elérhető divkn

  • 3259
    • Profil megtekintése
Spec hiba!
« Válasz #6 Dátum: 2016. December 13. - 14:12:51 »
0

public OnPlayerDeath(playerid, killerid, reason)
{
new max = GetMaxPlayers();
for(new i; i < max; i++)
{
   // Ha valaki (i) követte a játékost (playerid)
   if(PlayerInfo[pSpecID] == playerid)
   {
      // Ha tudjuk ki ölte meg a játékost, akkor...
      if(killerid  != INVALID_PLAYER_ID)
      {
         // a valaki (i) kövesse a a gyilkosát. (killerid)
         SetPlayerInterior(i, GetPlayerInterior( killerid ));
         SetPlayerVirtualWorld(i, GetPlayerVirtualWorld( killerid ));

         PlayerSpectatePlayer(i, killerid);
      }
      else
      {
         // a valaki (i) kövessen valaki mást, ha ismeretlen a gyilkos.
         
         // Ezt rátok bízom.
      }
   }
}
return;
}

 
 
 
Az OnPlayerSpawn-ban lévő Spectate funkciót pedig töröld, mert egyrészt ha te követsz bárkit is, akkor minden játékost spectate módra vált és követni fogja a true, vagyis az 1-es számú játékost, persze ha létezik, másrészt pedig spectate módban nem tudsz spawnolni, de miután abbahagyod, a TogglePlayerSpectate funkció automatikusan végrehajtja az OnPlayerSpawn részt és a pSpec változó értéke úgy is 0 lesz.
« Utoljára szerkesztve: 2016. December 13. - 14:23:32 írta divkn »

Spec hiba!
« Válasz #7 Dátum: 2016. December 18. - 00:11:32 »
0
Ez megy, viszont, hogy lehetne úgy megoldani, hogy ne a gyilkosra menjen át a \"spec\", hanem amikor lespawnolt a halott ,akkor rá?

Nem elérhető divkn

  • 3259
    • Profil megtekintése
Spec hiba!
« Válasz #8 Dátum: 2016. December 18. - 20:26:33 »
0
Akkor ugyan az a kód, annyi különbséggel hogy OnPlayerSpawn alatt legyen és a killerid részeket átírni playerid-re.
 

public OnPlayerSpawn(playerid)
{
new max = GetMaxPlayers();
for(new i; i < max; i++)
{
   if(IsPlayerConnected(i) && PlayerInfo[i][pSpecID] == playerid)
   {
      SetPlayerInterior(i, GetPlayerInterior( playerid ));
      SetPlayerVirtualWorld(i, GetPlayerVirtualWorld( playerid ));

      PlayerSpectatePlayer(i, playerid);
   }
}
return 1;
}

 
 

Spec hiba!
« Válasz #9 Dátum: 2016. December 19. - 18:58:50 »
0
Hát.. Ez se sokkal jobb. Csináltam egy videót, hogy mit csinál most a spec!
 


   

 
 
« Utoljára szerkesztve: 2016. December 19. - 18:59:22 írta folnoraa »

Nem elérhető AweFM

  • 205
    • Profil megtekintése
Spec hiba!
« Válasz #10 Dátum: 2016. December 23. - 18:15:14 »
0
Valaki a videó alapján tudna segíteni?

Spec hiba!
« Válasz #11 Dátum: 2016. December 23. - 19:58:58 »
+1
Küld át skypen az egészet és majd átnézem 

Spec hiba!
« Válasz #12 Dátum: 2016. December 25. - 10:20:55 »
0
David megoldotta a problémát! Köszönöm David, és azoknak is, akik próbáltak segíteni! :)

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal