GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: folnoraa - 2016. December 11. - 23:28:53

Cím: Spec hiba!
Írta: folnoraa - 2016. December 11. - 23:28:53
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!
Cím: Spec hiba!
Írta: AweFM - 2016. December 11. - 23:32:31
Segítsetek testvéremnek pls
Cím: Spec hiba!
Írta: HungaryUndead - 2016. December 11. - 23:42:48
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!)
Cím: Spec hiba!
Írta: folnoraa - 2016. December 11. - 23:55:21
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)
Cím: Spec hiba!
Írta: AweFM - 2016. December 12. - 16:13:29
Várjuk továbbra is a segítségeket :)
Cím: Spec hiba!
Írta: folnoraa - 2016. December 12. - 20:58:17
Valaki segítene? :D
Cím: Spec hiba!
Írta: divkn - 2016. December 13. - 14:12:51

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.
Cím: Spec hiba!
Írta: folnoraa - 2016. December 18. - 00:11:32
Ez megy, viszont, hogy lehetne úgy megoldani, hogy ne a gyilkosra menjen át a \"spec\", hanem amikor lespawnolt a halott ,akkor rá?
Cím: Spec hiba!
Írta: divkn - 2016. December 18. - 20:26:33
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;
}

 
 
Cím: Spec hiba!
Írta: folnoraa - 2016. December 19. - 18:58:50
Hát.. Ez se sokkal jobb. Csináltam egy videót, hogy mit csinál most a spec!
 


   

 
 
Cím: Spec hiba!
Írta: AweFM - 2016. December 23. - 18:15:14
Valaki a videó alapján tudna segíteni?
Cím: Spec hiba!
Írta: .::David::. - 2016. December 23. - 19:58:58
Küld át skypen az egészet és majd átnézem 
Cím: Spec hiba!
Írta: folnoraa - 2016. December 25. - 10:20:55
David megoldotta a problémát! Köszönöm David, és azoknak is, akik próbáltak segíteni! :)