Započeo P47R14RCH
•2. Jan. 2020.Kako je kreirana optimizovana verzija ProxDetector funkcije
3,675
pregleda
17
postova
Street Runner
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
90 / 100 XP
Početnik(0)
20
Postovi:
1
Teme:
Pridružio se:Dec. 2019
2. Jan. 2020.
- ProxDetector -
ProxDetector
Krajnji cilj ove funkcije jeste da igračima u određenom radiusu u kom se neki igrač nalazi pošalje poruku (SendClientMessage).
Svi misle da je to obična poruka i oni je koriste sa ovim bojama: PROX, PROX, PROX, PROX, PROX
Zašto onda uopšte postoji ova funkcija i malo kompleksnija matematika unutar nje ako ćete vi samo roknuti 5 istih boja?
Cilj ove funkcije je RolePlay chat zapravo ima neki smisao pa umesto 5 istih boja, stavite PLUM (PROX) boju od svetlije ka tamnijoj.
Što je igrač bliže igraču - to je boja svetlija.
Što je igrač dalje od mete - to je boja tamnija i daje simboliku da je igrač udaljen.
y_colours.inc X11_PLUM_5, X11_PLUM_4, X11_PLUM_3, X11_PLUM_2, X11_PLUM_1
( možda je i obrnuto, testiraj, nisam odavno palio SAMP jbg a ne ide mi matematika hehe )
ProxDetector koji Vi koristite (UP/SA editori yay)
public ProxDetector(Float:radi, playerid, string[],c1,c2,c3,c4,c5)
{
if(IsPlayerConnected(playerid))
{
new Float:pPosX, Float:pPosY, Float:pPosZ;
new Float:oldpPosX, Float:oldpPosY, Float:oldpPosZ;
new Float:tmpPosX, Float:tmpPosY, Float:tmpPosZ;
GetPlayerPos(playerid, oldpPosX, oldpPosY, oldpPosZ);
foreach(Player,i)
{
if(IsPlayerConnected(i))
{
if(GetPlayerVirtualWorld(playerid) == GetPlayerVirtualWorld(i))
{
GetPlayerPos(i, pPosX, pPosY, pPosZ);
tmpPosX = (oldpPosX -pPosX);
tmpPosY = (oldpPosY -pPosY);
tmpPosZ = (oldpPosZ -pPosZ);
if(((tmpPosX < radi/16) && (tmpPosX > -radi/16)) && ((tmpPosY < radi/16) && (tmpPosY > -radi/16)) && ((tmpPosZ < radi/16) && (tmpPosZ > -radi/16)))
{
SendClientMessage(i, c1, string);
}
else if(((tmpPosX < radi/8) && (tmpPosX > -radi/8)) && ((tmpPosY < radi/8) && (tmpPosY > -radi/8)) && ((tmpPosZ < radi/8) && (tmpPosZ > -radi/8)))
{
SendClientMessage(i, c2, string);
}
else if(((tmpPosX < radi/4) && (tmpPosX > -radi/4)) && ((tmpPosY < radi/4) && (tmpPosY > -radi/4)) && ((tmpPosZ < radi/4) && (tmpPosZ > -radi/4)))
{
SendClientMessage(i, c3, string);
}
else if(((tmpPosX < radi/2) && (tmpPosX > -radi/2)) && ((tmpPosY < radi/2) && (tmpPosY > -radi/2)) && ((tmpPosZ < radi/2) && (tmpPosZ > -radi/2)))
{
SendClientMessage(i, c4, string);
}
else if(((tmpPosX < radi) && (tmpPosX > -radi)) && ((tmpPosY < radi) && (tmpPosY > -radi)) && ((tmpPosZ < radi) && (tmpPosZ > -radi)))
{
SendClientMessage(i, c5, string);
}
} }
}
}
return 1;
}Ova funkcija je Veoma loše napisana ali matematičke funkcije unutar nje su sasvim u redu.
Samim tim sam odlučio da napišem mnogo bolju funkciju, pored OGROMNOG ubraznja, dobili ste i args deo da ne morate za svaku poruku praviti novi string i formatirati isti 😄
ProxDetector koji sam ja napisao (matematika je ista!!)
ProxDetector(Float:radius, playerid, const input[], c1, c2, c3, c4, c5, va_args<>)
{
new
string,
Float:pPosX,
Float:pPosY,
Float:pPosZ,
Float:oldpPosX,
Float:oldpPosY,
Float:oldpPosZ,
Float:tmpPosX,
Float:tmpPosY,
Float:tmpPosZ;
va_format(string, sizeof string, input, va_start<8>);
GetPlayerPos(playerid, oldpPosX, oldpPosY, oldpPosZ);
foreach(new i : StreamedPlayer)
{
GetPlayerPos(i, pPosX, pPosY, pPosZ);
tmpPosX = (oldpPosX -pPosX);
tmpPosY = (oldpPosY -pPosY);
tmpPosZ = (oldpPosZ -pPosZ);
if(((tmpPosX < radi/16) && (tmpPosX > -radi/16)) && ((tmpPosY < radi/16) && (tmpPosY > -radi/16)) && ((tmpPosZ < radi/16) && (tmpPosZ > -radi/16)))
{
SendClientMessage(i, c1, string);
}
else if(((tmpPosX < radi/8) && (tmpPosX > -radi/8)) && ((tmpPosY < radi/8) && (tmpPosY > -radi/8)) && ((tmpPosZ < radi/8) && (tmpPosZ > -radi/8)))
{
SendClientMessage(i, c2, string);
}
else if(((tmpPosX < radi/4) && (tmpPosX > -radi/4)) && ((tmpPosY < radi/4) && (tmpPosY > -radi/4)) && ((tmpPosZ < radi/4) && (tmpPosZ > -radi/4)))
{
SendClientMessage(i, c3, string);
}
else if(((tmpPosX < radi/2) && (tmpPosX > -radi/2)) && ((tmpPosY < radi/2) && (tmpPosY > -radi/2)) && ((tmpPosZ < radi/2) && (tmpPosZ > -radi/2)))
{
SendClientMessage(i, c4, string);
}
else if(((tmpPosX < radi) && (tmpPosX > -radi)) && ((tmpPosY < radi) && (tmpPosY > -radi)) && ((tmpPosZ < radi) && (tmpPosZ > -radi)))
{
SendClientMessage(i, c5, string);
}
}
return 1;
}Ovde je jedina promena koja je odgovorna za ovo ogromno ubrzanje StreamedPlayer iterator, njega već imate ukoliko koristite y_iterate.
To znači da umesto da loopujemo kroz sve igrače na serveru, mi ćemo loopovati samo kroz one u blizini igrača tj samo one koje igrač može da vidi (učitane/streamovane igrače)
Ovo nisam benchmarkovao jer je ubrzanje očigledno - umesto da loopujete kroz npr 283 igrača, Vi loopujete kroz 4 slota unutar iteratora, i budala vidi razliku 😄
Takođe, funkcija koju vi koristite ima proveru za VW i INT ali ovde to nije potrebno jer je u pitanju callback za streamovanje igrača tako da se podrazumeva da su u istom INT/VW, opet ogromno ubrzanje, možda čak i veće nego od ovog da ne morate loop kroz sve igrače 🙂
Nisam compile ali ako ne bude bacalo errore/warninge funkcija 99.9% radi, ovih 0.1% su da imate pogrešne verzije include-a 😄
EDIT: Ako budeš koristio ostavi neki kredit il' se za'fali, nemo si cig... ovaj cicija 😐
Forum Don
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP Doprinos5
Aktivan Član
192 / 250 XP
Početnik(7)
6,035
Postovi:
88
Teme:
Pridružio se:Okt. 2018
2. Jan. 2020.
Ako ćemo gledati po roleplay-u funckija za boje nije uopste potrebna,to je totalno beskorisno za rpere,ali dobro posto su nasi svi serveri "rp" moze proći.
Što se tice ostalog dijela,svakako gj za to 😉
Što se tice ostalog dijela,svakako gj za to 😉
Street Runner
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
90 / 100 XP
Početnik(0)
20
Postovi:
1
Teme:
Pridružio se:Dec. 2019
2. Jan. 2020.
Galardo wrote on January 2, 2020, 1:25 pm:
Ako ćemo gledati po roleplay-u funckija za boje nije uopste potrebna,to je totalno beskorisno za rpere,ali dobro posto su nasi svi serveri "rp" moze proći.
Što se tice ostalog dijela,svakako gj za to 😉
Što se tice ostalog dijela,svakako gj za to 😉
Nije beskorisna, jer umesto da kreirate simple radius check Vi i dalje koristite ovo, čemu onda sva ova matematika ako je nećete koristiti, onda samo usporava...?
I nije beskorino, veruj mi, kada uđeš na server i kada neko napiše poruku u IC chatu ili /me /do tačno se vidi po boji poruke da li je blizu tebe ili dalje, da znaš dal treba da bežiš ili RPa sa nekim drugim 😄
Forum Don
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP Doprinos5
Aktivan Član
192 / 250 XP
Početnik(7)
6,035
Postovi:
88
Teme:
Pridružio se:Okt. 2018
2. Jan. 2020.
Nisi me baš najbolje shvatio,sto se tice radiusa,to je okej,kad vec mozes proći kroz 5 igraca a ne kroz sve...
Za rp kod nas to ne bi proslo,jer nasi "rperi" bi rpali sa likom koji je u drugom gradu,a kamoli da je blizu njega,ovo treba strancima,nazalost,ne nama.
Za rp kod nas to ne bi proslo,jer nasi "rperi" bi rpali sa likom koji je u drugom gradu,a kamoli da je blizu njega,ovo treba strancima,nazalost,ne nama.
Street Runner
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
90 / 100 XP
Početnik(0)
20
Postovi:
1
Teme:
Pridružio se:Dec. 2019
2. Jan. 2020.
Galardo wrote on January 2, 2020, 1:36 pm:
Nisi me baš najbolje shvatio,sto se tice radiusa,to je okej,kad vec mozes proći kroz 5 igraca a ne kroz sve...
Za rp kod nas to ne bi proslo,jer nasi "rperi" bi rpali sa likom koji je u drugom gradu,a kamoli da je blizu njega,ovo treba strancima,nazalost,ne nama.
Za rp kod nas to ne bi proslo,jer nasi "rperi" bi rpali sa likom koji je u drugom gradu,a kamoli da je blizu njega,ovo treba strancima,nazalost,ne nama.
Ma ja sam ovo objavio samo iz razloga jer već koristite ProxDetector, slobodno vi nastavite koristiti 5 PROX boja, nije to poenta nego je stvar da je mnogo brže zbog iteratora i ne proveravaš VW/INT, bar može poslužiti kao primer ako ništa 😄
Godfather
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
240 / 250 XP
Početnik(0)
1,514
Postovi:
58
Teme:
Pridružio se:Nov. 2016
Street Runner
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
90 / 100 XP
Početnik(0)
20
Postovi:
1
Teme:
Pridružio se:Dec. 2019
2. Jan. 2020.
androo wrote on January 2, 2020, 2:49 pm:
welcome back xd
na coi sam vidio da ja boja chata drugacija kada se udaljis od igraca al nisam znao kako su to napravili.. dobar tutorijal
na coi sam vidio da ja boja chata drugacija kada se udaljis od igraca al nisam znao kako su to napravili.. dobar tutorijal
Ne mora da znači da je tako, može i dosta bolje ali ovo nije poenta tog tutoriala haha 😄
cR = float(color >> 24 & 0xFF);
cG = float(color >> 16 & 0xFF);
cB = float(color >> 8 & 0xFF);I onda posle floatround sa range & ratio but priv8 😄
Underboss
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
240 / 250 XP
Početnik(0)
617
Postovi:
63
Teme:
Pridružio se:Jul 2015
8. Maj 2020.
C:\Users\waz_d\Desktop\Server\gamemodes\mode.pwn(4272) : error 017: undefined symbol "StreamedPlayer@YSII_Ag"
C:\Users\waz_d\Desktop\Server\gamemodes\mode.pwn(4272) : warning 215: expression has no effect
C:\Users\waz_d\Desktop\Server\gamemodes\mode.pwn(4272) : error 001: expected token: ")", but found ";"
C:\Users\waz_d\Desktop\Server\gamemodes\mode.pwn(4272) : error 036: empty statement
C:\Users\waz_d\Desktop\Server\gamemodes\mode.pwn(4272) : fatal error 107: too many error messages on one line
Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
4 Errors.Zna neko do cega je?Shot Caller
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
90 / 100 XP
Početnik(0)
101
Postovi:
11
Teme:
Pridružio se:Maj 2020
8. Maj 2020.
Slav wrote on May 8, 2020, 12:39 am:
C:\Users\waz_d\Desktop\Server\gamemodes\mode.pwn(4272) : error 017: undefined symbol "StreamedPlayer@YSII_Ag"
C:\Users\waz_d\Desktop\Server\gamemodes\mode.pwn(4272) : warning 215: expression has no effect
C:\Users\waz_d\Desktop\Server\gamemodes\mode.pwn(4272) : error 001: expected token: ")", but found ";"
C:\Users\waz_d\Desktop\Server\gamemodes\mode.pwn(4272) : error 036: empty statement
C:\Users\waz_d\Desktop\Server\gamemodes\mode.pwn(4272) : fatal error 107: too many error messages on one line
Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
4 Errors.Zna neko do cega je?Moraš da imaš y_iterare included ali ne preporučujem da koristiš ovo jer ću sutra da release-am sve što imam! 🙂
Shot Caller
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
90 / 100 XP
Početnik(0)
101
Postovi:
11
Teme:
Pridružio se:Maj 2020
8. Maj 2020.
Slav wrote on May 8, 2020, 1:48 am:
Probao sam sve verzije y_iterate nekoliko puta sam mjenjao komplet pawno i opet isto, pricekat cu sutra 😄
Uh, poprilično sam siguran da je ovo default iterator tj da ga YSI po defaultu poseduje...
Svakako čekaj sutra ujutru da ne palim PC sada
Morate biti prijavljeni da biste odgovorili na ovu temu.
Prijava



