Проблема с 3д текстом
#1

Создаю 3дтекст при входе игрока. label[para1] = Create3DTextLabel и т.д. Во время игры там 3д текст скрываю иногда с помощью Update3DTextLabelText. Удаляю при дисконнекте игрока. Проблема в том что текст есть но через некоторое время пропадает. Сначала подумало что я где то тупанул когда скрывал его при помощи Update3DTextLabelText. Но в ходе тестов выяснил что после того как он исчезает на него не действует Update3DTextLabelText выходит он удален. Как такое может быть если я его удаляю только при дисконнекте игрока?
Reply
#2

Когда вы создаете 3d текст..
pawn Код:
label[para1] = Create3DTextLabel // в переменную label[para1] записывается его ID
Если вы его удалите, переменная не очищается. Именно по этому путаются ID текстов. Очищайте переменную при удалении текста. Присвойте INVALID_3DTEXT_ID.
Reply
#3

Переменная создается new Text3D:label[MAX_PLAYERS]; Как я могу е присваивать INVALID_3DTEXT_ID? да и при Delete3DTextLabel переменная будет 65535 это же походу и есть INVALID_3DTEXT_ID
Reply
#4

pawn Код:
SetPVarInt(playerid, "Text3D", Create3DTextLabel....);
Reply
#5

У меня такая же фигня была только с машинами. Ставлю 3д текст если онлайн > 50 то он удаляется и больше ничего с ним сделать нельзя. Я сделал 3д тексты динамическими т.е. поставил стример, и тексты стали пропадать реже.
Reply
#6

tag mismatch
Reply
#7

Text3D:INVALID_3DTEXT_ID
Reply
#8

Варнинг tag mismatch при первом и втором случае. Либо я что то не понял.
Reply
#9

Quote:
Originally Posted by Zabei
Посмотреть сообщение
Варнинг tag mismatch при первом и втором случае. Либо я что то не понял.
Код:
SetPVarInt(playerid, "Text3D", Text3D:Create3DTextLabel....);
или
Код:
SetPVarInt(playerid, "Text3D", PlayerText3D::CreatePlayer3DTextLabel....);
только это вообще по сути не нужно...

Код:
new Text3D:label[MAX_PLAYERS];

public OnPlayerConnect(playerid) {
	label[playerid] = Create3Dtext...
	return 1;
}

public OnPlayerDisconnect(playerid, reason) {
	if(label != Text3D:INVALID_3DTEXT_ID) {
		Delete3DtextBlabla(label[playerid]);
		label[playerid] = Text3D:INVALID_3DTEXT_ID;
	}
	return 1;
}
Reply
#10

pawn Код:
new Text3D:label[MAX_PLAYERS]={Text3D:INVALID_3DTEXT_ID, ...};
Не забываем, мало ли чего.
Reply
#11

проблема не устранилась
Reply
#12

я не могу понять в чем проблема. Создаю 3дтекст при логине удаляю при дисконекте и он норм работает но 30 сек пройдет и оон уделается как такое возможно если я его удаляю при дисконекте только
Reply
#13

Quote:
Originally Posted by Zabei
View Post
я не могу понять в чем проблема. Создаю 3дтекст при логине удаляю при дисконекте и он норм работает но 30 сек пройдет и оон уделается как такое возможно если я его удаляю при дисконекте только
В моём примере, скорее всего
Code:
if(label != Text3D:INVALID_3DTEXT_ID) {
нужно поменять на
Code:
if(label != INVALID_3DTEXT_ID) {
но
Code:
label[playerid] = Text3D:INVALID_3DTEXT_ID;
так и оставить.

Вообще соответственный ID может удалять и FS какой ни будь.
Reply
#14

FS не использую вообще
Reply
#15

Короче я решил написать скрипт который бы при удалении 3дтекста писал что за текст был удален. В ходе моих тестов выяснилось что почему то при удалении любого 3дтекста удаляются все 3д тексты. В чем может быть проблема?
Reply
#16

Где-то видел, чтобы отдельный id искали через цикл, при том №итерации сравнивали с искомым id с неправильно поставленным условием в теле цикла на что-то ещё...
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)