Balkan SA:MP

PAWN skriptanje, gamemodovi, filterskripte, include fajlovi, mape, pluginovi => Razgovor u vezi PAWN - skriptanja => Temu započeo: petarsimic poslato Mart 04, 2019, 16:01:09 POSLE PODNE

Naslov: Pomoc ok text draw !
Poruka od: petarsimic poslato Mart 04, 2019, 16:01:09 POSLE PODNE
Problem:Moze mi neko reci kako da naprimer ovo TextDrawSetPreviewModel(TDEditor_TD[3], PlayerInfo[playerid][pSkin]); da napravim da se stalno radnja ponavlja u koji public da stavim da vi se ta radnja uvek ponavljala ?
Slika ili video probemNije obavezno uikoliko nije INGame problem !
Naslov: Odg: Pomoc ok text draw !
Poruka od: [][] Foxy 2k19 [][] poslato Mart 04, 2019, 17:18:41 POSLE PODNE
stock Update_Skin(playerid, skinid)
{
   SetPlayerSkin(playerid, skinid);
   if(UlogovanProvera[playerid] == 1)
   {
       if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
       {
          PlayerTextDrawSetPreviewModel(playerid, SkinIgraca[playerid], GetPlayerSkin(playerid));
       }
       else
       {
          PlayerTextDrawHide(playerid, SkinIgraca[playerid]);
          PlayerTextDrawSetPreviewModel(playerid, SkinIgraca[playerid], GetPlayerSkin(playerid));
          PlayerTextDrawShow(playerid, SkinIgraca[playerid]);
       }
   }
   return true;
}


forward PromeniSkin(playerid);
public PromeniSkin(playerid)
{
   PlayerTextDrawHide(playerid, SkinIgraca[playerid]);
   PlayerTextDrawSetPreviewModel(playerid, SkinIgraca[playerid], GetPlayerSkin(playerid));
     PlayerTextDrawShow(playerid, SkinIgraca[playerid]);
   return 1;
}


probaj to meni radi  :D
Naslov: Odg: Pomoc ok text draw !
Poruka od: [][] Foxy 2k19 [][] poslato Mart 04, 2019, 17:21:55 POSLE PODNE
P.S Ukloni ako hoces UlogovanProvera jer koristim SA mod pa je tako definisano ...  :D
Naslov: Odg: Pomoc ok text draw !
Poruka od: Darkic poslato Mart 04, 2019, 17:54:58 POSLE PODNE
Napravis novi public i preko timera ponavljas radnju
Naslov: Odg: Pomoc ok text draw !
Poruka od: --Lood-- poslato Mart 04, 2019, 18:07:08 POSLE PODNE
evo ti globalni timer old school programing xD
medju deklariacijom dodaj
new GlobalTDTimer;

[pawn]
public UpdateTDSkin(playerid)
{

if(IsPlayerConnected(playerid))
{
TextDrawSetPreviewModel(TDEditor_TD[3], PlayerInfo[playerid][pSkin]);


}

}

[/pawn]
u on gamemodeinit dodaj
[pawn]
for(new vi=0;vi<=MAX_PLAYERS;vi++)
{
GlobalTDTimer=SetTimer(UpdateTDSkin(vi), 1000, true);

}

[/pawn]
ongamemodeexit
[pawn]

KillTimer(GlobalTDTimer);
[/pawn]

Objasnjenje:
Timer: Svakh 1000ms (1sec) ce pozvati public UpdateTDSkin, odnosno updateovace TextDraw



Naslov: Odg: Pomoc ok text draw !
Poruka od: --Lood-- poslato Mart 04, 2019, 18:09:04 POSLE PODNE
I potrudi se da ti je MAX_PLAYERS uvjek = broju slotova servera, iz razloga posto vjerujem da imas dosta ovakvih timera, znaci da ti ne bi pozivo timere tipa 50+ a tebi maksimalno moze 50 igraca
Naslov: Odg: Pomoc ok text draw !
Poruka od: xLanmi poslato Mart 04, 2019, 18:14:38 POSLE PODNE
Optimizacija vam je losa preko timera :)
Jer ga poziva svaki put a to je apsolutno nepotrebno

Uradis ovako


