Realan RolePlay Chat (ProxDetector opt.)

Započeo PabloK
•8. Maj 2020.
2,961
pregleda
5
postova
PabloK
4
Shot Caller
Balkan SA:MPBalkan SA:MP
SA-MP DoprinosSA-MP Doprinos
8. Maj 2020.
ProxDetector


Šta je ProxDetector?
ProxDetector je funkcija koja se koristi (čitaj bi trebalo da se koristi) na RolePlay serverima.


Kako on funkcioniše?
ProxDetector ima jednu svrhu - da svim igračima oko igrača koji vrši neku akciju (npr /me /do) pošalje poruku.
Boja poruke varira od toga koliko je igrač udaljen od igrača koji vrši neku radnju (što je igrač dalje - to boja više menja svoju nijansu).


Kako je on napisan?
#include 
#include //YSI 5.x

stock ProxDetector(playerid, Float:max_range, color, const string[], va_args<>)
{
new
f_string,
Float:pos_x,
Float:pos_y,
Float:pos_z,
Float:range,
Float:range_ratio,
Float:range_with_ratio,
clr_r, clr_g, clr_b,
Float:color_r, Float:color_g, Float:color_b;

if (!GetPlayerPos(playerid, pos_x, pos_y, pos_z)) {
return 0;
}

va_format(f_string, sizeof(f_string), string, va_start<4>);

color_r = float(color >> 24 & 0xFF);
color_g = float(color >> 16 & 0xFF);
color_b = float(color >> 8 & 0xFF);
range_with_ratio = max_range * 1.6;

foreach (new i : StreamedPlayer)
{
range = GetPlayerDistanceFromPoint(i, pos_x, pos_y, pos_z);
if (range > max_range) {
continue;
}

range_ratio = (range_with_ratio - range) / range_with_ratio;
clr_r = floatround(range_ratio * color_r);
clr_g = floatround(range_ratio * color_g);
clr_b = floatround(range_ratio * color_b);

SendClientMessage(i, (color & 0xFF) | (clr_b << 8) | (clr_g << 16) | (clr_r << 24), f_string);
}

SendClientMessage(playerid, color, f_string);
return 1;
}



Kako se koristi?
ProxDetector(playerid, 15.0, 0x8e4585AA, "* %s radi neku akciju...", PlayerUsername)



Koristim mod koji ima 200+ ProxDetector-a i koristi format, šta da radim?


Ukoliko je reč o ovom ili sličnom ProxDetectoru (ne mora da ima 5 boja, moze i jednu kao u Ath editima):
ProxDetector(Float:radi, playerid, string[],col1,col2,col3,col4,col5)

Potrebno ja da upalite RegEx (Regular Expression), obicno se nalazi u istom prozoru kao REPLACE opcija, kao dodatak/checkbox,
Search:
.*?format\(.*?,.*?,(.*?)
(.*?)ProxDetector\((.*?),(.*?),(.*?),(.*?),.*

Replace:
$2ProxDetector($4, $3, $6, $1

I svih 100-200-300 koliko vec imate format-a ce nestati i biti smesteni direkt u funkciju!

Ukoliko ne koristite y_iterate ili ukoliko Vam nešto ne funkcioniše, možete da koristite i ovu verziju:
#include 
#include //YSI 5.x

stock ProxDetector(playerid, Float:max_range, color, const string[], va_args<>)
{
new
f_string,
Float:pos_x,
Float:pos_y,
Float:pos_z,
Float:range,
Float:range_ratio,
Float:range_with_ratio,
clr_r, clr_g, clr_b,
Float:color_r, Float:color_g, Float:color_b;

if (!GetPlayerPos(playerid, pos_x, pos_y, pos_z)) {
return 0;
}

va_format(f_string, sizeof(f_string), string, va_start<4>);

color_r = float(color >> 24 & 0xFF);
color_g = float(color >> 16 & 0xFF);
color_b = float(color >> 8 & 0xFF);
range_with_ratio = max_range * 1.6;

foreach (new i : Player)
{
if(!IsPlayerStreamedIn(i, playerid)) {
continue;
}

range = GetPlayerDistanceFromPoint(i, pos_x, pos_y, pos_z);
if (range > max_range) {
continue;
}

range_ratio = (range_with_ratio - range) / range_with_ratio;
clr_r = floatround(range_ratio * color_r);
clr_g = floatround(range_ratio * color_g);
clr_b = floatround(range_ratio * color_b);

SendClientMessage(i, (color & 0xFF) | (clr_b << 8) | (clr_g << 16) | (clr_r << 24), f_string);
}

SendClientMessage(playerid, color, f_string);
return 1;
}


Prva funkcija bi trebalo da bude mnogo brža od druge ali takođe zauzima dodatnih MAX_PLAYERS + MAX_PLAYERS mesta što može praviti problem (a i ne mora) u starijim i loše pisanim skriptama!

Takođe, nisam toliko siguran šta je bolje koristiti, verziju sa ili bez StreamedPlayer-a, verovatno je da što više igrača imate to je StreamedPlayer iterator efikasniji, na primer ukoliko planirate 200-300-400+ aktivnih igrača onda bih Vam preporučio StreamedPlayer verziju, u suprotnom je svejedno (jer i za StreamedPlayer postoji backend unutar YSIa 😄)
Makenzi Dosao Da Kaze Nes
2
Wheel Man
Balkan SA:MPBalkan SA:MP
SA-MP DoprinosSA-MP Doprinos
23. Maj 2020.
Bravo ja :flush:
ZmajkoPawno2k13
4
Shot Caller
Balkan SA:MPBalkan SA:MP
SA-MP DoprinosSA-MP Doprinos
3. Jun 2020.
a lepo je  😄
Diler Cvaraka
4
Enforcer
Balkan SA:MPBalkan SA:MP
SA-MP DoprinosSA-MP Doprinos
4. Jun 2020.
ZmajkoPawno wrote on June 3, 2020, 2:34 am:
a lepo je  😄
Simić
4
Shot Caller
Balkan SA:MPBalkan SA:MP
SA-MP DoprinosSA-MP Doprinos
4. Jun 2020.
Nicee  😁

Morate biti prijavljeni da biste odgovorili na ovu temu.

Prijava

© 2026 SmartShark. All rights reserved.

Powered by Momentum|v2026.3.001 Alpha