SampVoice ( malo slozenije )

Započeo V01D, Februar 03, 2022, 06:29:05 PRE PODNE

prethodna tema - sledeća tema

0 članova i 2 gostiju pregledaju ovu temu.

Samp Voice Tutorial

E ovako, vec dosta vas je sigurno culo za sampvoice, ubacivanje voice chat-a itd..
Odlucio sam da napravim ovaj tutorial opet sa razlogom na ima nesto malo detaljnije objasnjeno na
ovom forumu, pa da sami mozete iskoristiti za nesto svoje.


Pre svega, sta je samp voice?

- Samp voice je plugin i include koji omogucava implementaciju voice chat-a tacnije pricanja unutar samp igre.
- Za samp voice su potrebni server-side ( plugin i include ) i client-side ( fajl koji igrac skida i ubacuje u gta sa )


Za sta se koristi?

- Pricanje ingame, ali njegove mogucnosti su mnogo sire od toga, pored raznih voice kanala koje igraci mogu koristiti,
i dobra stvar ovoga je sto se moze staviti na skoro bilo koju tipku koja postoji na tastaturi


Gde se moze skinuti sampvoice?

https://github.com/CyberMor/sampvoice/releases

Na github linku mozete naci server-side i client-side, kao i source kod client-side dela koji mozete build-ati i napraviti
neku svoju modifikaciju.


Kako da ubacim sampvoice u svoj server?

- Pre svega, u sampvoice pluginu je moguce napraviti 2 vrste stream-a, jedan globalni, drugi lokalni. Globalni nije vezan za lokaciju ili bilo sta slicno,
dok lokalni moze biti vezan za objekat, lokaciju, igraca ili slicno..

- Jako prosto, bice objasnjeno u kodu ispod
- Sada cu sa slicnim koracima objasniti i drugi nacin upotrebe ( oba slucaja cu staviti u jedan kod  i detaljno objasniti unutar koda )
- Na primer, u ovom slucaju zelimo da svaka banda i mafija na serveru imaju poseban voice chat izmedju sebe
- I takodje da mogu da se cuju globalno, bilo gde
- Ovo moze da sluzi kao radio za PD, radio za bande/mafije, moze da se koristi za razne stvari

[pawn]#include <sampvoice> //Prvo negde pri vrhu skripte include-amo sampvoice.inc

#define nekiKey         0x58 //Ovo na sluzi za define KEY-a koji ce igrac pritisnuti za voice chat
#define orgKey         0x42 //Ovo ce nam sluziti kao define za KEY koji ce igras pritiskati za org chat

//Izecemo i u obzir jednu promenljivu kada su u pitanju dinamicne organizacije ( sto vecina modova koristi )
#define MAX_ORG       15 //Na primer

//I takodje uzecemo u obzir clana organizacije kao PlayerInfo[playerid][xClan]

// < ! >

new SV_LSTREAM:lstream[MAX_PLAYERS] = { SV_NULL, ... }; //Deklarisemo lokalni stream gde cemo da ubacujemo igrace koji su u blizini
new SV_GSTREAM:orgStream[MAX_ORG] = { SV_NULL, ... }; //Deklarisemo globalni stream, gde ubacujemo clanove iste organizacije


public SV_VOID:OnPlayerActivationKeyPress(SV_UINT:playerid, SV_UINT:keyid) //Ovo je callback koji se poziva kada igrac pritisne activation key koji smo dodali
{
    if(keyid == nekiKey && lstream[playerid]) SvAttachSpeakerToStream(lstream[playerid], playerid);
    if(keyid == orgKey && orgStream[PlayerInfo[playerid][xClan]]) SvAttachSpeakerToStream(orgStream[PlayerInfo[playerid][xClan]], playerid); //Ako igrac pritisne orgKey, ubacuje ga u voice sa ostalim clanovima svoje organizacije
}

public SV_VOID:OnPlayerActivationKeyRelease(SV_UINT:playerid, SV_UINT:keyid) //Callback gada prestane da ga drzi
{
    if(keyid == nekiKey && lstream[playerid]) SvDetachSpeakerFromStream(lstream[playerid], playerid);
    if(keyid == orgKey && orgStream[PlayerInfo[playerid][xClan]]) SvDetachSpeakerToStream(orgStream[PlayerInfo[playerid][xClan]], playerid); //slican princip kao gore
}

