SA-MP Forums

SA-MP Forums (https://forum.sa-mp.com/index.php)
-   Español/Spanish (https://forum.sa-mp.com/forumdisplay.php?f=29)
-   -   [Ayuda] Porque sucede esto (https://forum.sa-mp.com/showthread.php?t=620936)

SilverGamingYT 05/11/2016 12:46 AM

[Ayuda] Porque sucede esto
 
Hola, hoy les queria decir si porfavor alguien me ayuda a solucionar esto. El problema es que yo quiero realizar un sistema de muerte estilo GTA V, lo que hice fue unos texdraws, pero quiero saber como hago para que al morir les salga el texdraw y el nombre del jugador que los asesino, gracias!

Aqui el codigo:

Code:

#include <a_samp>
#if defined FILTERSCRIPT

//news
new muerte
new Text:TDEditor_PTD[MAX_PLAYERS][3];
//
public OnFilterScriptInit()
{
        print("\n--------------------------------------");
        print(" Blank Filterscript by your name here");
        print("--------------------------------------\n");
        return 1;
}

public OnFilterScriptExit()
{
        return 1;
}

#else

main()
{
        print("\n----------------------------------");
        print(" Blank Gamemode by your name here");
        print("----------------------------------\n");
}

#endif

public OnGameModeInit()
{
        TDEditor_PTD[playerid][0] = CreatePlayerTextDraw(playerid, 405.500000, 186.266723, "TE_HA_MATADO");
        PlayerTextDrawLetterSize(playerid, TDEditor_PTD[playerid][0], 0.434400, 3.250136);
        PlayerTextDrawAlignment(playerid, TDEditor_PTD[playerid][0], 2);
        PlayerTextDrawColor(playerid, TDEditor_PTD[playerid][0], -1);
        PlayerTextDrawSetShadow(playerid, TDEditor_PTD[playerid][0], 1);
        PlayerTextDrawSetOutline(playerid, TDEditor_PTD[playerid][0], 0);
        PlayerTextDrawBackgroundColor(playerid, TDEditor_PTD[playerid][0], 255);
        PlayerTextDrawFont(playerid, TDEditor_PTD[playerid][0], 2);
        PlayerTextDrawSetProportional(playerid, TDEditor_PTD[playerid][0], 0);
        PlayerTextDrawSetShadow(playerid, TDEditor_PTD[playerid][0], 1);
        PlayerTextDrawSetSelectable(playerid, TDEditor_PTD[playerid][0], true);

        TDEditor_PTD[playerid][1] = CreatePlayerTextDraw(playerid, -10.799992, 134.000030, "box");
        PlayerTextDrawLetterSize(playerid, TDEditor_PTD[playerid][1], 0.000000, 16.159999);
        PlayerTextDrawTextSize(playerid, TDEditor_PTD[playerid][1], 640.000000, 0.000000);
        PlayerTextDrawAlignment(playerid, TDEditor_PTD[playerid][1], 1);
        PlayerTextDrawColor(playerid, TDEditor_PTD[playerid][1], -1523963137);
        PlayerTextDrawUseBox(playerid, TDEditor_PTD[playerid][1], 1);
        PlayerTextDrawBoxColor(playerid, TDEditor_PTD[playerid][1], 8388863);
        PlayerTextDrawSetShadow(playerid, TDEditor_PTD[playerid][1], 0);
        PlayerTextDrawSetOutline(playerid, TDEditor_PTD[playerid][1], 0);
        PlayerTextDrawBackgroundColor(playerid, TDEditor_PTD[playerid][1], 41215);
        PlayerTextDrawFont(playerid, TDEditor_PTD[playerid][1], 2);
        PlayerTextDrawSetProportional(playerid, TDEditor_PTD[playerid][1], 1);
        PlayerTextDrawSetShadow(playerid, TDEditor_PTD[playerid][1], 0);

        TDEditor_PTD[playerid][2] = CreatePlayerTextDraw(playerid, -47.600006, 125.039985, "box");
        PlayerTextDrawLetterSize(playerid, TDEditor_PTD[playerid][2], 0.000000, 1.199998);
        PlayerTextDrawTextSize(playerid, TDEditor_PTD[playerid][2], 643.000000, 0.000000);
        PlayerTextDrawAlignment(playerid, TDEditor_PTD[playerid][2], 1);
        PlayerTextDrawColor(playerid, TDEditor_PTD[playerid][2], 65535);
        PlayerTextDrawUseBox(playerid, TDEditor_PTD[playerid][2], 1);
        PlayerTextDrawBoxColor(playerid, TDEditor_PTD[playerid][2], -1061109505);
        PlayerTextDrawSetShadow(playerid, TDEditor_PTD[playerid][2], 0);
        PlayerTextDrawSetOutline(playerid, TDEditor_PTD[playerid][2], 0);
        PlayerTextDrawBackgroundColor(playerid, TDEditor_PTD[playerid][2], 255);
        PlayerTextDrawFont(playerid, TDEditor_PTD[playerid][2], 1);
        PlayerTextDrawSetProportional(playerid, TDEditor_PTD[playerid][2], 1);
        PlayerTextDrawSetShadow(playerid, TDEditor_PTD[playerid][2], 0);
        return 1;
}

public OnGameModeExit()
{
        return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
        return 1;
}

public OnPlayerConnect(playerid)
{
        return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
        return 1;
}

public OnPlayerSpawn(playerid)
{
        return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
  new muerte[32];
  format(muerte, 32, "Haz sido asesinado por: %d", playerid);
  SendClientMessage(playerid, 0xFF0000AA, muerte);
  TextDrawShowForPlayer(playerid, TDEditor_PTD);
  return 1;
}

public OnVehicleSpawn(vehicleid)
{
        return 1;
}

public OnVehicleDeath(vehicleid, killerid)
{
        return 1;
}

public OnPlayerText(playerid, text[])
{
        return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
        return 1;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
        return 1;
}

public OnPlayerExitVehicle(playerid, vehicleid)
{
        return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
        return 1;
}

public OnPlayerEnterCheckpoint(playerid)
{
        return 1;
}

public OnPlayerLeaveCheckpoint(playerid)
{
        return 1;
}

public OnPlayerEnterRaceCheckpoint(playerid)
{
        return 1;
}

public OnPlayerLeaveRaceCheckpoint(playerid)
{
        return 1;
}

public OnRconCommand(cmd[])
{
        return 1;
}

public OnPlayerRequestSpawn(playerid)
{
        return 1;
}

public OnObjectMoved(objectid)
{
        return 1;
}

public OnPlayerObjectMoved(playerid, objectid)
{
        return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
        return 1;
}

public OnVehicleMod(playerid, vehicleid, componentid)
{
        return 1;
}

public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
        return 1;
}

public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
        return 1;
}

public OnPlayerSelectedMenuRow(playerid, row)
{
        return 1;
}

public OnPlayerExitedMenu(playerid)
{
        return 1;
}

public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
        return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
        return 1;
}

