Realan RolePlay Chat (ProxDetector opt.)

Započeo PabloK
8. Maj 2020.
2,929
pregleda
5
postova
PabloK
4
Shot Caller
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
23. Maj 2020.
Bravo ja :flush:
ZmajkoPawno2k13
4
Shot Caller
3. Jun 2020.
a lepo je  😄
Diler Cvaraka
4
Enforcer
4. Jun 2020.
ZmajkoPawno wrote on June 3, 2020, 2:34 am:
a lepo je  😄
Simić
4
Shot Caller
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