// < ! >

public OnPlayerConnect(playerid) { //Kada se igrac connectuje na server

   if(!SvGetVersion(playerid)) SendClientMessage(playerid, -1, "Nemate validnu verziju SAMPA ( R1 ili R3 ) ili nemate voice chat!"); //Proverava verziju sampa i da li igrac ima voice chat
    else if(!SvHasMicro(playerid)) SendClientMessage(playerid, -1, "Nemate mikrofon za voice chat!"); //provera da li ima mikrofon
    else if((lstream[playerid] = SvCreateDLStreamAtPlayer(40.0, SV_INFINITY, playerid, 0xff0000ff, "L"))) { // red color

        SendClientMessage(playerid, -1, "Voice Chat uspesno ucitan, koristite tipku 'X' za pricanje!");
        SvAddKey(playerid, nekiKey);
        SvAddKey(playerid, orgKey); //Ovde dodajemo key-eve koji ce se koristiti

        //Ukoliko ispuni sve uslove, ubacuje ga u lokalni chat i dodaje key koji smo naveli gore
    }

   return 1;
}

public OnGameModeInit() {

   //Pri ucitavanju organizaciju dodajte sledece ( to mozete naci preko labela ili pickup-a za org u OnGameModeInit )
   orgStream[orgID] = SvCreateGStream(0xffff0000, "ORG CHAT");

   return 1;
}

public OnPlayerDisconnect(playerid) { //kada igrac izadje sa servera

   if(lstream[playerid]) { //Ako se nalazi u lokalnom stream-u
        SvDeleteStream(lstream[playerid]); //Izbacuje ga iz voice chat-a
        lstream[playerid] = SV_NULL;
    }

   return 1;
}

// < ! >
// Sada moramo napraviti nesto cime ce igrac organizacije zapravo da udje u taj stream, moze to da se radi
// Pri connectu ukoliko je igrac clan organizacije, da ga ubaci u taj stream
// I takodje kada zapravo ucitamo njegov account
if(PlayerInfo[playerid][xClan] >= 1) {

   SvAttachListenerToStream(orgStream[PlayerInfo[playerid][xClan]], playerid); //Ubacuje ga u stream organizacije koje je clan
}[/pawn]

Kako promeniti neki key koji zelimo da koristimo?