public OnRconLoginAttempt(ip[], password[], success)
{
        return 1;
}

public OnPlayerUpdate(playerid)
{
        return 1;
}

public OnPlayerStreamIn(playerid, forplayerid)
{
        return 1;
}

public OnPlayerStreamOut(playerid, forplayerid)
{
        return 1;
}

public OnVehicleStreamIn(vehicleid, forplayerid)
{
        return 1;
}

public OnVehicleStreamOut(vehicleid, forplayerid)
{
        return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
        return 1;
}

public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
        return 1;
}

!MUCHAS GRACIAS!

Ner0x96 05/11/2016 01:09 AM

Respuesta: [Ayuda] Porque sucede esto
 
Al final de tu FS utiliza:

PHP Code:

stock GetPName(playerid)
{
    new 
p_name[24];
    
GetPlayerName(playerid,p_name,24);
    return 
p_name;


Y cambia tu OnPlayerDeath, por éste:

PHP Code:

public OnPlayerDeath(playeridkilleridreason)
{
  new 
muerte[48];
  
format(muertesizeof(muerte), "Haz sido asesinado por: %s"GetPName(killerid));
  
SendClientMessage(playerid0xFF0000AAmuerte);
  
TextDrawShowForPlayer(playeridTDEditor_PTD);
  return 
1;



Swedky 05/11/2016 01:11 AM

Respuesta: [Ayuda] Porque sucede esto
 
Con la función GetPlayerName: finalmente quedaría así:

pawn Code:
public OnPlayerDeath(playerid, killerid, reason)
{
  new muerte[50], name[MAX_PLAYER_NAME]; // la variable "name" guardará el nombre del jugador que mató
    GetPlayerName(killerid, name, sizeof(name)); // Acá almacenamos el nombre del jugador que mató, tene en cuenta que usamos el valor "killerid" y no "playerid".
  format(muerte, sizeof(muerte), "Haz sido asesinado por: %s(%d)", name, playerid);
  SendClientMessage(playerid, 0xFF0000AA, muerte);
  TextDrawShowForPlayer(playerid, TDEditor_PTD);
  return 1;
}

Aumenté el tamaño de muerte así se podrá almacenar todo el texto :)

SilverGamingYT 05/11/2016 03:43 AM

Re: [Ayuda] Porque sucede esto
 
Pero tengo un problema, Enzo hice lo que dijiste pero me tira algunos errores :c

Code:

C:\Users\JONATAN\Desktop\diego\LatinGames RP 2.0\filterscripts\muerte.pwn(34) : error 017: undefined symbol "TDEditor_PTD"
C:\Users\JONATAN\Desktop\diego\LatinGames RP 2.0\filterscripts\muerte.pwn(34) : error 017: undefined symbol "playerid"
C:\Users\JONATAN\Desktop\diego\LatinGames RP 2.0\filterscripts\muerte.pwn(34) : error 029: invalid expression, assumed zero
C:\Users\JONATAN\Desktop\diego\LatinGames RP 2.0\filterscripts\muerte.pwn(34) : fatal error 107: too many error messages on one line

Compilation aborted.Pawn compiler 3.2.3664                          Copyright (c) 1997-2006, ITB CompuPhase


4 Errors.


Swedky 05/11/2016 05:17 AM

Respuesta: [Ayuda] Porque sucede esto
 
Esos problemas te aparecen porque:

1. Intentas crear los TDs en OnGameModeInit, lo tendrías que crear en OnPlayerConnect.
2. Creas la variable muerte 2 veces.
3. No le asignas un índice al array TDEditor_PTD cuando intentas mostrar el TD al jugador.
4. Los Player-TextDraws no son los mismos que los TextDraw normales y se utilizan diferentes funciones para manejarlos.

Acá esta arreglado:


Code:

#include <a_samp>


static PlayerText:TDEditor_PTD[MAX_PLAYERS][3]; // Se usa el tag "PlayerText:"


public OnPlayerConnect(playerid) // Es llamado cuando un jugador se conecta al servidor
{
        TDEditor_PTD[playerid][0] = CreatePlayerTextDraw(playerid, 405.500000, 186.266723, "TE HA MATADO");
        PlayerTextDrawLetterSize(playerid, TDEditor_PTD[playerid][0], 0.434400, 3.250136);
        PlayerTextDrawAlignment(playerid, TDEditor_PTD[playerid][0], 2);
        PlayerTextDrawColor(playerid, TDEditor_PTD[playerid][0], -1);
        PlayerTextDrawSetShadow(playerid, TDEditor_PTD[playerid][0], 1);
        PlayerTextDrawSetOutline(playerid, TDEditor_PTD[playerid][0], 0);
        PlayerTextDrawBackgroundColor(playerid, TDEditor_PTD[playerid][0], 255);
        PlayerTextDrawFont(playerid, TDEditor_PTD[playerid][0], 2);
        PlayerTextDrawSetProportional(playerid, TDEditor_PTD[playerid][0], 0);
        PlayerTextDrawSetShadow(playerid, TDEditor_PTD[playerid][0], 1);
        PlayerTextDrawSetSelectable(playerid, TDEditor_PTD[playerid][0], true);

        TDEditor_PTD[playerid][1] = CreatePlayerTextDraw(playerid, -10.799992, 134.000030, "_"); // Si lo dejamos en blanco, el cliente producirá un crash.
        PlayerTextDrawLetterSize(playerid, TDEditor_PTD[playerid][1], 0.000000, 16.159999);
        PlayerTextDrawTextSize(playerid, TDEditor_PTD[playerid][1], 640.000000, 0.000000);
        PlayerTextDrawAlignment(playerid, TDEditor_PTD[playerid][1], 1);
        PlayerTextDrawColor(playerid, TDEditor_PTD[playerid][1], -1523963137);
        PlayerTextDrawUseBox(playerid, TDEditor_PTD[playerid][1], 1);
        PlayerTextDrawBoxColor(playerid, TDEditor_PTD[playerid][1], 8388863);
        PlayerTextDrawSetShadow(playerid, TDEditor_PTD[playerid][1], 0);
        PlayerTextDrawSetOutline(playerid, TDEditor_PTD[playerid][1], 0);
        PlayerTextDrawBackgroundColor(playerid, TDEditor_PTD[playerid][1], 41215);
        PlayerTextDrawFont(playerid, TDEditor_PTD[playerid][1], 2);
        PlayerTextDrawSetProportional(playerid, TDEditor_PTD[playerid][1], 1);
        PlayerTextDrawSetShadow(playerid, TDEditor_PTD[playerid][1], 0);

        TDEditor_PTD[playerid][2] = CreatePlayerTextDraw(playerid, -47.600006, 125.039985, "_");
        PlayerTextDrawLetterSize(playerid, TDEditor_PTD[playerid][2], 0.000000, 1.199998);
        PlayerTextDrawTextSize(playerid, TDEditor_PTD[playerid][2], 643.000000, 0.000000);
        PlayerTextDrawAlignment(playerid, TDEditor_PTD[playerid][2], 1);
        PlayerTextDrawColor(playerid, TDEditor_PTD[playerid][2], 65535);
        PlayerTextDrawUseBox(playerid, TDEditor_PTD[playerid][2], 1);
        PlayerTextDrawBoxColor(playerid, TDEditor_PTD[playerid][2], -1061109505);
        PlayerTextDrawSetShadow(playerid, TDEditor_PTD[playerid][2], 0);
        PlayerTextDrawSetOutline(playerid, TDEditor_PTD[playerid][2], 0);
        PlayerTextDrawBackgroundColor(playerid, TDEditor_PTD[playerid][2], 255);
        PlayerTextDrawFont(playerid, TDEditor_PTD[playerid][2], 1);
        PlayerTextDrawSetProportional(playerid, TDEditor_PTD[playerid][2], 1);
        PlayerTextDrawSetShadow(playerid, TDEditor_PTD[playerid][2], 0);
        return 1;
}


public OnPlayerSpawn(playerid)
{
        return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
          new muerte[50], name[MAX_PLAYER_NAME]; // la variable "name" guardará el nombre del jugador que mató
        GetPlayerName(killerid, name, sizeof(name)); // Acá almacenamos el nombre del jugador que mató, tene en cuenta que usamos el valor "killerid" y no "playerid".
          format(muerte, sizeof(muerte), "Haz sido asesinado por: %s(%d)", name, playerid);
          SendClientMessage(playerid, 0xFF0000AA, muerte);
         
          PlayerTextDrawShow(playerid, TDEditor_PTD[playerid][0]); // PlayerTextDrawShow maneja los player-textdraws - Le asignamos el valor de un índice
          PlayerTextDrawShow(playerid, TDEditor_PTD[playerid][0]);
          PlayerTextDrawShow(playerid, TDEditor_PTD[playerid][0]);
          return 1;
}

Prueba el código y creo que te funcionará pero no creo que lo haga lo que realmente quieres que haga. Si es así, dímelo :)

