SA-MP Forums Archive
HealthBar проблема. - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: HealthBar проблема. (/showthread.php?tid=114657)



HealthBar проблема. - odyvan - 20.12.2009


Добрый день, на одном из серверов sa-mp я увидел прекрасный индикатор HP, при попытке реализовать подобный у меня возникли ошибки из-за которых скрипт не правильно работает, старое количество HP остается под новым, то есть не удаляется, помогите пожалуйста.
#include <a_samp>

new Text:hpbar[MAX_PLAYERS];

public OnFilterScriptInit()
{
for(new i; i<MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
OnPlayerConnect(i);
}
}
return 1;
}

public OnFilterScriptExit()
{
for(new i; i<MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
TextDrawDestroy(hpbar[i]);
}
}
return 1;
}
public OnPlayerConnect(playerid)
{
hpbar[playerid] = TextDrawCreate(558.000000,67.000000,"100 hp");
TextDrawAlignment(hpbar[playerid],0);
TextDrawBackgroundColor(hpbar[playerid],0x000000ff);
TextDrawFont(hpbar[playerid],1);
TextDrawLetterSize(hpbar[playerid],0.299999,0.799999);
TextDrawColor(hpbar[playerid],0xffffffff);
TextDrawSetOutline(hpbar[playerid],1);
TextDrawSetProportional(hpbar[playerid],1);
TextDrawSetShadow(hpbar[playerid],1);
return 1;
}

public OnPlayerDisconnect(playerid)
{
TextDrawDestroy(hpbar[playerid]);
return 1;
}

public OnPlayerDeath(playerid)
{
TextDrawHideForPlayer(playerid,hpbar[playerid]);
return 1;
}

public OnPlayerSpawn(playerid)
{
TextDrawSetString(hpbar[playerid],"100 hp");
TextDrawShowForPlayer(playerid,hpbar[playerid]);
return 1;
}
forward OnPlayerUpdate(playerid);
public OnPlayerUpdate(playerid)
{
new Float:hp;
new string[255];
GetPlayerHealth(playerid, hp);
format(string,255,"%.0f hp",hp);
TextDrawSetString(hpbar[playerid],string);
return 1;
}


Re: HealthBar проблема. - MX_Master - 20.12.2009

последние три строки должны выглядеть как вот эти 4:

Code:
 TextDrawSetString(hpbar[playerid],string);
 TextDrawShowForPlayer(playerid,hpbar[playerid]); // без этой строки TextDraw не перерисовывается, а наслаивается
 return 1;
}



Re: HealthBar проблема. - [Saint] - 20.12.2009

я с TextDraw'ами ещё только учусь работать, поетому у меня возник вопрос:

почему
Code:
hpbar[playerid] = TextDrawCreate(558.000000,67.000000,"100 hp");
находится в
Code:
public OnPlayerConnect(playerid)
а не в
Code:
public OnGameModeInit
это при коннекте игрока создаётся текст драв, потом ещё +1 игрок следовательно ещё +1 тестдрав,
а лимит то он не безграничный или как ?

объясните пожалуйста


Re: HealthBar проблема. - Zeex - 20.12.2009

Quote:
Originally Posted by [Saint
]
....
объясните пожалуйста
Потому что на каждого игрока нужен свой текстдрав, ибо у всех разное количество хп и соответственно текст тоже должен быть у каждого свой.

А если у всех должно выглядеть одинаково, то обычно делают всего один и создают его лишь однажды (например, в OnGameModeInit).

.....
Quote:
Originally Posted by odyvan
public OnPlayerUpdate(playerid)
{
new Float:hp;
new string[255];
GetPlayerHealth(playerid, hp);
format(string,255,"%.0f hp",hp);
TextDrawSetString(hpbar[playerid],string);
return 1;
}
Можно поинтересоваться почему string такого большого размера? "nnn hp" - максимум 6 знаков + '\0', итого семь....


Re: HealthBar проблема. - [Saint] - 20.12.2009

а так чтобы TextDraw был в OnGameModeInit и у каждого отображалось своё никак нельзя?


Re: HealthBar проблема. - MX_Master - 21.12.2009

можно все, просто при входе выделяется память под надписи, а при выходе - освобождается, и серв не кушает много ОЗУ.

можно создать все надписи в начале режима, нет проблем, но их содержимое все равно обновлять нужно


Re: HealthBar проблема. - Baks - 09.01.2010

А большая ли нагрузка с таким кодом, если на сервере онлайн 100?


Re: HealthBar проблема. - MX_Master - 10.01.2010

при 100 игроках должны использоваться апсалютно все средства для оптимизации скрипта, думаю, это и без меня понятно. поэтому сервер будет перегружен с этим кодом. лучше ваще как можно меньше кода пихать в OnPlayerUpdate.


Re: HealthBar проблема. - crone - 19.02.2010

Если будешь использовать в OnPlayerUpdate то будет сильная рассинхронизация. Лучше делать через таймер.