[pawn]stock Skin_Refresh(targetID, targetSkin, usedFor) {
// targetID ti je tipa playerid ili id igraca kom zelis da refreshas skin
// targetSkin ti je id skina koji zelis
// usedfor - 1 ako zelis da rucno podesavas skin koji ce mu se prikazati - 2 ako zelis globalno - da cita bilo koji skin
// Tipa da pozoves ovako funkciju Skin_Refresh(playerid, 294, 1); - Ovo znaci igracu na tdu staviti skin 294
if(usedfor == 1 ) {
  TextDrawHideForPlayer(targetID, TDEditor_TD[3]);
  TextDrawSetPreviewModel(TDEditor_TD[3], targetSkin);
  TextDrawShowForPlayer(targetID, TDEditor_TD[3]); 
}
else if(usedfor == 2) {
  TextDrawHideForPlayer(targetID, TDEditor_TD[3]);
  TextDrawSetPreviewModel(TDEditor_TD[3], GetPlayerSkin(targetID));
  TextDrawShowForPlayer(targetID, TDEditor_TD[3]); 
}
return true;
}
[/pawn]
Sada se ti malo igraj u skripti isprobaj ovo. Nije greska ni uraditi preko timera, ali na vise igraca tipa 200+ osetice se taj lag a mozda cak i manje igraca ako kod nije optimizovan ,

Naslov: Odg: Pomoc ok text draw !
Poruka od: --Lood-- poslato Mart 04, 2019, 18:21:39 POSLE PODNE
Citat: LANMY.pwN poslato Mart 04, 2019, 18:14:38 POSLE PODNE
Optimizacija vam je losa preko timera :)
Jer ga poziva svaki put a to je apsolutno nepotrebno

Uradis ovako


[pawn]stock Skin_Refresh(targetID, targetSkin, usedFor) {
// targetID ti je tipa playerid ili id igraca kom zelis da refreshas skin
// targetSkin ti je id skina koji zelis
// usedfor - 1 ako zelis da rucno podesavas skin koji ce mu se prikazati - 2 ako zelis globalno - da cita bilo koji skin
// Tipa da pozoves ovako funkciju Skin_Refresh(playerid, 294, 1); - Ovo znaci igracu na tdu staviti skin 294
if(usedfor == 1 ) {
  TextDrawHideForPlayer(targetID, TDEditor_TD[3]);
  TextDrawSetPreviewModel(TDEditor_TD[3], targetSkin);
  TextDrawShowForPlayer(targetID, TDEditor_TD[3]); 
}
else if(usedfor == 2) {
  TextDrawHideForPlayer(targetID, TDEditor_TD[3]);
  TextDrawSetPreviewModel(TDEditor_TD[3], GetPlayerSkin(targetID));
  TextDrawShowForPlayer(targetID, TDEditor_TD[3]); 
}
return true;
}
[/pawn]
Sada se ti malo igraj u skripti isprobaj ovo. Nije greska ni uraditi preko timera, ali na vise igraca tipa 200+ osetice se taj lag a mozda cak i manje igraca ako kod nije optimizovan ,


Pa znam ali kako ce pozvati taj callback
ps: nije da se ne slazem sa tobom, zbog toga  sam mu rekao da pazi uvjek da mu je MAX_PLAYERS = broju slotova, takodje napravio sam provjeru isplayerconnected, sto znaci da ce pozvati funkciju ali nece radit nsita sa nje jer npr ima 30 igraca id 31 nije conneted, sto opet znaci da mu nece stvarat lag smetnju i slicno, bio bi mu problem da nema ovoga IsPlayerConnected
Najbolje mozda rjsenje je timer po igracu znaci 200 igraca 200 timera, ili najnajnajbolje rjesenje je da koristi neki od mog i tvog callback pri svakoj komandi
tipa
/setskin pa pozove fukcniu
I na sve ostale sto ima veze sa skinom
EDIT : evo najbolje rjesenje

public LooD_SetPlayerSkin(playerid, skinid)
{
SetPlayerSkin(playerid, skinid);
PlayerInfo[playerid][pSkin]= skinid;
TextDrawSetPreviewModel(TDEditor_TD[3], skinid);
return 1;
}


i sada CTRL+H
Zamjenis sve SetPlayerSkin, sa LooD_SetPlayerSkin
Naslov: Odg: Pomoc ok text draw !
Poruka od: Terza Lazarevic poslato Mart 04, 2019, 18:23:22 POSLE PODNE
Citat: LANMY.pwN poslato Mart 04, 2019, 18:14:38 POSLE PODNE
Optimizacija vam je losa preko timera :)
Jer ga poziva svaki put a to je apsolutno nepotrebno

Uradis ovako