- KEY-eve mozemo da menjamo koristeci ASCII tabelu i hex vrednosti odredjenih karaktera ( https://www.asciitable.com )
- Sada, sve sto treba da uradimo je da izvucemo hexadecimalnu vrednost karaktera koji zelimo da koristimo
- Primer : Ako zelimo da koristimo slovo 'P' za pokretanje voice chat-a ( https://prnt.sc/26np9lw )
- Isto vazi za svaki karakter, kada smo nasli odgovarajuci broj, dodamo 0x ispred njega i stavimo umesto naseg define-a za key

Zakljucak?

- Interesantan include i plugin koji nije za svakoga. Onaj koji zeli da koristi nadam se da ce pomocu ovoga uspeti da napravi nesto novo i zanimljivo koristeci plugin, posto ima ogroman broj mogucnosti koji koristimo samo kao lokalni chat.. Na GitHub linku imaju prikazane funkcije i za sta zapravo sluze. Sada je ostalo samo na vama na pustite masti na volju i odradimo nesto zanimljivo sa ovim :D <3

Jako jako veliko sranje. Ovo je kao da ubacite neki mod u svoj GTA i kazete da je to na vasem serveru.
Nije u potpunosti server-side dodatak tako da je jako lose za bilo sta. Svakako kvari igru radi male dece jer se ne mozete nikako uziveti.

Citat: bishop. poslato Februar 03, 2022, 13:40:38 POSLE PODNE
Jako jako veliko sranje. Ovo je kao da ubacite neki mod u svoj GTA i kazete da je to na vasem serveru.
Nije u potpunosti server-side dodatak tako da je jako lose za bilo sta. Svakako kvari igru radi male dece jer se ne mozete nikako uziveti.

Zapravo sam i ja mislio tako dok mi dosta igraca nije predlozilo da ubacim. Ja nisam primetio razliku sa i bez voice chat-a. Onaj ko hoce da skine i koristi, ima tu mogucnost.

Moj je predlog da ne koristite ovaj include postoji exploit koji kada se iskoristi padne svima skripta(isprobano).

Citat: Fr0z3n poslato Februar 03, 2022, 21:49:14 POSLE PODNE
Moj je predlog da ne koristite ovaj include postoji exploit koji kada se iskoristi padne svima skripta(isprobano).

Mozda podelis sa ostalima :D ?




Bravo Andrija,dobar posao.Lepo si sve to napravio,ali Yoker ne bi bio Yoker a da ne trazi dlaku u jajetu :D :

Zamerke:

1.Upotreba HEX vrednosti za definisanje tastera:
Upotreba HEX vrednosti za definisanje tastera, kao što je 0x58 za nekiKey, predstavlja nečitak i nepotreban pristup. Ovaj pristup otežava održavanje i razumevanje koda, naročito programerima koji nisu upoznati sa svim HEX vrednostima tastera. Zašto se odstupilo od standardnog i čitljivijeg definisanja tastera?


[pawn]// Primer upotrebe HEX vrednosti za definisanje tastera
#define nekiKey      0x58
#define orgKey       0x42
[/pawn]



2.Korišćenje pojedinačnih promenljivih umesto niza:
Korišćenje pojedinačnih promenljivih, kao što su lstream[playerid], umesto niza predstavlja neefikasan i nepraktičan pristup, posebno u kontekstu igre s velikim brojem igrača. Kako planiras rešiti ovu nepraktičnost, naročito ako broj igrača na serveru raste?

[pawn]// Primer korišćenja pojedinačnih promenljivih za lokalni stream
new SV_LSTREAM:lstream[MAX_PLAYERS];

// Umesto
new SV_LSTREAM:lstream1, lstream2, lstream3, ...;
[/pawn]


3. Nedostatak organizacije koda:
Nedostatak dodatnog nivoa ugnježdenosti funkcija čini kod manje čitljivim i održivim. Zašto nije implementiran dodatni sloj organizacije kako bi se pojednostavilo praćenje logike programa?


[pawn]// Primer nedostatka organizacije koda
public SV_VOID:OnPlayerActivationKeyPress(SV_UINT:playerid, SV_UINT:keyid) {
    HandleLocalStreamKeyPress(playerid, keyid);
    HandleOrganizationStreamKeyPress(playerid, keyid);
}

public SV_VOID:OnPlayerActivationKeyRelease(SV_UINT:playerid, SV_UINT:keyid) {
    HandleLocalStreamKeyRelease(playerid, keyid);
    HandleOrganizationStreamKeyRelease(playerid, keyid);
}
[/pawn]

4. Nedostatak pitanja o performansama:
Nedostatak pitanja ili razmatranja o performansama koda u stvarnom okruženju s velikim brojem igrača ostavlja otvoreno pitanje o skalabilnosti. Kako garantujs efikasnost koda u uslovima visokog opterećenja?

[pawn]// Primer nedostatka pitanja o performansama
// Kako se ovaj kod skalira s povećanjem broja igrača na serveru? Da li su implementirane određene optimizacije radi bolje performanse?
[/pawn]

5.Odsustvo analize alternativnih rešenja:
U 2023. postoji širok spektar modernih tehnologija za voice chat. Zašto si bas opredeljen  za Samp Voice umesto savremenijih rešenja koja mogu pružiti naprednije funkcionalnosti? Da li si sproveo analizu alternativnih tehnologija i razmotrio njihove prednosti i mane?

[pawn]// Primer odsustva analize alternativnih rešenja
// U svetu modernih tehnologija za voice chat, zašto izabrati Samp Voice? Da li postoje određene prednosti ili ograničenja u odnosu na druge rešenja?
[/pawn]


Ovo su moje konkretne primedbe imaju za cilj skrenuti pažnju na određene nedostatke i podstaknuti razmišljanje o potrebi za poboljšanjima u kodu,a ne da bi tebe naruzio kao skriptera.Ljubi brat ,ti od mene imas dozivotan respect i ti si za mene PROGRAMER.Poz ljubi brat,nemoj se ljutiti ovo su moje dobronamerne kritike <3 ;D
Yoker

SAMP 2006-2022


Citat: njoBe_ poslato Februar 10, 2023, 23:11:11 POSLE PODNE
koga boli k za tdove.. pokazi nesto sto server posjeduje od sistema ili generalno funkcionalnost njegovu. ocekujemo update.. gl