Deathscript // Injured
#1

So I got a script that make you laydown where you either wait for a medic to help you or /accept death.

But When my HP gets to 0 and I die. I respawn but I respawn at the last position I logged out. So if I logged out at Jefferson motel, I spawn at jefferson motel. If I then die at Idlewood, the script send me back in deathmode at Jefferson motel.

So could anyone help me find out whats wrong?

Also if you need something from the script to help me, out just ask me.
Deathscript

Код:
public OnPlayerStateChange(playerid, newstate, oldstate)
{
    if (IsPlayerNPC(playerid))
	    return 1;

	new vehicleid = GetPlayerVehicleID(playerid);

	if (newstate == PLAYER_STATE_WASTED && PlayerData[playerid][pJailTime] < 1)
	{
	    for (new i = 34; i < 39; i ++) {
			PlayerTextDrawHide(playerid, PlayerData[playerid][pTextdraws][i]);
	    }
	    PlayerTextDrawHide(playerid, PlayerData[playerid][pTextdraws][82]);

	    ShowHungerTextdraw(playerid, 0);
	    PlayerData[playerid][pHealth] = 100.0;

	    ResetWeapons(playerid);
	    ResetPlayer(playerid);

	    PlayerData[playerid][pKilled] = 1;

	    if (!PlayerData[playerid][pInjured])
		{
	        PlayerData[playerid][pInjured] = 1;
			
	        PlayerData[playerid][pInterior] = GetPlayerInterior(playerid);
	    	PlayerData[playerid][pWorld] = GetPlayerVirtualWorld(playerid);

	    	GetPlayerPos(playerid, PlayerData[playerid][pPos][0], PlayerData[playerid][pPos][1], PlayerData[playerid][pPos][2]);
	    	GetPlayerFacingAngle(playerid, PlayerData[playerid][pPos][3]);
		}
Код:
public OnPlayerSpawn(playerid)
{
    // Skill levels
	SetPlayerSkillLevel(playerid, WEAPONSKILL_PISTOL, 0);
	SetPlayerSkillLevel(playerid, WEAPONSKILL_MICRO_UZI, 0);
	SetPlayerSkillLevel(playerid, WEAPONSKILL_SPAS12_SHOTGUN, 0);

	if (PlayerData[playerid][pHUD])
	{
	 	TextDrawShowForPlayer(playerid, gServerTextdraws[0]);
		TextDrawShowForPlayer(playerid, gServerTextdraws[1]);
	}
    SetPlayerSkin(playerid, PlayerData[playerid][pSkin]);
    Streamer_ToggleIdleUpdate(playerid, true);

	PlayerData[playerid][pKilled] = 0;

    if (PlayerData[playerid][pBleeding])
	{
 		PlayerData[playerid][pBleedTime] = 1;
   	}
	if (PlayerData[playerid][pJailTime] > 0)
	{
	    if (PlayerData[playerid][pPrisoned])
	    {
	        SetPlayerInPrison(playerid);
	    }
	    else
	    {
		    SetPlayerPos(playerid, 197.6346, 175.3765, 1003.0234);
		    SetPlayerInterior(playerid, 3);

		    SetPlayerVirtualWorld(playerid, (playerid + 100));
		    SetPlayerFacingAngle(playerid, 0.0);

		    SetCameraBehindPlayer(playerid);
		}
		ResetWeapons(playerid);

		PlayerTextDrawShow(playerid, PlayerData[playerid][pTextdraws][70]);
	    SendServerMessage(playerid, "You have %d seconds of remaining jail time.", PlayerData[playerid][pJailTime]);
	}
	else if (PlayerData[playerid][pHospital] != -1)
	{
	    PlayerData[playerid][pHospitalTime] = 0;

	    PlayerData[playerid][pHunger] = 50;
	    PlayerData[playerid][pThirst] = 50;

		SetPlayerInterior(playerid, 3);
		SetPlayerVirtualWorld(playerid, playerid + 100);

		SetPlayerPos(playerid, -211.0370, -1738.6848, 676.7153);
		SetPlayerFacingAngle(playerid, 82.0000);

		SetPlayerCameraPos(playerid, -214.236602, -1738.812133, 676.648132);
		SetPlayerCameraLookAt(playerid, -203.072738, -1738.656127, 675.768737);

        ApplyAnimation(playerid, "CRACK", "crckdeth2", 4.0, 1, 0, 0, 0, 0);
        ApplyAnimation(playerid, "CRACK", "crckdeth2", 4.0, 1, 0, 0, 0, 0);

		GameTextForPlayer(playerid, "~n~~n~~n~~n~~n~~n~~n~~n~~n~~w~Recovering... 15", 1000, 3);
		TogglePlayerControllable(playerid, 0);
	}
	else if (!PlayerData[playerid][pCreated])
	{
    	TogglePlayerControllable(playerid, 0);
		SetPlayerPos(playerid, 216.8005, -99.8691, 1005.2578);
    	SetPlayerFacingAngle(playerid, 90.0000);

  		SetPlayerInterior(playerid, 15);
		SelectTextDraw(playerid, -1);

		for (new i = 23; i < 34; i ++) {
		    PlayerTextDrawShow(playerid, PlayerData[playerid][pTextdraws][i]);
		}
	}
	else
	{
	    SetPlayerFacingAngle(playerid, PlayerData[playerid][pPos][3]);

	    SetPlayerInterior(playerid, PlayerData[playerid][pInterior]);
	    SetPlayerVirtualWorld(playerid, PlayerData[playerid][pWorld]);

		SetCameraBehindPlayer(playerid);
		SetAccessories(playerid);

        if (PlayerData[playerid][pWorld] == PRISON_WORLD)
		{
		    SetPlayerPosEx(playerid, PlayerData[playerid][pPos][0], PlayerData[playerid][pPos][1], PlayerData[playerid][pPos][2]);
		}
		else
		{
		    if(PlayerData[playerid][pSpawnPoint] == 3 && PlayerData[playerid][pInjured] == 0)
			{
				SetPlayerPos(playerid, PlayerData[playerid][pPos][0], PlayerData[playerid][pPos][1], PlayerData[playerid][pPos][2]);
			}
		}
		if (PlayerData[playerid][pInjured])
		{
		    ShowHungerTextdraw(playerid, 0);

			TextDrawShowForPlayer(playerid, gServerTextdraws[2]);
			SendClientMessage(playerid, COLOR_LIGHTRED, "[WARNING]:{FFFFFF} You are injured and require medical attention (/call 911).");

			ApplyAnimation(playerid, "CRACK", "null", 4.0, 0, 0, 0, 1, 0, 1);
			ApplyAnimation(playerid, "CRACK", "crckdeth4", 4.0, 0, 0, 0, 1, 0, 1);
		}
		else
		{
			SetWeapons(playerid);
			ShowHungerTextdraw(playerid, 1);

			SetPlayerHealth(playerid, PlayerData[playerid][pHealth]);
			SetPlayerArmour(playerid, PlayerData[playerid][pArmorStatus]);
		}
	}
	return 1;
}
Reply
#2

You need to get the player's position under OnPlayerDeath...
Here is the starting code for you:
Код:
new PlayerDead[MAX_PLAYERS];
new Float: DeathPos[MAX_PLAYERS][3];

public OnPlayerSpawn(playerid)
{
    if(PlayerDying[playerid] == 0)
    {
		GetPlayerPos(playerid, DeathPos[playerid][0], DeathPos[playerid][1], DeathPos[playerid][2]);
    }
    return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
    if(PlayerDead[playerid] == 1)
    {
		SetPlayerPos(playerid, DeathPos[playerid][0], DeathPos[playerid][1], DeathPos[playerid][2]);
    }
    else if(PlayerDead[playerid] == 2)
	{
	
	}
    return 1;
}
Reply
#3

Hey Blademaster, I appreciate that you posting, and trying to help me.

Really means a lot to me.

Код:
public OnPlayerDeath(playerid, killerid, reason)
{
	if (killerid != INVALID_PLAYER_ID)
	{
	    if (1 <= reason <= 46)
			Log_Write("logs/kill_log.txt", "[%s] %s has killed %s (%s).", ReturnDate(), ReturnName(killerid), ReturnName(playerid), ReturnWeaponName(reason));

		else
			Log_Write("logs/kill_log.txt", "[%s] %s has killed %s (reason %d).", ReturnDate(), ReturnName(killerid), ReturnName(playerid), reason);

		if (reason == 50 && killerid != INVALID_PLAYER_ID)
		    SendAdminAlert(COLOR_LIGHTRED, "[ADMIN]: %s has killed %s by heli-blading.", ReturnName(killerid, 0), ReturnName(playerid, 0));
		    
        if (reason == 29 && killerid != INVALID_PLAYER_ID && GetPlayerState(killerid) == PLAYER_STATE_DRIVER)
		    SendAdminAlert(COLOR_LIGHTRED, "[ADMIN]: %s has killed %s by driver shooting.", ReturnName(killerid, 0), ReturnName(playerid, 0));
	}
	return 1;
}
Should I just add your part to it?
Reply
#4

I added it, but it doesn't work.


Код:
C:\Users\Admin\Desktop\GM Gamemode SCRP\gamemodes\GM.pwn(23994) : error 017: undefined symbol "PlayerDying"
C:\Users\Admin\Desktop\GM Gamemode SCRP\gamemodes\GM.pwn(23994) : warning 215: expression has no effect
C:\Users\Admin\Desktop\GM Gamemode SCRP\gamemodes\GM.pwn(23994) : error 001: expected token: ";", but found "]"
C:\Users\Admin\Desktop\GM Gamemode SCRP\gamemodes\GM.pwn(23994) : error 029: invalid expression, assumed zero
C:\Users\Admin\Desktop\GM Gamemode SCRP\gamemodes\GM.pwn(23994) : fatal error 107: too many error messages on one line

Compilation aborted.Pawn compiler 3.2.3664	 	 	Copyright © 1997-2006, ITB CompuPhase


4 Errors.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)