[pawn]stock Skin_Refresh(targetID, targetSkin, usedFor) {
// targetID ti je tipa playerid ili id igraca kom zelis da refreshas skin
// targetSkin ti je id skina koji zelis
// usedfor - 1 ako zelis da rucno podesavas skin koji ce mu se prikazati - 2 ako zelis globalno - da cita bilo koji skin
// Tipa da pozoves ovako funkciju Skin_Refresh(playerid, 294, 1); - Ovo znaci igracu na tdu staviti skin 294
if(usedfor == 1 ) {
  TextDrawHideForPlayer(targetID, TDEditor_TD[3]);
  TextDrawSetPreviewModel(TDEditor_TD[3], targetSkin);
  TextDrawShowForPlayer(targetID, TDEditor_TD[3]); 
}
else if(usedfor == 2) {
  TextDrawHideForPlayer(targetID, TDEditor_TD[3]);
  TextDrawSetPreviewModel(TDEditor_TD[3], GetPlayerSkin(targetID));
  TextDrawShowForPlayer(targetID, TDEditor_TD[3]); 
}
return true;
}
[/pawn]
Sada se ti malo igraj u skripti isprobaj ovo. Nije greska ni uraditi preko timera, ali na vise igraca tipa 200+ osetice se taj lag a mozda cak i manje igraca ako kod nije optimizovan ,

i tebi je isto odlicna optimizacija
Naslov: Odg: Pomoc ok text draw !
Poruka od: xLanmi poslato Mart 04, 2019, 18:25:09 POSLE PODNE
Citat: --Lood-- poslato Mart 04, 2019, 18:21:39 POSLE PODNE
Pa znam ali kako ce pozvati taj callback
ps: nije da se ne slazem sa tobom, zbog toga  sam mu rekao da pazi uvjek da mu je MAX_PLAYERS = broju slotova, takodje napravio sam provjeru isplayerconnected, sto znaci da ce pozvati funkciju ali nece radit nsita sa nje jer npr ima 30 igraca id 31 nije conneted, sto opet znaci da mu nece stvarat lag smetnju i slicno, bio bi mu problem da nema ovoga IsPlayerConnected
Najbolje mozda rjsenje je timer po igracu znaci 200 igraca 200 timera, ili najnajnajbolje rjesenje je da koristi neki od mog i tvog callback pri svakoj komandi
tipa
/setskin pa pozove fukcniu
I na sve ostale sto ima veze sa skinom


Ako koristi timer a tipa ima ih dosta osetice se lag jer se timer ne koristi za svaku glupost :D , ovo i treba da odradi preko ovog mog callbacka, iz razloga zato sto mu je to najlakse tako da odradi , i da nema brige sa tim, ne treba se raditi timer za skin jer nek pozove svuda gde ima SetPlayerSkin ovu funkciju sto sam odradio i to je to :)
Naslov: Odg: Pomoc ok text draw !
Poruka od: xLanmi poslato Mart 04, 2019, 18:27:31 POSLE PODNE
Citat: _terza_ poslato Mart 04, 2019, 18:23:22 POSLE PODNE
i tebi je isto odlicna optimizacija

@_terza_  da se nadovezem, uradio sam mu da shvati a ne da ne shvati ;) Ovo je pomoc onima koji ne znaju ,a ne da pravim svemirski brod za vas koji sve "ZNATE" , tako da ono ;)

Naslov: Odg: Pomoc ok text draw !
Poruka od: --Lood-- poslato Mart 04, 2019, 18:29:05 POSLE PODNE
evo da ponovo zalijepim edit poruke
EDIT : evo najbolje rjesenje

public LooD_SetPlayerSkin(playerid, skinid)
{
SetPlayerSkin(playerid, skinid);
PlayerInfo[playerid][pSkin]= skinid;
TextDrawSetPreviewModel(TDEditor_TD[3], skinid);
return 1;
}
sve sto ima veze sa skinom stavlja u ovaj callback i rjesen problem

i sada CTRL+H
Zamjenis sve SetPlayerSkin, sa LooD_SetPlayerSkin
Naslov: Odg: Pomoc ok text draw !
Poruka od: xLanmi poslato Mart 04, 2019, 18:32:21 POSLE PODNE
Citat: --Lood-- poslato Mart 04, 2019, 18:29:05 POSLE PODNE
evo da ponovo zalijepim edit poruke
EDIT : evo najbolje rjesenje

