Pozdrav svima, retko sta vam izbacujem od svojih radova, sta vise skoro nista... Pa sam zbog toga odlucio da vam napravim tutorial za jednu foricu koja mnoge zanima, a ne znaju kako da urade...
Naime rec je o pokretnim slova tj konkretno cu vam pokazati kako napraviti da se slova vrte u krug kao sto je vecina vas videla na BloodMoneyu, BlackStreetu i slicnim serverima.
Primer: http://www.deviantpics.com/images/2018/05/10/sa-mp-382.png - slova se vrte oko zgrade
Tutorial nije namenjen bas za pocetnike jer moraju da se znaju neke stvari koje necu objasnjavati... U tutorialu cu koristiti YLESS-ove tajmere.
Pre svega treba u MapEditoru, ili preko cega vec mapate, da izmapate objekte na kojima ce biti text u krug, odnosno da ih povezete tako da oni cine krug...
Primer: http://www.deviantpics.com/images/2018/05/10/image.png
Nakon toga uzmete kodove iz editora i stavite ih u notepad/pawno i na svaki stavite zeljeni text tj slovo u ovom slucaju(Necu objasnjavati postavljanje texta, imate razne tutorijale za to).
[pawn]
new PokretnaSlova[12];
//ongamemodeinit ili gde vec ucitavate mape
PokretnaSlova[0] = CreateDynamicObject(19366, 1468.65759, -2285.15405, 25.59300, 0.00000, 0.00000, -15.00000);
PokretnaSlova[1] = CreateDynamicObject(19366, 1468.66138, -2288.23438, 25.59300, 0.00000, 0.00000, 15.00000);
PokretnaSlova[2] = CreateDynamicObject(19366, 1470.21057, -2290.90356, 25.59300, 0.00000, 0.00000, 45.00000);
PokretnaSlova[3] = CreateDynamicObject(19366, 1472.87488, -2292.42163, 25.59300, 0.00000, 0.00000, 75.00000);
PokretnaSlova[4] = CreateDynamicObject(19366, 1475.98669, -2292.43579, 25.59300, 0.00000, 0.00000, 105.00000);
PokretnaSlova[5] = CreateDynamicObject(19366, 1478.66187, -2290.89380, 25.59300, 0.00000, 0.00000, 135.00000);
PokretnaSlova[6] = CreateDynamicObject(19366, 1480.22510, -2288.21167, 25.59300, 0.00000, 0.00000, 165.00000);
PokretnaSlova[7] = CreateDynamicObject(19366, 1480.22705, -2285.10132, 25.59300, 0.00000, 0.00000, 195.00000);
PokretnaSlova[8] = CreateDynamicObject(19366, 1478.66150, -2282.41748, 25.59300, 0.00000, 0.00000, 225.00000);
PokretnaSlova[9] = CreateDynamicObject(19366, 1475.97339, -2280.87622, 25.59300, 0.00000, 0.00000, 255.00000);
PokretnaSlova[10] = CreateDynamicObject(19366, 1472.89282, -2280.85986, 25.59300, 0.00000, 0.00000, 285.00000);
PokretnaSlova[11] = CreateDynamicObject(19366, 1470.21033, -2282.43262, 25.59300, 0.00000, 0.00000, -45.00000);
SetDynamicObjectMaterialText(PokretnaSlova[0], 0, "{000000}A", 60, "Arial", 130, 1, -1, 0, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
SetDynamicObjectMaterialText(PokretnaSlova[1], 0, "{000000}B", 60, "Arial", 130, 1, -1, 0, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
SetDynamicObjectMaterialText(PokretnaSlova[2], 0, "{000000}C", 60, "Arial", 130, 1, -1, 0, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
SetDynamicObjectMaterialText(PokretnaSlova[3], 0, "{000000}D", 60, "Arial", 130, 1, -1, 0, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
SetDynamicObjectMaterialText(PokretnaSlova[4], 0, "{000000}E", 60, "Arial", 130, 1, -1, 0, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
SetDynamicObjectMaterialText(PokretnaSlova[5], 0, "{000000}F", 60, "Arial", 130, 1, -1, 0, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
SetDynamicObjectMaterialText(PokretnaSlova[6], 0, "{000000}G", 60, "Arial", 130, 1, -1, 0, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
SetDynamicObjectMaterialText(PokretnaSlova[7], 0, "{000000}H", 60, "Arial", 130, 1, -1, 0, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
SetDynamicObjectMaterialText(PokretnaSlova[8], 0, "{000000}I", 60, "Arial", 130, 1, -1, 0, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
SetDynamicObjectMaterialText(PokretnaSlova[9], 0, "{000000}J", 60, "Arial", 130, 1, -1, 0, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
SetDynamicObjectMaterialText(PokretnaSlova[10], 0, "{000000}K", 60, "Arial", 130, 1, -1, 0, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
SetDynamicObjectMaterialText(PokretnaSlova[11], 0, "{000000}L", 60, "Arial", 130, 1, -1, 0, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
[/pawn]
Kada ste to uradili sada treba od svakog objekta da uzmete X,Y,Z,rX,rY,rZ kordinate i stavite u jedan enum. To radimo da bi imali pozicije na koje treba da saljemo odredjeno slovo tj objekat.
[pawn]
new Float:PokretnaSlovaPos[12][6] =
{
{1468.65759, -2285.15405, 25.59300, 0.00000, 0.00000, -15.00000},
{1468.66138, -2288.23438, 25.59300, 0.00000, 0.00000, 15.00000},
{1470.21057, -2290.90356, 25.59300, 0.00000, 0.00000, 45.00000},
{1472.87488, -2292.42163, 25.59300, 0.00000, 0.00000, 75.00000},
{1475.98669, -2292.43579, 25.59300, 0.00000, 0.00000, 105.00000},
{1478.66187, -2290.89380, 25.59300, 0.00000, 0.00000, 135.00000},
{1480.22510, -2288.21167, 25.59300, 0.00000, 0.00000, 165.00000},
{1480.22705, -2285.10132, 25.59300, 0.00000, 0.00000, 195.00000},
{1478.66150, -2282.41748, 25.59300, 0.00000, 0.00000, 225.00000},
{1475.97339, -2280.87622, 25.59300, 0.00000, 0.00000, 255.00000},
{1472.89282, -2280.85986, 25.59300, 0.00000, 0.00000, 285.00000},
{1470.21033, -2282.43262, 25.59300, 0.00000, 0.00000, -45.00000}
};[/pawn]
I sada sve sto treba da uradite je da uradite funkciju koja ce objekat da pomera sa mesta na mesto, ja sam to uradio ovako.
[pawn]
task PokretnaSlova_Tajmer[4000]()//ponavljajuci tajmer na svake 4s
{
new Float:Pos[3];
for(new i = 0; i < 12; i++)//petlja za 12 objekata
{
GetDynamicObjectPos(PokretnaSlova
, Pos[0], Pos[1], Pos[2]); // uzimamo poziciju objekta i donjim kodom proveravamo na kom je mestu, zatim ga saljemo na sledece
//nisam koristio else if kasnije jer sam imao slucajeva da mi zabada na raznim skriptama, pawn jbg
if(Pos[0] == PokretnaSlovaPos[0][0]) MoveDynamicObject(PokretnaSlova, PokretnaSlovaPos[1][0], PokretnaSlovaPos[1][1], PokretnaSlovaPos[1][2], 1.0, PokretnaSlovaPos[1][3], PokretnaSlovaPos[1][4], PokretnaSlovaPos[1][5]);
if(Pos[0] == PokretnaSlovaPos[1][0]) MoveDynamicObject(PokretnaSlova, PokretnaSlovaPos[2][0], PokretnaSlovaPos[2][1], PokretnaSlovaPos[2][2], 1.0, PokretnaSlovaPos[2][3], PokretnaSlovaPos[2][4], PokretnaSlovaPos[2][5]);
if(Pos[0] == PokretnaSlovaPos[2][0]) MoveDynamicObject(PokretnaSlova, PokretnaSlovaPos[3][0], PokretnaSlovaPos[3][1], PokretnaSlovaPos[3][2], 1.0, PokretnaSlovaPos[3][3], PokretnaSlovaPos[3][4], PokretnaSlovaPos[3][5]);
if(Pos[0] == PokretnaSlovaPos[3][0]) MoveDynamicObject(PokretnaSlova, PokretnaSlovaPos[4][0], PokretnaSlovaPos[4][1], PokretnaSlovaPos[4][2], 1.0, PokretnaSlovaPos[4][3], PokretnaSlovaPos[4][4], PokretnaSlovaPos[4][5]);
if(Pos[0] == PokretnaSlovaPos[4][0]) MoveDynamicObject(PokretnaSlova, PokretnaSlovaPos[5][0], PokretnaSlovaPos[5][1], PokretnaSlovaPos[5][2], 1.0, PokretnaSlovaPos[5][3], PokretnaSlovaPos[5][4], PokretnaSlovaPos[5][5]);
if(Pos[0] == PokretnaSlovaPos[5][0]) MoveDynamicObject(PokretnaSlova, PokretnaSlovaPos[6][0], PokretnaSlovaPos[6][1], PokretnaSlovaPos[6][2], 1.0, PokretnaSlovaPos[6][3], PokretnaSlovaPos[6][4], PokretnaSlovaPos[6][5]);
if(Pos[0] == PokretnaSlovaPos[6][0]) MoveDynamicObject(PokretnaSlova, PokretnaSlovaPos[7][0], PokretnaSlovaPos[7][1], PokretnaSlovaPos[7][2], 1.0, PokretnaSlovaPos[7][3], PokretnaSlovaPos[7][4], PokretnaSlovaPos[7][5]);
if(Pos[0] == PokretnaSlovaPos[7][0]) MoveDynamicObject(PokretnaSlova, PokretnaSlovaPos[8][0], PokretnaSlovaPos[8][1], PokretnaSlovaPos[8][2], 1.0, PokretnaSlovaPos[8][3], PokretnaSlovaPos[8][4], PokretnaSlovaPos[8][5]);
if(Pos[0] == PokretnaSlovaPos[8][0]) MoveDynamicObject(PokretnaSlova, PokretnaSlovaPos[9][0], PokretnaSlovaPos[9][1], PokretnaSlovaPos[9][2], 1.0, PokretnaSlovaPos[9][3], PokretnaSlovaPos[9][4], PokretnaSlovaPos[9][5]);
if(Pos[0] == PokretnaSlovaPos[9][0]) MoveDynamicObject(PokretnaSlova, PokretnaSlovaPos[10][0], PokretnaSlovaPos[10][1], PokretnaSlovaPos[10][2], 1.0, PokretnaSlovaPos[10][3], PokretnaSlovaPos[10][4], PokretnaSlovaPos[10][5]);
if(Pos[0] == PokretnaSlovaPos[10][0]) MoveDynamicObject(PokretnaSlova, PokretnaSlovaPos[11][0], PokretnaSlovaPos[11][1], PokretnaSlovaPos[11][2], 1.0, PokretnaSlovaPos[11][3], PokretnaSlovaPos[11][4], PokretnaSlovaPos[11][5]);
if(Pos[0] == PokretnaSlovaPos[11][0]) MoveDynamicObject(PokretnaSlova, PokretnaSlovaPos[0][0], PokretnaSlovaPos[0][1], PokretnaSlovaPos[0][2], 1.0, PokretnaSlovaPos[0][3], PokretnaSlovaPos[0][4], PokretnaSlovaPos[0][5]);
}
return 1;
}
[/pawn]
U slucaju da neko slovo zabode ili dodje do nekih problema, u slucaju laga i sl mozete i da uradite komandu koja ce pozvati ovu funkciju za vracanje slova na pocetne polozaje.
[pawn]
forward ResetSlova();
public ResetSlova()
{
for(new i = 0; i < 12; i++)
{
MoveDynamicObject(PokretnaSlova, PokretnaSlovaPos- , PokretnaSlovaPos[1], PokretnaSlovaPos[2], 1.0, PokretnaSlovaPos[3], PokretnaSlovaPos[4], PokretnaSlovaPos[5]);
}
return 1;
}
[/pawn]
Kratko i lako, ali opet za neke bez logike komplikovano. Hvala na paznji i izvinjavam se na mogucim greskicama hehe :D
Lepo uradjeno.
OdliÄno. :D