Önceden yardım talebine yapmıştım, arayanlara kolaylık sağlanması için buraya atıyorum.
#include <streamer>
#define MAX_LABEL 20
new Iterator:Label<MAX_LABEL>;
enum Labeller
{
Text3D:LabelID,
Yazi[64]
}
new DataLabel[MAX_LABEL][Labeller];
CMD:labelolustur(playerid, params[])
{
new yeniyazi[64], id = Iter_Free(Label);
if (id == -1) return SendClientMessage(playerid, -1, "{C20000}[!]: {FFFFFF}Max label sayısına ulaşıldı.");
if (sscanf(params, "s[64]", yeniyazi)) return SendClientMessage(playerid, -1, "{C20000}[!]: {FFFFFF}/labelolustur [yazi]");
labelolustur(playerid, yeniyazi);
return 1;
}
stock labelolustur(playerid, yeniyazi[64])
{
new labelbilgi[100], id = Iter_Free(Label), label[64], Flaot:x, Float:y, Float:z;
DataLabel[id][ID] = id;
DataLabel[id][Yazi] = yeniyazi;
format(labelbilgi, sizeof(labelbilgi), "{01c800}[!]: {FFFFFF}%d nolu geçici label eklendi.", DataLabel[id][LabelID]);
SendClientMessage(playerid, -1, labelbilgi);
GetPlayerPos(playerid, Float:x, Float:y, Float:z);
format(label, sizeof(label), "(%d)\n%s", DataLabel[id][ID], DataLabel[id][Yazi]);
DataLabel[id][LabelID] = CreateDynamic3DTextLabel(label, -1, Float:x, Float:y, Float:z, 10.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, 0);
Iter_Add(Label, id);
return 1;
}
CMD:labelsil(playerid, params[])
{
new id, labelbilgi[100];
if (sscanf(params, "d", id)) return SendClientMessage(playerid, -1, "{C20000}[!]: {FFFFFF}/labelsil [id]");
if (!Iter_Contains(Label, id)) return SendClientMessage(playerid, -1, "{C20000}[!]: {FFFFFF}Geçersiz ID girdiniz.");
DataLabel[id][LabelID] = -1;
format(DataLabel[id][Yazi], 64, "");
DestroyDynamic3DTextLabel(DataLabel[id][LabelID]);
Iter_Remove(Label, id);
format(labelbilgi, sizeof(labelbilgi), "{01c800}[!]: {FFFFFF}%d nolu geçici label silindi.", id);
SendClientMessage(playerid, -1, labelbilgi);
return 1;
}
CMD:labelduzenle(playerid, params[])
{
new id, yeniyazi[64];
if (sscanf(params, "ds[64]", id, yeniyazi)) return SendClientMessage(playerid, -1, "{C20000}[!]: {FFFFFF}/labelduzenle [id] [yazi]");
if (!Iter_Contains(Label, id)) return SendClientMessage(playerid, -1, "{C20000}[!]: {FFFFFF}Geçersiz ID girdiniz.");
labelduzenle(playerid, id, yeniyazi);
return 1;
}
stock labelduzenle(playerid, id, yeniyazi[64])
{
new labelbilgi[100], label[64];
DataLabel[id][Yazi] = yeniyazi;
format(label, sizeof(label), "(%d)\n%s", DataLabel[id][ID], DataLabel[id][Yazi]);
UpdateDynamic3DTextLabelText(DataLabel[id][LabelID], -1, label);
SendClientMessage(playerid, -1, "{01c800}[!]: {FFFFFF}Geçici label düzenlendi.");
format(labelbilgi, sizeof(labelbilgi), "{01c800}[!]: {FFFFFF}yeni yazı {ff8e00}[%s].", DataLabel[id][Yazi]);
SendClientMessage(playerid, -1, labelbilgi);
return 1;
}
İyi çalışmalar, güzel paylaşım olmuş ancak gözüme takılan birkaç ayrıntıdan bahsetmek istiyorum. İlk olarak streamer kütüphanesi tanımlanmamış, yüksek olasılıkla unutulmuş galiba. Diğer bir nokta ise DataLabel[id][ID] adında tanımlı bir ifade göremedim acaba eksik bir enum kümesi tanımlamış olabilir misiniz ?. Bu arada ek bir öneri vermek istiyorum, method içerisinde ortak amaçlar için kullanılan 2 metinsel değişken yerine tek metinsel değişken kullanmak daha ekonomik olabilir. Her hücre ortalama 4 byte ise 64 hücre yaklaşık 256 byte yer kaplar. Bunun yerine sadece labelbilgi değişkenini de kullanabilirsiniz :
stock labelolustur(playerid, yeniyazi[64])
{
new labelbilgi[100], id = Iter_Free(Label), Flaot:x, Float:y, Float:z;
DataLabel[id][ID] = id;
DataLabel[id][Yazi] = yeniyazi;
format(labelbilgi, sizeof(labelbilgi), "{01c800}[!]: {FFFFFF}%d nolu geçici label eklendi.", DataLabel[id][ID]);
SendClientMessage(playerid, -1, labelbilgi);
GetPlayerPos(playerid, Float:x, Float:y, Float:z);
labelbilgi[0] = EOS;
format(labelbilgi, sizeof(labelbilgi), "(%d)\n%s", DataLabel[id][ID], DataLabel[id][Yazi]);
DataLabel[id][LabelID] = CreateDynamic3DTextLabel(labelbilgi, -1, Float:x, Float:y, Float:z, 10.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, 0);
Iter_Add(Label, id);
return 1;
}Tekrardan paylaşım için teşekkürler.
Alıntı yapılan: ThePosition - 12 Aralık 2021, 23:12:26İyi çalışmalar, güzel paylaşım olmuş ancak gözüme takılan birkaç ayrıntıdan bahsetmek istiyorum. İlk olarak streamer kütüphanesi tanımlanmamış, yüksek olasılıkla unutulmuş galiba. Diğer bir nokta ise DataLabel[id][ID] adında tanımlı bir ifade göremedim acaba eksik bir enum kümesi tanımlamış olabilir misiniz ?. Bu arada ek bir öneri vermek istiyorum, method içerisinde ortak amaçlar için kullanılan 2 metinsel değişken yerine tek metinsel değişken kullanmak daha ekonomik olabilir. Her hücre ortalama 4 byte ise 64 hücre yaklaşık 256 byte yer kaplar. Bunun yerine sadece labelbilgi değişkenini de kullanabilirsiniz :
stock labelolustur(playerid, yeniyazi[64])
{
new labelbilgi[100], id = Iter_Free(Label), Flaot:x, Float:y, Float:z;
DataLabel[id][ID] = id;
DataLabel[id][Yazi] = yeniyazi;
format(labelbilgi, sizeof(labelbilgi), "{01c800}[!]: {FFFFFF}%d nolu geçici label eklendi.", DataLabel[id][ID]);
SendClientMessage(playerid, -1, labelbilgi);
GetPlayerPos(playerid, Float:x, Float:y, Float:z);
labelbilgi[0] = EOS;
format(labelbilgi, sizeof(labelbilgi), "(%d)\n%s", DataLabel[id][ID], DataLabel[id][Yazi]);
DataLabel[id][LabelID] = CreateDynamic3DTextLabel(labelbilgi, -1, Float:x, Float:y, Float:z, 10.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, 0);
Iter_Add(Label, id);
return 1;
}Tekrardan paylaşım için teşekkürler.
Normal kodlar;
#define MAX_LABEL 20
new Text3D: Label[MAX_LABEL];
new Iterator:Label<MAX_LABEL>;
enum Labeller
{
ID,
Yazi[64]
}
new DataLabel[MAX_LABEL][Labeller];
CMD:labelolustur(playerid, params[])
{
new yeniyazi[64], id = Iter_Free(Label);
if (id == -1) return SendClientMessage(playerid, -1, "{C20000}[!]: {FFFFFF}Max label sayısına ulaşıldı.");
if (sscanf(params, "s[64]", yeniyazi)) return SendClientMessage(playerid, -1, "{C20000}[!]: {FFFFFF}/labelolustur [yazi]");
labelolustur(playerid, yeniyazi);
return 1;
}
stock labelolustur(playerid, yeniyazi[64])
{
new labelbilgi[100], id = Iter_Free(Label), label[64], Flaot:x, Float:y, Float:z;
DataLabel[id][ID] = id;
DataLabel[id][Yazi] = yeniyazi;
format(labelbilgi, sizeof(labelbilgi), "{01c800}[!]: {FFFFFF}%d nolu geçici label eklendi.", DataLabel[id][ID]);
SendClientMessage(playerid, -1, labelbilgi);
GetPlayerPos(playerid, Float:x, Float:y, Float:z);
format(label, sizeof(label), "(%d)\n%s", DataLabel[id][ID], DataLabel[id][Yazi]);
Label[id] = CreateDynamic3DTextLabel(label, -1, Float:x, Float:y, Float:z, 10.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, 0);
Iter_Add(Label, id);
return 1;
}
CMD:labelsil(playerid, params[])
{
new id, labelbilgi[100];
if (sscanf(params, "d", id)) return SendClientMessage(playerid, -1, "{C20000}[!]: {FFFFFF}/labelsil [id]");
if (!Iter_Contains(Label, id)) return SendClientMessage(playerid, -1, "{C20000}[!]: {FFFFFF}Geçersiz ID girdiniz.");
DataLabel[id][ID] = -1;
format(DataLabel[id][Yazi], 64, "");
DestroyDynamic3DTextLabel(Label[id]);
Iter_Remove(Label, id);
format(labelbilgi, sizeof(labelbilgi), "{01c800}[!]: {FFFFFF}%d nolu geçici label silindi.", id);
SendClientMessage(playerid, -1, labelbilgi);
return 1;
}
CMD:labelduzenle(playerid, params[])
{
new id, yeniyazi[64];
if (sscanf(params, "ds[64]", id, yeniyazi)) return SendClientMessage(playerid, -1, "{C20000}[!]: {FFFFFF}/labelduzenle [id] [yazi]");
if (!Iter_Contains(Label, id)) return SendClientMessage(playerid, -1, "{C20000}[!]: {FFFFFF}Geçersiz ID girdiniz.");
labelduzenle(playerid, id, yeniyazi);
return 1;
}
stock labelduzenle(playerid, id, yeniyazi[64])
{
new labelbilgi[100], label[64];
DataLabel[id][Yazi] = yeniyazi;
format(label, sizeof(label), "(%d)\n%s", DataLabel[id][ID], DataLabel[id][Yazi]);
UpdateDynamic3DTextLabelText(Label[id], -1, label);
SendClientMessage(playerid, -1, "{01c800}[!]: {FFFFFF}Geçici label düzenlendi.");
format(labelbilgi, sizeof(labelbilgi), "{01c800}[!]: {FFFFFF}yeni yazı {ff8e00}[%s].", DataLabel[id][Yazi]);
SendClientMessage(playerid, -1, labelbilgi);
return 1;
}Fakat ben DataLabel[id][ID] tanımlamışım fakat gereksiz bir şekilde new Text3D: Label[MAX_LABEL]; kodunuda eklemişim bunu paylaşacağım zaman kodları incelerken bunu fark ettim direk textbox üzerinde new Text3D: Label[MAX_LABEL]; kodunu silip ID tanımını LabelID tanımı olarak değiştirdim gözümden kaçmış düzenledim.
Ellerine sağlık.
Paylaşım İçin Teşekkürler ;)
Gelşitirilebilir ve labeller için \n eklenebilir.