PDA

Просмотр полной версии : [Вопрос] По смерти игрока



Flime
09.06.2014, 14:51
После смерти игрок не сразу спавнится, а умирает еще раз, а только потом спавнится. Как это исправить?

DeimoS
09.06.2014, 14:56
OnPlayerDeath/OnPlayerSpawn покажите

Flime
09.06.2014, 15:03
OnPlayerDeath/OnPlayerSpawn покажите


public OnPlayerDeath(playerid, killerid, reason)
{
if(PlayerInfo[killerid][pLogin] == false) SCM(playerid, 0xFF6347AA, "Необходимо залогинется!"),KickWithMessage(playerid);
if(reason == 38) kod[playerid] = 3,AntiCheatNadpis(playerid);
if(PlayerInfo[playerid][pZone] != 6 && PlayerInfo[playerid][pTeam] == 0) SetPlayerHealthAC(killerid, 100);
if(PlayerInfo[playerid][pZone] == 6) SetPlayerHealthAC(killerid, 30);
new string[10];
PlayerInfo[killerid][pKill]++;
PlayerInfo[playerid][pSmert]++;
format(string, sizeof(string), "Убил %s", PN(killerid)), SetPlayerChatBubble(playerid, string, -1, 30.0, 3000);
SendDeathMessage(killerid, playerid, reason);
SetPlayerScore(killerid, PlayerInfo[killerid][pKill]);
UpdateStats(killerid);
ResetPlayerWeapons(playerid);
GameTextForPlayer(killerid, "~r~+1 Kill", 1000, 3);
OnPlayerSpawn(playerid);
return true;
}


- - - Добавлено - - -



public OnPlayerSpawn(playerid)
{
if(PlayerInfo[playerid][pLogin] == false) SCM(playerid, 0xFF6347AA, "Необходимо залогинется"),KickWithMessage(playerid);
ResetPlayerWeapons(playerid);
SetPlayerSkin(playerid,PlayerInfo[playerid][pSkin]);
if(PlayerInfo[playerid][pZone] == 6) SetPlayerHealthAC(playerid,30);
else SetPlayerHealthAC(playerid,100);
SetPlayerSpawn(playerid);
return true;
}


- - - Добавлено - - -

SetPlayerSpawn(playerid); Нужен?

DeimoS
09.06.2014, 15:08
Вот тут (и далее в массивах с killerid) будет выход за пределы массива, когда убийцы не будет существовать.
И OnPlayerSpawn не нужен в OnPlayerDeath. Ибо первый сам вызывается после обработки всего кода в OnPlayerDeath


public OnPlayerDeath(playerid, killerid, reason)
{

if(reason == 38) kod[playerid] = 3, AntiCheatNadpis(playerid);
new string[10];
ResetPlayerWeapons(playerid);
PlayerInfo[playerid][pSmert]++;
SendDeathMessage(killerid, playerid, reason);

if(killerid != INVALID_PLAYER_ID)
{
GameTextForPlayer(killerid, "~r~+1 Kill", 1000, 3);
UpdateStats(killerid);
SetPlayerScore(killerid, PlayerInfo[killerid][pKill]);
format(string, sizeof(string), "Убил %s", PN(killerid)), SetPlayerChatBubble(playerid, string, -1, 30.0, 3000);
PlayerInfo[killerid][pKill]++;
if(PlayerInfo[playerid][pZone] == 6) SetPlayerHealthAC(killerid, 30);
if(PlayerInfo[playerid][pZone] != 6 && PlayerInfo[playerid][pTeam] == 0) SetPlayerHealthAC(killerid, 100);
if(PlayerInfo[killerid][pLogin] == false) SCM(playerid, 0xFF6347AA, "Необходимо залогинется!"),KickWithMessage(playerid);
}
return true;
}
Код сами расположите в той последовательности, которая вам нужна. Я лишь показал структуру, по которой стоит формировать OnPlayerDeath

Flime
09.06.2014, 15:23
Вот тут (и далее в массивах с killerid) будет выход за пределы массива, когда убийцы не будет существовать.
И OnPlayerSpawn не нужен в OnPlayerDeath. Ибо первый сам вызывается после обработки всего кода в OnPlayerDeath


public OnPlayerDeath(playerid, killerid, reason)
{

if(reason == 38) kod[playerid] = 3, AntiCheatNadpis(playerid);
new string[10];
ResetPlayerWeapons(playerid);
PlayerInfo[playerid][pSmert]++;
SendDeathMessage(killerid, playerid, reason);

if(killerid != INVALID_PLAYER_ID)
{
GameTextForPlayer(killerid, "~r~+1 Kill", 1000, 3);
UpdateStats(killerid);
SetPlayerScore(killerid, PlayerInfo[killerid][pKill]);
format(string, sizeof(string), "Убил %s", PN(killerid)), SetPlayerChatBubble(playerid, string, -1, 30.0, 3000);
PlayerInfo[killerid][pKill]++;
if(PlayerInfo[playerid][pZone] == 6) SetPlayerHealthAC(killerid, 30);
if(PlayerInfo[playerid][pZone] != 6 && PlayerInfo[playerid][pTeam] == 0) SetPlayerHealthAC(killerid, 100);
if(PlayerInfo[killerid][pLogin] == false) SCM(playerid, 0xFF6347AA, "Необходимо залогинется!"),KickWithMessage(playerid);
}
return true;
}
Код сами расположите в той последовательности, которая вам нужна. Я лишь показал структуру, по которой стоит формировать OnPlayerDeath
А что значит "выход за пределы массива " можете скинуть урок, где об этом написано?

KakbeYura
09.06.2014, 16:12
А что значит "выход за пределы массива " можете скинуть урок, где об этом написано?

Это аксиома, зачем ещё урок?
У меня есть палка на метр, а я схватил её на втором метре (в воздухе) и хочу поднять. Она поднимется?