Započeo PabloK
•8. Maj 2020.Realan RolePlay Chat (ProxDetector opt.)
2,961
pregleda
5
postova
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.
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, $1I 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 😄)
Wheel Man
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
90 / 100 XP
Početnik(0)
40
Postovi:
2
Teme:
Pridružio se:Maj 2020
Shot Caller
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
90 / 100 XP
Početnik(0)
171
Postovi:
11
Teme:
Pridružio se:Mar. 2020
Enforcer
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
40 / 100 XP
Početnik(0)
303
Postovi:
7
Teme:
Pridružio se:Jul 2018
Morate biti prijavljeni da biste odgovorili na ovu temu.
Prijava