SilverGamingYT 05/11/2016 12:48 PM

Re: [Ayuda] Porque sucede esto
 
Gracias ya no tengo errores ni nada, pero mira, al morir solo sale el mensaje con el cual yo tenia el sistema normal

http://imgur.com/a/sjAnQ

Swedky 05/11/2016 03:13 PM

Respuesta: [Ayuda] Porque sucede esto
 
Es porque cuando mueres tú solo (o sea, nadie te asesinó), killerid será igual a INVALID_PLAYER_ID o sea a 65335 que sería una ID inválida, por éso te sale un nombre en blanco.

Era ésa tu duda?

SilverGamingYT 05/11/2016 07:05 PM

Re: [Ayuda] Porque sucede esto
 
Si, pero si alguien me mata entonces si me saldra el texdraw?. Gracias :3. Oye tu ya tienes un proyecto?

Swedky 05/11/2016 07:16 PM

Respuesta: [Ayuda] Porque sucede esto
 
Ups, error mío. Mira, he mostrado el mismo TD 3 veces jaja, tendrías que cambiarle el índice a 0, 1 y 2:

pawn Code:
public OnPlayerDeath(playerid, killerid, reason)
{
    if(killerid != INVALID_PLAYER_ID) // Verificamos que sea una ID conectada
    {
        new muerte[50], name[MAX_PLAYER_NAME]; // la variable "name" guardará el nombre del jugador que mató
        GetPlayerName(killerid, name, sizeof(name)); // Acá almacenamos el nombre del jugador que mató, tene en cuenta que usamos el valor "killerid" y no "playerid".
        format(muerte, sizeof(muerte), "Haz sido asesinado por: %s(%d)", name, killerid); // Era "killerid", no "playerid"
        SendClientMessage(playerid, 0xFF0000AA, muerte);

        PlayerTextDrawShow(playerid, TDEditor_PTD[playerid][0]); // PlayerTextDrawShow maneja los player-textdraws - Le asignamos el valor de un índice
        PlayerTextDrawShow(playerid, TDEditor_PTD[playerid][1]); // Aquí estaban mis errores
        PlayerTextDrawShow(playerid, TDEditor_PTD[playerid][2]);
    }
    return 1;
}
(lee las notas)

Si quieres probar cómo quedaría:

pawn Code:
CMD:ondeath(playerid)
{
    OnPlayerDeath(playerid, playerid, 31);
    return 1;
}

Éso llamará OnPlayerDeath con los parámetros:
1. playerid = tu ID
2. killerid = tu ID
3. reason = una M4

Quote:

Oye tu ya tienes un proyecto?
Sí, perdón :)

SilverGamingYT 05/11/2016 07:24 PM

Re: [Ayuda] Porque sucede esto
 
Ahora si :3, oye me quieres ayudar a probar el sistema porfi?


All times are GMT. The time now is 12:55 AM.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.