Re: TextDraw, Так как-же их правильно создавать? -
iEnemY - 10.02.2011
А мне вот интересно, как реализовано определение IsCarDrifting (или что у тебя там)... но это оффтоп) У меня такие глюки (у игроков отображаются чужие ТД) были когда я создавал не MAX_PLAYERS TD, а 1 тд. Для каждого игрока должен быть собственный ТД - в этом решение проблемы.
Re: TextDraw, Так как-же их правильно создавать? -
Maccer - 10.02.2011
Quote:
Originally Posted by iEnemY
А мне вот интересно, как реализовано определение IsCarDrifting (или что у тебя там)...
|
pawn Code:
Float:GetVehicleDriftAngle(vehicleid)
{// by Maccer =)
new Float:x, Float:y, Float:z;
GetVehicleVelocity(vehicleid, x, y, z);
new Float:unit_interval = floatsqroot(x*x + y*y);
new Float:arcsin = asin( y/unit_interval );
new Float:arccos = acos( x/unit_interval );
new Float:angle;
if(arcsin >= 0.0) angle = arccos;
else angle = 360.0 - arccos;
new Float:real_angle;
GetVehicleZAngle(vehicleid, real_angle);
real_angle += 90.0;
if(real_angle >= 360.0) real_angle -= 360.0;
if(angle > real_angle) return angle-real_angle;
else return real_angle-angle;
}
Вот так я реализовал у себя =)
Re: TextDraw, Так как-же их правильно создавать? -
iEnemY - 10.02.2011
Нда, видимо нужно начинать изучать математику... или понять эти основы.
Re: TextDraw, Так как-же их правильно создавать? -
White_116 - 10.02.2011
Ы у меня по другому я с векторами работал. Я искал угол между 2 векторами: первый создавал (староя позиция машины,по Y+10) и его направлением движения (староя позиция, новая позиция).
реализуемо как с векторами так и обычная геометрия и немного знание векторов (это решилось когда я с векторами тупанул. Искал косинус, а не арккосинус).
Re: TextDraw, Так как-же их правильно создавать? -
iEnemY - 10.02.2011
Какая блин геометрия, я по ней до сих пор зачёт не могу получить >_<
Эх, математика все таки сложная штука, хорошо что я с ней пока что не разу не сталкивался (а код уже под 60к строк без инкладов).
P.S. Метод векторов интересен)
Re: TextDraw, Так как-же их правильно создавать? -
White_116 - 10.02.2011
вот осноная формула. С для дрифта не нужен.
Re: TextDraw, Так как-же их правильно создавать? -
Stepashka - 11.02.2011
какие сложности О_о
Разница между углом движения и углом поворота корпуса машины + проверка скорости.
Все!
Re: TextDraw, Так как-же их правильно создавать? -
TEKINQ - 18.02.2011
Подскажите пожалуйста где у меня ошибка
Пытался написать систему лвл или по другому Уровень за основу был взят скрипт pInfo
Проблема:
Захожу в игру играю все работает после выхожу и заного захожу фраги сохранились а лвл пишет 1
Code:
public OnGameModeInit()
{
EXPINFO = TextDrawCreate(259.000000, 385.000000, "TEST");
TextDrawBackgroundColor(EXPINFO, 255);
TextDrawFont(EXPINFO, 1);
TextDrawLetterSize(EXPINFO, 0.490000, 1.200000);
TextDrawColor(EXPINFO, -16776961);
TextDrawSetOutline(EXPINFO, 0);
TextDrawSetProportional(EXPINFO, 1);
TextDrawSetShadow(EXPINFO, 1);
for(new playerid = 0; playerid < MAX_PLAYERS; playerid++)
{
Number[playerid] = TextDrawCreate(298.000000, 385.000000,"LVL: 1");
TextDrawBackgroundColor(Number[playerid], 255);
TextDrawFont(Number[playerid], 1);
TextDrawLetterSize(Number[playerid], 0.490000, 1.200000);
TextDrawColor(Number[playerid], -1);
TextDrawSetOutline(Number[playerid], 0);
TextDrawSetProportional(Number[playerid], 1);
TextDrawSetShadow(Number[playerid], 1);
}
for(new g; g < MAX_PLAYERS; g ++)
{
if(IsPlayerConnected(g))
{
TextDrawShowForPlayer(g, EXPINFO);
TextDrawShowForPlayer(g, Number[g]);
}
}
return 1;
}
public OnPlayerConnect(playerid)
{
TextDrawShowForPlayer(playerid, EXPINFO);
TextDrawShowForPlayer(playerid, Number[playerid]);
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
new msg[64];
new score = GetPlayerScore(killerid);
format(msg, sizeof(msg),"LVL: %d",score);
TextDrawSetString(Number[killerid],msg);
switch(GetPlayerScore(killerid))
{
case 1:
{
if(GetPlayerScore(killerid)<5)
TextDrawSetString(Number[killerid],"2");
}
case 2:
{
if(GetPlayerScore(killerid)<10)
TextDrawSetString(Number[killerid],"3");
}
case 3:
{
if(GetPlayerScore(killerid)<15)
TextDrawSetString(Number[killerid],"4");
}
case 4:
{
if(GetPlayerScore(killerid)<20)
TextDrawSetString(Number[killerid],"5");
}
case 5:
{
if(GetPlayerScore(killerid)<25)
TextDrawSetString(Number[killerid],"6");
}
case 6:
{
if(GetPlayerScore(killerid)<30)
TextDrawSetString(Number[killerid],"7");
}
case 7:
{
if(GetPlayerScore(killerid)<35)
TextDrawSetString(Number[killerid],"8");
}
case 8:
{
if(GetPlayerScore(killerid)<40)
TextDrawSetString(Number[killerid],"9");
}
case 9:
{
if(GetPlayerScore(killerid)<45)
TextDrawSetString(Number[killerid],"10");
}
case 10:
{
if(GetPlayerScore(killerid)<50)
TextDrawSetString(Number[killerid],"11");
}
case 11:
{
if(GetPlayerScore(killerid)<55)
TextDrawSetString(Number[killerid],"12");
}
case 12:
{
if(GetPlayerScore(killerid)<60)
TextDrawSetString(Number[killerid],"13");
}
}
return 1;
}
Re: TextDraw, Так как-же их правильно создавать? -
iEnemY - 18.02.2011
Чет я нигде тут не увидел даже намеков на систему сохранения уровня в файл\БД. Дык почему же ты тогда удивляешься что всегда 1 уровень?)
Re: TextDraw, Так как-же их правильно создавать? -
OFFREAL - 14.03.2011
Quote:
Originally Posted by White_116
Я своё спидометр 8 раз переделывал-5 раза из-за этих самых текстдравов.
Выше я описал что и как из личного опыта. В итоге вот что получилось.
|
оО Мсье знает толк в извращениях! )))
Выглядит здорово, особенно панель под радаром! Сколько времени было убито на калибровку оформления? И не расползается ли оно если сменить разрешение экрана?
- - - - -
И чтобы не оффтопить, добавлю от себя по сабжу:
В процессе создания текстдравов для своего сервера я также сталкивался с кучей проблем! Методом проб и ошибок я выяснил следующее:
1. Самый первый созданный на сервере текстдрав баговый и начинает "заражать" остальные если к нему применять TextdrawSetString (было в прошлых версиях, не знаю как сейчас)
2. Перед ~n~ лучше всегда ставить пробел
3. Не превышать максимальную длину текста текстдрава (чтобы превысить 1024 надо, конечно, постараться)
4. При format строки перед обновлением текстдрава не жалейте символов и делайте всегда с запасом (не забывая про пункт 3)
- - - - -
Re: TextDraw, Так как-же их правильно создавать? -
-Stranger- - 05.01.2012
eakwarp, тотоже =)
Re: TextDraw, Так как-же их правильно создавать? -
eakwarp - 05.01.2012
Хотя, по сути, можно и SetTimerEx...
Re: TextDraw, Так как-же их правильно создавать? -
Diman777 - 03.02.2013
Хотел поинтересоваться. Создал персонализированный текстдрав в OnGameModeInit(), пример:
PHP Code:
new Text: textdraw_test[MAX_PLAYERS];
PHP Code:
public OnGameModeInit() {
for(new i = 0; i < GetMaxPlayers(); i++) {
textdraw_test[i] = TextDrawCreate(499.0, 109.0, "_");
TextDrawBackgroundColor(textdraw_test[i], 255);
TextDrawFont(textdraw_test[i], 2);
TextDrawLetterSize(textdraw_test[i], 0.33, 1.40);
TextDrawColor(textdraw_test[i], -1);
TextDrawSetOutline(textdraw_test[i], 1);
TextDrawSetProportional(textdraw_test[i], 1);
}
return 1;
}
Удаляю в:
PHP Code:
public OnGameModeExit() {
for(new i = 0; i < GetMaxPlayers(); i++) {
TextDrawDestroy(textdraw_test[i]);
}
return 1;
}
Показываю и скрываю там где мне нужно:
PHP Code:
stock text_show(playerid) {
TextDrawShowForPlayer(playerid, textdraw_test[playerid]);
format(string, sizeof(string), "ping: %d", GetPlayerPing(playerid));
TextDrawSetString(textdraw_test[playerid], string);
}
stock text_hide(playerid) {
TextDrawHideForPlayer(playerid, textdraw_test[playerid]);
}
Вопрос. Его обязательно скрывать при дисконнекте в OnPlayerDisconnect(playerid, reason) функцией TextDrawHideForPlayer(playerid, Text:text); ?
PHP Code:
public OnPlayerDisconnect(playerid, reason) {
text_hide(playerid);
return 1;
}
Т.е. если у игрока создан текст и в этот момент - он отключается от сервера, то необходимо скрыть текст?)
Re: TextDraw, Так как-же их правильно создавать? -
Alexander_Petrov - 03.02.2013
Quote:
Originally Posted by Diman777
Хотел поинтересоваться. Создал персонализированный текстдрав в OnGameModeInit(), пример:
PHP Code:
new Text: textdraw_test[MAX_PLAYERS];
PHP Code:
public OnGameModeInit() {
for(new i = 0; i < GetMaxPlayers(); i++) {
textdraw_test[i] = TextDrawCreate(499.0, 109.0, "_");
TextDrawBackgroundColor(textdraw_test[i], 255);
TextDrawFont(textdraw_test[i], 2);
TextDrawLetterSize(textdraw_test[i], 0.33, 1.40);
TextDrawColor(textdraw_test[i], -1);
TextDrawSetOutline(textdraw_test[i], 1);
TextDrawSetProportional(textdraw_test[i], 1);
}
return 1;
}
Удаляю в:
PHP Code:
public OnGameModeExit() {
for(new i = 0; i < GetMaxPlayers(); i++) {
TextDrawDestroy(textdraw_test[i]);
}
return 1;
}
Показываю и скрываю там где мне нужно:
PHP Code:
stock text_show(playerid) {
TextDrawShowForPlayer(playerid, textdraw_test[playerid]);
format(string, sizeof(string), "ping: %d", GetPlayerPing(playerid));
TextDrawSetString(textdraw_test[playerid], string);
}
stock text_hide(playerid) {
TextDrawHideForPlayer(playerid, textdraw_test[playerid]);
}
Вопрос. Его обязательно скрывать при дисконнекте в OnPlayerDisconnect(playerid, reason) функцией TextDrawHideForPlayer(playerid, Text:text); ?
PHP Code:
public OnPlayerDisconnect(playerid, reason) {
TextDrawHideForPlayer(playerid, textdraw_test[playerid]);
return 1;
}
Т.е. если у игрока создан текст и в этот момент - он отключается от сервера, то необходимо скрыть текст?)
|
Используй PlayerTextDraw и создавай в OnPlayerConnect для каждого игрока, удалять не нужно.
Re: TextDraw, Так как-же их правильно создавать? -
Diman777 - 03.02.2013
Не юзал ещё CreatePlayerTextDraw, надо бы потестить эти функции)
Re: TextDraw, Так как-же их правильно создавать? -
SDraw - 03.02.2013
-Stranger-, напишите в следующем посте проблему и код...Я уже не могу разобрать ничего из-за оффтопа...
Re: TextDraw, Так как-же их правильно создавать? -
Nikid - 03.02.2013
Я вот юзал CreatePlayerTextDraw вместе с TextDrawCreate, у меня при использование команды бьет ошибку Анкноут команд, но команда используется. Вот почему появляется эта ошибка не пойму. Кто-то может сталкивался? Тоже самое, что скрипт vspawner в мод сунуть, где есть уже TextDrawCreate при среднем онли начинается анкноут команд у меня.
Re: TextDraw, Так как-же их правильно создавать? -
Alexander_Petrov - 03.02.2013
Quote:
Originally Posted by Nikid
Я вот юзал CreatePlayerTextDraw вместе с TextDrawCreate, у меня при использование команды бьет ошибку Анкноут команд, но команда используется. Вот почему появляется эта ошибка не пойму. Кто-то может сталкивался? Тоже самое, что скрипт vspawner в мод сунуть, где есть уже TextDrawCreate при среднем онли начинается анкноут команд у меня.
|
Ошибка в коде, очевидно же.
Re: TextDraw, Так как-же их правильно создавать? -
AirKite - 03.02.2013
Quote:
Originally Posted by White_116
-Stranger- не мучайся, не исправляй а лучше офни и заново всё напиши с вниманием. Я своё спидометр 8 раз переделывал-5 раза из-за этих самых текстдравов.
Выше я описал что и как из личного опыта. В итоге вот что получилось.
new Text TNos[23];-балон нитрухи реализировано как в НФС
new Text:TDClock[10];-измерительная сетка(фон)
new Text:TDHud[MAX_PL][6];-всё что меняется.
1 таймер, стоит 100 мс.
анти спидхак
анти починка
уменьшает хп при аварии (как в Мафии но ослабленно).
дрифтер и спидометр можно отключить.(отдельно можно дрифтер вырубить если и спидометр то дрифтер тоже оффается)
|
Похвально. Хотя конечно в игре это скорее всего смотрится убого... но дрифтбокс это конечно похвально
))
Quote:
Originally Posted by Stepashka
какие сложности О_о
Разница между углом движения и углом поворота корпуса машины + проверка скорости.
Все!
|
Вот вот... приведённый выше код, так и тянет блевануть...
Особенно непонятно где там нужны знания математики. Сложения вычитания, первый класс. Какие сложности то
0_o
Quote:
Originally Posted by Stepashka
Прежде чем редактировать тексдро его нужно скрывать.
|
Quote:
Originally Posted by iEnemY
Никакая это не чушь! Например, для смены цвета текста или бэкграунда, нужно сначала спрятать ТД, изменить цвет, а уже потом показать. Сам проверь!
А вот текст обновляется нормально.
|
Достаточно повторно показать без скрытия.
Quote:
Originally Posted by Mutha_X
Правильнее создавать при первой нужде показать и удалять по первой нужде скрывания)
не обязательно при коннекте/дисконнекте
|
На создание текстдрава уходит время. Лучше его создавать там (по возможности), где эта задержка незначительна. Например при загрузке сервера. Персональные соответственно в OnPlayerConnect.
Quote:
Originally Posted by DANGER1979
человек может не совсем правильно выразился, но суть он изложил верно.
TextDrawCreate в OnPlayerSpawn(playerid) ни когда не будет нормально работать.
TextDrawCreate должно находиться только в public OnGameModeInit() и ни где больше.
Нарушение этого правил - жди пропадания и путания ИД текстдровов.
Если счас мне начнут говорить, что мол у меня не в OnGameModeInit и всё прекрасно работает, то я отвечу.
Правда если у вас на экране у игрока только 1-2 текстдрова, то можно не париться.
Всё зависит насколько много используется текстдровов и на сколько много игроков к вам заходит в игру.
Т.е. сервер с онлайном в 1 человек не будет страдать этими глюками.
|
Ничего текстдравы не глючат. Их можно создавать где угодно, учите мануалы (см вики).
Quote:
Originally Posted by OKStyle
DANGER1979, глобальные текстдравы (которые не персонализированы) должны создаваться при старте мода/скрипта, это верно. Но делать создание персональных текстдравов циклом там же - тупость. Это нужно делать при коннекте игрока, и удалять при выходе. Всё просто.
|
Это не то что бы тупость, это особенность SAMP. Персональные TD работают иначе и удаляются при дисконнекте АВТОМАТИЧЕСКИ. В противном случае можно было бы сэкономить производительность
Re: TextDraw, Так как-же их правильно создавать? -
Nikid - 04.02.2013
Quote:
Originally Posted by Alexander_Petrov
Ошибка в коде, очевидно же.
|
Да вот не на все команды это выдает, а на 3-6. А эти новые текстдрав для игрока не используются в командах не где.