public LooD_SetPlayerSkin(playerid, skinid)
{
SetPlayerSkin(playerid, skinid);
PlayerInfo[playerid][pSkin]= skinid;
TextDrawSetPreviewModel(TDEditor_TD[3], skinid);
return 1;
}
sve sto ima veze sa skinom stavlja u ovaj callback i rjesen problem

i sada CTRL+H
Zamjenis sve SetPlayerSkin, sa LooD_SetPlayerSkin

EDIT & Objasnjenje : Zaboravio si Hide i Show  TDEditor_TD[3] iz razloga jer SetPreviewModel nece da radi bez toga :D

Tvoja funkcija treba da izgleda ovako

[pawn]public LooD_SetPlayerSkin(playerid, skinid)
{
SetPlayerSkin(playerid, skinid);
PlayerInfo[playerid][pSkin]= skinid;
TextDrawHideForPlayer(playerid, TDEditor_TD[3]);
TextDrawSetPreviewModel(TDEditor_TD[3], skinid);
TextDrawShowForPlayer(playerid, TDEditor_TD[3]);
return 1;
}[/pawn]
Naslov: Odg: Pomoc ok text draw !
Poruka od: imnaithan poslato Mart 04, 2019, 18:43:52 POSLE PODNE
@LANMY.pwN  @--Lood-- 

Obojica imate pravo , svaki na svoj nacin , no kako nije ovo moja oblast , necu mnogo komentarisati !

@Tema  , samo ce te zbuniti ovk...


Koristi ovo , neces imati problem !


[pawn]public LooD_SetPlayerSkin(playerid, skinid)
{
SetPlayerSkin(playerid, skinid);
PlayerInfo[playerid][pSkin]= skinid;
TextDrawHideForPlayer(playerid, TDEditor_TD[3]);
TextDrawSetPreviewModel(TDEditor_TD[3], skinid);
TextDrawShowForPlayer(playerid, TDEditor_TD[3]);
return 1;
}[/pawn]


Pawn Code Credits | @--Lood--
Naslov: Odg: Pomoc ok text draw !
Poruka od: youngdeal poslato Mart 04, 2019, 18:50:39 POSLE PODNE
i stavi taj TDEditor_TD[3] textdraw da je player jer ako ovako budeš znaci npr men se promijeni skin i men prikaze taj skin na tdu i onda ja teb promijenim skin i men ce bit na tdu taj skin
Naslov: Odg: Pomoc ok text draw !
Poruka od: Vasic poslato Mart 04, 2019, 19:11:51 POSLE PODNE
dodas ga pod funkciju OnPlayerUpdate ili jednostavno napravis timer tipa:
[pawn]forward imenujtimer( playerid ); public imenujtimer( playerid ) { TextDrawSetPreviewModel(TDEditor_TD[3], PlayerInfo[playerid][pSkin]); return 1; } [/pawn]
i sad dodas pod OnGameModeInit: [pawn]SetTimer("imenujtimer", 10000, true);[/pawn]
Naslov: Odg: Pomoc ok text draw !
Poruka od: bunta poslato Mart 04, 2019, 19:27:31 POSLE PODNE
no pls, nemas potrebu uopste da svake sekunde ili ako poslusas vasica 40-50 puta u sekundi update-tujes neciji textdraw, lakse ti je ovako
ctrl h SetPlayerSkin, replace with gibanica_SetPlayerSkin i onda ubacis ovo negde u skriptu i resis problem, nema tajmera i tolko....

gibanica_SetPlayerSkin(playerid, skinid)
{
TextDrawHideForPlayer(playerid, TDEditor_TD[3]);
SetPlayerSkin(playerid, skinid);
TextDrawSetPreviewModel(TDEditor_TD[3], skinid);
TextDrawShowForPlayer(playerid, TDEditor_TD[3]);
TogglePlayerControllable(playerid, true);
}

nisam probao, trebalo bi da radi na telefonu sam, javi sta si uradio xd
Naslov: Odg: Pomoc ok text draw !
Poruka od: Terza Lazarevic poslato Mart 05, 2019, 11:00:23 PRE PODNE
Citat: LANMY.pwN poslato Mart 04, 2019, 18:27:31 POSLE PODNE
@_terza_  da se nadovezem, uradio sam mu da shvati a ne da ne shvati ;) Ovo je pomoc onima koji ne znaju ,a ne da pravim svemirski brod za vas koji sve "ZNATE" , tako da ono ;)
lepo je to što pomažeš i draže mi je tebe da vidim ovde nego startere, nemaš potrebe citirati reči