Naziv: Monaco RP - Script template
Izvorni (Skripter): realnaith
Slike: GitHub Repo (https://github.com/daniscavalic/monaco-roleplay)
Skripter: Slade (Danis)
Download: GitHub Repo (https://github.com/daniscavalic/monaco-roleplay)
Scan: //
Dodatno:
Iz dosade sam skinuo myserver i počeo da radim na modu. Malo sam fakat i posvetio pažnje pa sam napravio neke stvari u TD-ovima (dealership, char registration) koje su mi i oduzele malo vremena. Kod u nekim segmentima može bolje, poput zajedničkih update funkcija, umjesto da se parametri TD-ova ažuriraju samo po potrebi, ali nije ni loš. Potrebno je završiti dealership sistem (uvezati potvrdom ugovora kupovinu vozila i dodjelu istog igraču) te naravno car ownership sistem sam od sebe (lock vozila, parking, lociranje itd). Mod ima već kreirano čuvanje i funkciju za isto (kao i loadanje).
Mod koristi ORM bazirano čuvanje u SQLu (core je bio ini) pomoću kojeg je omogućeno početnicima koji ne razumiju sql da lako dodaju/spreme neki podatak u neku tabelu, primjer je tu na korisnicima, kao i spremanju/učitavanju vozila.
Kod je separiran u fajlove, ili kao što se kod nas kaže, "modularan :D", svaki fajl ima hookuje ono što mu treba, doduše neki su fajlovi samo biblioteke nekih handlera, dok handleri sami po sebi rade uglavnom neovisno od gamemode-a (osim ako su potrebni neki podatci o igraču).
Ako je ko voljan završiti nedovršeno (otvoriti PR na repou sa izmjenama), nastaviti raditi (forkati/cloneati repo), feel free to do it!
Kada uhvatim vremena možda i sam završim ako ništa ovo započeto, a možda bude i nekog versioninga.
Hvala na kontribuciji, nadam se da ce neko nastaviti ovo dalje i napraviti nesto brutalno, kad vec mi oldtajmeri nemamo volje xD
Vrhunski. 8)
Šta očekivati od tebe brt, veoma dobro za nekoga ko želi pokrenuti nešto ili naučiti nešto novo..
svaka čast i nadam se iskreno da će biti koji update još
daaamn, kod preleep svaka cast ;D
Hvala vam :D Gledat cu da ako nista WIP stvari vremenom azuriram, a mozda bude i versioninga
Kod je predobar, prelepo za oko :D
odlicno odradjeno
melem batoo
Thanks
Odlično, svaka čast
Dobar
Hvala :D
Citat: realnaith poslato April 15, 2023, 00:06:45 PRE PODNE
Hvala na kontribuciji, nadam se da ce neko nastaviti ovo dalje i napraviti nesto brutalno, kad vec mi oldtajmeri nemamo volje xD
Vrhunski. 8)
Ako si ti oldtajmer ja sam Nikola Tesla.
Koncept je dobar. Svidja mi se sto kroz primjere zelite pomoci pocetnicima u skriptanju.
Medjutim, svi pocetnici bi trebali da uce ispravno da pisu kod od pocetka. Razlog tome je da kasnije ne bi morali da se odvikavaju od losih navika (kao sto sam ja morao, kao sto su svi koji su pocetli nesto ranije sa skriptanjem morali zbog nedostatka zainteresovanosti tada iskusnijih skriptera da pomognu na pravi nacin, cast izuzecima).
Par primjera cu navesti:
1. "E_PLAYERS" enum je totalno nepotreban. Ako vec zelis da radis modularan mod u PAWNu postoje static global varijable kojima je scope jedan fajl. Recimo da imamo modul karaktera - "character". Modul karaktera bi trebao da sadrzi neke base statistike karaktera (recimo): novac u dzepu, level, exp. Varijable koje ce cuvati novac, level i exp napravi u scope fajla (static) i napravi getter funkcije za svaku stvar koju zelis share izmedju modula. Prednost ovoga je sto getter funkcija moze u sebi da sadrzi logiku koju bi, bez iste, morao da ponavljas kroz svaki fajl.
2. "bool:Auth(playerid, level)" imena funkcija su bitna. Ime funkcije treba da opisuje ono sto funkcija radi. Ova funkcija provjerava da li je igracev "AdminLevel" veci od zadanog levela. Mnogo bolje ime funkcije bi bilo npr. "IsPlayerAuthorized(playerid, adminLevel)".
3. Tagovi. Da bi simulirali neki type-checking sistem u PAWNu postoje tagovi (neki od njih su npr. PlayerText, Text3D, Text). Prelaskom na open.mp includeove (stdlib) vidjecete da je 90% "magicnih" brojeva tagovano. Dobar primjer u ovom modu bi bila funkcija "GetPlayerMoneyEx(playerid, pay_type = 0)". Parametar "pay_type" bi bio idealan clan da se taguje. Recimo:
enum e_PAY_TYPE {
PAY_TYPE_POCKET,
PAY_TYPE_BANK
};
GetPlayerMoneyEx(playerid, e_PAY_TYPE:pay_type = PAY_TYPE_POCKET) {
//....
}
Razlog je to sto cete kad-tad doci u situaciju da se zapitate da li je 0 novac u dzepu ili novac u banci. Ovo je pogotovo slucaj kada radite na code-base koji je nekoliko desetina (ili stotina) hiljada linija.
4. Izbjegavajte nazivanje funkcije sa sufixima kao sto su "Ex". "Ex" je los sufix i ne govori nam nista o tome sta funkcija konkretno radi. Primjer: "PlayerNameEx(playerid)" -> "ReturnPlayerNameEx(playerid)".
5. Macro:
#define PRESSED(%0) \
( newkeys & %0 == %0 && oldkeys & %0 != %0 )
Ovaj kod je nepravilan. Iako se vama cini da je ovo "(((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))" uzasno zbog zagrada - zagrade su tu sa razlogom.
Praktican primjer:
#define MULTIPLY(%0,%1) %0*%1
new result = ADD(4 + 1, 2); // Ocekujemo: (4+1)*2=5*2=10, a dobicemo: 4+1*2=4*2=8.
// Fix:
#define MULTIPLY(%0,%1) (%0)*(%1)
6. Jos se zelim dotaci ORM-a. ORM je, iako nefleksibilan, ok za jednostavne queryje. Svakako, novi skripteri ne bi trebali da koriste ovo ako ne znaju osnove MySQL-a. I kada naucite osnove onda cete znati zasto je SQL superiorniji od INI cuvanja. Nazalost, ovo sto si ti predlozio (koriscenje sistema sa kojim nisu upoznati) dovodi do onih databaza schema koje ima 90% servera (svi znamo o cemu pricam).
Ovo je sada trenutno u trendu sa bazom sql, pa preporucujem svima koji rade ove godine, krenite ovim projektom jer dovoljno ima za pocetak i za zavrsetak.
Odlican posao...sve pohvale! 8)
Citat: // xunder poslato April 16, 2023, 01:55:17 PRE PODNE
Koncept je dobar. Svidja mi se sto kroz primjere zelite pomoci pocetnicima u skriptanju.
Medjutim, svi pocetnici bi trebali da uce ispravno da pisu kod od pocetka. Razlog tome je da kasnije ne bi morali da se odvikavaju od losih navika (kao sto sam ja morao, kao sto su svi koji su pocetli nesto ranije sa skriptanjem morali zbog nedostatka zainteresovanosti tada iskusnijih skriptera da pomognu na pravi nacin, cast izuzecima).
Par primjera cu navesti:
1. "E_PLAYERS" enum je totalno nepotreban. Ako vec zelis da radis modularan mod u PAWNu postoje static global varijable kojima je scope jedan fajl. Recimo da imamo modul karaktera - "character". Modul karaktera bi trebao da sadrzi neke base statistike karaktera (recimo): novac u dzepu, level, exp. Varijable koje ce cuvati novac, level i exp napravi u scope fajla (static) i napravi getter funkcije za svaku stvar koju zelis share izmedju modula. Prednost ovoga je sto getter funkcija moze u sebi da sadrzi logiku koju bi, bez iste, morao da ponavljas kroz svaki fajl.
2. "bool:Auth(playerid, level)" imena funkcija su bitna. Ime funkcije treba da opisuje ono sto funkcija radi. Ova funkcija provjerava da li je igracev "AdminLevel" veci od zadanog levela. Mnogo bolje ime funkcije bi bilo npr. "IsPlayerAuthorized(playerid, adminLevel)".
3. Tagovi. Da bi simulirali neki type-checking sistem u PAWNu postoje tagovi (neki od njih su npr. PlayerText, Text3D, Text). Prelaskom na open.mp includeove (stdlib) vidjecete da je 90% "magicnih" brojeva tagovano. Dobar primjer u ovom modu bi bila funkcija "GetPlayerMoneyEx(playerid, pay_type = 0)". Parametar "pay_type" bi bio idealan clan da se taguje. Recimo:
enum e_PAY_TYPE {
PAY_TYPE_POCKET,
PAY_TYPE_BANK
};
GetPlayerMoneyEx(playerid, e_PAY_TYPE:pay_type = PAY_TYPE_POCKET) {
//....
}
Razlog je to sto cete kad-tad doci u situaciju da se zapitate da li je 0 novac u dzepu ili novac u banci. Ovo je pogotovo slucaj kada radite na code-base koji je nekoliko desetina (ili stotina) hiljada linija.
4. Izbjegavajte nazivanje funkcije sa sufixima kao sto su "Ex". "Ex" je los sufix i ne govori nam nista o tome sta funkcija konkretno radi. Primjer: "PlayerNameEx(playerid)" -> "ReturnPlayerNameEx(playerid)".
5. Macro:
#define PRESSED(%0) \
( newkeys & %0 == %0 && oldkeys & %0 != %0 )
Ovaj kod je nepravilan. Iako se vama cini da je ovo "(((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))" uzasno zbog zagrada - zagrade su tu sa razlogom.
Praktican primjer:
#define MULTIPLY(%0,%1) %0*%1
new result = ADD(4 + 1, 2); // Ocekujemo: (4+1)*2=5*2=10, a dobicemo: 4+1*2=4*2=8.
// Fix:
#define MULTIPLY(%0,%1) (%0)*(%1)
6. Jos se zelim dotaci ORM-a. ORM je, iako nefleksibilan, ok za jednostavne queryje. Svakako, novi skripteri ne bi trebali da koriste ovo ako ne znaju osnove MySQL-a. I kada naucite osnove onda cete znati zasto je SQL superiorniji od INI cuvanja. Nazalost, ovo sto si ti predlozio (koriscenje sistema sa kojim nisu upoznati) dovodi do onih databaza schema koje ima 90% servera (svi znamo o cemu pricam).
1. Slazem se, ali gamemode je izmjenio tok par puta pa shodno tome nisam od pocetka se vodio time konceptom, na kraju krajeva, spomenuo sam descriptionu da je kod podjeljen u fajlove (not really modular, vec da tako kazu kod nas haha), nisam zamislio mod da radi na pokusaj koncepta OOP-a in first hand, samo sam koristio hooks da podjelim u fajlove.
2. U potpunosti se slazem, naming nije bas bio idealan iskreno, ali mi je lakse bilo kucati Auth nego IsPlayerAuthorized npr, na generalno team based projektima naming je vazan tako da se slazem, cas posla za replace tho
3. Znam za tagove, medjutim generalno pay type sam zamislio kao koncept, ali ga nikad nisam zavrsio, niti uvezao sa dealershipom sto je bio plan, sistem kupovine pa i samog kesiranja nije gotov, pa samim time ni to kao part of it
4.Zab sam vec sta radi taj funcion ali mislim da je ime without underscore, u svakom slucaju ljepse mi je zvucalo nego ReturnPlayerNameWithoutUnderscore
5. Ovo je ostalo sa izvornog moda
6. Agree, ali gledajuci strukturalno na trenutne sisteme kojih i nema puno, dovoljni su insert update i delete query-i, slazem se i da omogucavanjem jos lakseg sql koristenja nece nekome pruziti detaljniji i bolji uvod u sql, samo sam koristio ORM jer se ne koristi, query bi svakako rucno konstruisao da sam trebao da joinujem nesto, etc..
Minor update: Link to commit (https://github.com/daniscavalic/monaco-roleplay/commit/8ce80e317ead9b24f8ce22d5519b5eb3fc3e205b)
- Implementirao sam sugestije (ne sve naravno, neke stvari i dalje treba zavrsiti pa shodno tome se nakon uvezivanje mogu i korigovati, a ORM stoji kao primjer GM-a koji koristi isti, mozda u narednim budu i neki query-i sa joinima - depending on systems ofc).
- Buduci da je bilo izmjena u namingu vjerovatno bi trebalo i porukama dodati 'Send(User)' prefix, ali ovako mi je nekako bilo prakticnije pa sam to ostavio
Ako jos ko ima neke sugestije, pisite ili otvorite PR :D
Citat: Slade poslato April 16, 2023, 12:44:37 POSLE PODNE
4.Zab sam vec sta radi taj funcion ali mislim da je ime without underscore, u svakom slucaju ljepse mi je zvucalo nego ReturnPlayerNameWithoutUnderscore
Ovime dokazujes zasto je bitan naming scheme funkcije. Nazalost PAWN koji vecina ljudi koristi podrzava max 32 karaktera u imenima funkcija i callbackova. Ja sam pogrijesio jer sam dao los primjer.
"ReturnPlayerNameEx(playerid)" bi trebalo da bude zapravo "ReturnPlayerRPName(playerid)". Mnogo je lakse, kada se vratis na stari projekat nakon nekog vremena, sjetiti se sta je "RPName" nego "Ex".
Citat: Slade poslato April 16, 2023, 12:44:37 POSLE PODNE
2. U potpunosti se slazem, naming nije bas bio idealan iskreno, ali mi je lakse bilo kucati Auth nego IsPlayerAuthorized npr, na generalno team based projektima naming je vazan tako da se slazem, cas posla za replace tho
Slazem se da je lakse ali isto tako bi bilo lakse pisati "if (A(playerid, 2))" pa nije bas dobra ideja. Mislim da u danasnje vrijeme svi koristimo moderne IDEove i code editore da nam ne predstavlja problem to da li je funkcija 4 ili 24 karaktera.
Citat: Slade poslato April 16, 2023, 15:42:39 POSLE PODNE
Minor update: Link to commit (https://github.com/daniscavalic/monaco-roleplay/commit/8ce80e317ead9b24f8ce22d5519b5eb3fc3e205b)
- Implementirao sam sugestije (ne sve naravno, neke stvari i dalje treba zavrsiti pa shodno tome se nakon uvezivanje mogu i korigovati, a ORM stoji kao primjer GM-a koji koristi isti, mozda u narednim budu i neki query-i sa joinima - depending on systems ofc).
- Buduci da je bilo izmjena u namingu vjerovatno bi trebalo i porukama dodati 'Send(User)' prefix, ali ovako mi je nekako bilo prakticnije pa sam to ostavio
Ako jos ko ima neke sugestije, pisite ili otvorite PR :D
Kul update. Vidim da je dodano dosta global stringova. Predlazem ti da ih packujes ukoliko se ne koriste sa "strunpack" jako cesto (OnPlayerUpdate, 1 sec timer itd).
Primjer: "pay_type_name" se koristi samo u PlayerTextDrawSetString i kada kao argument u passujes literal string cak ti i ne treba strunpack.
enum E_DLS_PLAYER_PAY_TYPES
{
pay_type_name[18 char],
e_PAY_TYPE:pay_type,
bool:pay_type_credit
}
static PayTypes[][E_DLS_PLAYER_PAY_TYPES] = {
{!"Cash", PAY_TYPE_POCKET, false},
{!"Bankovni transfer", PAY_TYPE_BANK, false},
{!"Kredit", PAY_TYPE_CREDIT, true}
};
// Koriscenje na liniji -> https://github.com/daniscavalic/monaco-roleplay/blob/a72faac20bf483ff74c575ea6d28fb9e88f15154/gamemodes/backend/vehicles/car_dealership.pwn#L136:
PlayerTextDrawSetString(playerid, Contract_PTD[playerid][3], PayTypes[dealer_Player_PayType[playerid]][pay_type_name]); // zapravo se ne mijenja nista jer ga ne formatiramo
Svidja mi se sto si uvazio par mojih prijedloga i to sto ne mlataram u prazno kao obicno.
stock SetAdminVehicle(playerid, vehicleid) {
return AdminVozilo[playerid] = vehicleid;
}
Ovakva funkcija moze u kasnijem kodu da stvara problem. "Set" funckije bi trebale da returnaju true ukoliko je izvrsena uspijesno i false ukoliko nije. Ukoliko kazemo "SetAdminVehicle(playerid, 0)" funkcija ce vratiti 0 (false) i moze da bude misleading u nekim slucajevima. Predlozio bih ti da, ukoliko zelis da koristis funkciju u provjerama uvijek returnas 1 (true) ili ukoliko ne zelis - pravi obicnu void funkciju koja nece ni imati return. Ovo je rijedak edge case ali zna se desiti i biti smor za debug.
stock GetStaffRankName( rank_level ) {
new rank_name[15];
switch(rank_level) {
case 1: form:rank_name("Server Moderator");
case 2: form:rank_name("Administrator");
case 3: form:rank_name("Lead Administrator");
case 4: form:rank_name("Manager");
}
return rank_name;
}
Nepotrebno je koristiti format kada ne formatiras string zapravo. Da ne bi pisali strmid svaki put u community verziji pawn stdliba postoji "strcopy".
stock strcopy(dest[], const source[], maxlength = sizeof (dest))
{
return strcat((dest[0] = EOS, dest), source, maxlength);
}
Citat: // xunder poslato April 16, 2023, 01:55:17 PRE PODNE
1. "E_PLAYERS" enum je totalno nepotreban. Ako vec zelis da radis modularan mod u PAWNu postoje static global varijable kojima je scope jedan fajl. Recimo da imamo modul karaktera - "character". Modul karaktera bi trebao da sadrzi neke base statistike karaktera (recimo): novac u dzepu, level, exp. Varijable koje ce cuvati novac, level i exp napravi u scope fajla (static) i napravi getter funkcije za svaku stvar koju zelis share izmedju modula. Prednost ovoga je sto getter funkcija moze u sebi da sadrzi logiku koju bi, bez iste, morao da ponavljas kroz svaki fajl.
Ima i static enum. Šta misliš o tome? Ja koristim to umesto varijabli. I njemu je scope taj fajl samo.
A što si sakrio ovaj warning?
#pragma warning disable 214
Zar a_samp već ne inkluduje sve ovo?
#include <a_samp>
#include <a_actor>
#include <a_objects>
#include <a_players>
#include <a_vehicles>
Isto tako mislim da ne treba da težiš da bude za početnike, već kao neka osnova, kao neki bare mode da od njega razviješ svoj mod. I takodje, slazem se sa xunderom za naming.
if(success != COMMAND_OK) {
Torq(playerid, "(komanda) Unesena komanda ne postoji, koristite '/help' za pomoc oko komandi.");
return COMMAND_OK;
}
Ne treba ti ovako. Ovako će svaka komanda koja bude odbijena biti nepostojeća.
COMMAND_ZERO_RET = 0 , // The command returned 0.
COMMAND_OK = 1 , // Called corectly.
COMMAND_UNDEFINED = 2 , // Command doesn't exist.
COMMAND_DENIED = 3 , // Can't use the command.
COMMAND_HIDDEN = 4 , // Can't use the command don't let them know it exists.
COMMAND_NO_PLAYER = 6 , // Used by a player who shouldn't exist.
COMMAND_DISABLED = 7 , // All commands are disabled for this player.
COMMAND_BAD_PREFIX = 8 , // Used "/" instead of "#", or something similar.
COMMAND_INVALID_INPUT = 10, // Didn't type "/something".
COMMAND_SILENT = 11, // Just end. Don't call the command or print anything.
Zašto ne probaš na omp da radiš? Bolji su tagovi, možeš da biraš kakve ćeš, imaju ysf funkcije integrisane, open sourced je, a realno pokrenućeš ga preko sampa.
Takodje, pogledaj da li danas na githubu postoje neke biblioteke nove. Uzmeš njih, ne moraš da pišeš svoj kod. Tipa open-vehicle-plus, ne znam, propertiesi neki i tako to, što je fleksibilno da možeš od toga da napraviš svoj sistem, a funkcije već imaš, ne moraš da se bahćeš i pišeš iste.
Evo vidiš, pogledaj defines.pwn, 20 boja. Y_Colours sve to ima već.
Napomena: Naravno, ne znači da sad ne treba tvog koda i tvojih sistema da bude. Nego jednostavno olakšaš malo, naravno, neće svaka boja baš koja tebi treba biti u y_colours, al pogledaj, ima sigurno veliki spektar boja koje bi ti bile od pomoći.
#define Error(%0,%1) SendClientMessageEx(%0, x_torq, "(greska) "%1)
#define Usage(%0,%1) SendClientMessageEx(%0, x_green, "(koristenje) "%1)
#define CommandHelp(%0,%1) SendClientMessageEx(%0, x_blue, "(komanda) "%1)
#define Server(%0,%1) SendClientMessageEx(%0, x_red, "(server) "%1)
// Coloured Messages
#define Torq(%0,%1) SendClientMessageEx(%0, x_torq, %1)
#define Red(%0,%1) SendClientMessageEx(%0, x_red, %1)
#define Blue(%0,%1) SendClientMessageEx(%0, x_blue, %1)
Ovo Torq, Red i to, to nema smisla. Neko ko prvi put gleda moraće da se snalazi i neće znati o čemu je reč ovde. Naming već pomenuti. A i iskreno nepotrebno je zbog boje sa radiš makro da se stavi boja na poruku...
Ovo Error, Usage i Server. Možemo na mnogo lepši način.
Napravi jednu funkciju sa argumentom koji odredjuje šta šalješ, stavi tag MESSAGE_TYPE na njega naprimer i proveravaj dolje koja je poruka i šta hoćeš da radi.
Citat: // xunder poslato April 17, 2023, 00:02:43 PRE PODNE
Ovime dokazujes zasto je bitan naming scheme funkcije. Nazalost PAWN koji vecina ljudi koristi podrzava max 32 karaktera u imenima funkcija i callbackova. Ja sam pogrijesio jer sam dao los primjer.
"ReturnPlayerNameEx(playerid)" bi trebalo da bude zapravo "ReturnPlayerRPName(playerid)". Mnogo je lakse, kada se vratis na stari projekat nakon nekog vremena, sjetiti se sta je "RPName" nego "Ex".
Evo i ovde, prebaci se na 3.10.11 kompajler koji dobiješ u qawno folderu sa omp serverom. Možeš da ides na 62 karaktera sa imenima.
svaka ti dala
Hvala na komentarima, adresirat ću šta stignem kada uhvatim vremena.
Citat: Mergevos poslato April 18, 2023, 00:37:26 PRE PODNE
Evo vidiš, pogledaj defines.pwn, 20 boja. Y_Colours sve to ima već.
Napomena: Naravno, ne znači da sad ne treba tvog koda i tvojih sistema da bude. Nego jednostavno olakšaš malo, naravno, neće svaka boja baš koja tebi treba biti u y_colours, al pogledaj, ima sigurno veliki spektar boja koje bi ti bile od pomoći.
Ovo Torq, Red i to, to nema smisla. Neko ko prvi put gleda moraće da se snalazi i neće znati o čemu je reč ovde. Naming već pomenuti. A i iskreno nepotrebno je zbog boje sa radiš makro da se stavi boja na poruku...
Moja crvena nije klasična FF0000, mislim, uz dužno poštovanje, da koristeći tuđi library za coloring je žešće sviranje k, valjda možeš definisat sam boje za svoj gamemode, moje boje su malo specifične, nijedna nije klasična (plava,zelena,crvena, tirkizna), sve imaju malo svijetliju-tamniju nijansu koja se slaže sa ostalim isto takvog tipa da se mogu mješati u chatu i da to lijepo izgleda, neke su boje naravno predefinirane u prethodno verziji odnosno izvornoj verziji moda, nisam ih dirao, ako se ne koriste, lako ih je obrisati svakako
Citat: Mergevos poslato April 18, 2023, 00:28:41 PRE PODNE
Takodje, pogledaj da li danas na githubu postoje neke biblioteke nove. Uzmeš njih, ne moraš da pišeš svoj kod. Tipa open-vehicle-plus, ne znam, propertiesi neki i tako to, što je fleksibilno da možeš od toga da napraviš svoj sistem, a funkcije već imaš, ne moraš da se bahćeš i pišeš iste.
Script template je, da radim sebi (planirao sam al nemam vremena iskreno), vjerovatno i bi, ma da te biblioteke generalno imaju 90% funkcija koje neću i 10% koje hoću koristit, lakše mi je izvadit tu jednu, ubacit je u neki utils fajl, i ostavit credits, nego includeovati čitavu biblioteku, uz to, naročito starije biblioteke, imaju jako loše hooks tako da je jako teško ubaciti recimo 2 includea koji vrše interakciju sa vozilima i da su kompatibilna jedan sa drugim (da nema errora).
Citat: Mergevos poslato April 18, 2023, 00:25:29 PRE PODNE
A što si sakrio ovaj warning?
#pragma warning disable 214
Ne sjećam se da ti budem iskren, mislim da sam našao guglanjem da je to neki compiler problem sa ovim tipom gamemodea gdje je kod razdvojen u fajlove sa hooksom, smetao mi je warning iako nije konzistentan pa sam ga sklonio, ako si klonirao mod mozes sklonit liniju pa probaj kompajlirati, vidjet ces o cemu se radi, ali nije relevant, ako nista na tu temu, ne mislim svakako da je lako reproducirati ovaj warning pa samim time i da je problem što stoji ta linija
Citat: Mergevos poslato April 18, 2023, 00:25:29 PRE PODNE
Zar a_samp već ne inkluduje sve ovo?
#include <a_samp>
#include <a_actor>
#include <a_objects>
#include <a_players>
#include <a_vehicles>
Mislim da da, nisam siguran, provjerim pa ako jeste, onda je redundant definitivno pa pobrišem ostale.
Citat: Mergevos poslato April 18, 2023, 00:25:29 PRE PODNE
Ne treba ti ovako. Ovako će svaka komanda koja bude odbijena biti nepostojeća.
COMMAND_ZERO_RET = 0 , // The command returned 0.
COMMAND_OK = 1 , // Called corectly.
COMMAND_UNDEFINED = 2 , // Command doesn't exist.
COMMAND_DENIED = 3 , // Can't use the command.
COMMAND_HIDDEN = 4 , // Can't use the command don't let them know it exists.
COMMAND_NO_PLAYER = 6 , // Used by a player who shouldn't exist.
COMMAND_DISABLED = 7 , // All commands are disabled for this player.
COMMAND_BAD_PREFIX = 8 , // Used "/" instead of "#", or something similar.
COMMAND_INVALID_INPUT = 10, // Didn't type "/something".
COMMAND_SILENT = 11, // Just end. Don't call the command or print anything.
U trenutnoj strukturi komandi je to okej, bio sam svjestan tagova, tako da sam stavio da ako je komanda, a nije validna, dal ne postoji ili je taj format, da ti vrati poruku da ne postoji, jer jednostavno nije tako ni definirana i shodno tome i ne postoji, možda ne izgleda bajno ali funkcioniše, ko misli da će doći u interakciju sa ostalim tagovima može zamjenit tu jednu liniju da ispiše zapravo da ne postoji samo kad je COMMAND_UNDEFINED case, u svakom slučaju nije mi se pravio edge case da vratim poruku/izvršim handling za svaki case tako da i nisam, ili je ispravna ili nije, if u know what I mean :D
Citat: Mergevos poslato April 18, 2023, 00:25:29 PRE PODNE
Isto tako mislim da ne treba da težiš da bude za početnike, već kao neka osnova, kao neki bare mode da od njega razviješ svoj mod. I takodje, slazem se sa xunderom za naming.
Zašto ne probaš na omp da radiš? Bolji su tagovi, možeš da biraš kakve ćeš, imaju ysf funkcije integrisane, open sourced je, a realno pokrenućeš ga preko sampa.
Ne težim da bude za početnike, svakako ima nekih stvari u TextDrawima koje ja lično ne bih znao ni pročitati kad sam tek kretao da učim programiranje, koje je generalno i počelo od samog SA-MPa, ovo je baš to što kažeš, template, za neki mod, ima predefinirane stvari, neke bazne sisteme, čak i neke TDove, vremenom ću ga i ja malo ažurirati vjerovatno, uglavnom dobar template, TD handling, sql (orm), neka osnovna baza, kul za početak.
A što se tiče omp, nemam iskreno dobar odgovor na tvoje pitanje, vjerovatno hoću nekada, generalno ni nemam vremena da radim, ali vjerovatno ću ako bih išta krenuo da pišem od 0, makar iz zabave, odabrati omp.
Nisam uopšte vidio ovaj komentar, pa mi je otišao ispod radara.. :D
Citat: // xunder poslato April 17, 2023, 00:02:43 PRE PODNE
Slazem se da je lakse ali isto tako bi bilo lakse pisati "if (A(playerid, 2))" pa nije bas dobra ideja. Mislim da u danasnje vrijeme svi koristimo moderne IDEove i code editore da nam ne predstavlja problem to da li je funkcija 4 ili 24 karaktera.
Ne oslanjam se previše na VSC, jednostavno mi ne ide, kao što npr mogu na IntelliJ, kad spominješ IDE, a što se tiče naminga, fair point, međutim, Auth može značit svašta nešto, u jednu ruku sam planirao vremenom dodati na neke komande i neki auth template, tipa kod za administratore head admin levela za neke operativne komande, pa bi auth išao malo dalje, trenutni template komande definitivno bolje izgleda sa IsPlayerAuthorized, ali ono, porediti A i Auth, really :D ?
Citat: // xunder poslato April 17, 2023, 00:02:43 PRE PODNEKul update. Vidim da je dodano dosta global stringova. Predlazem ti da ih packujes ukoliko se ne koriste sa "strunpack" jako cesto (OnPlayerUpdate, 1 sec timer itd).
Primjer: "pay_type_name" se koristi samo u PlayerTextDrawSetString i kada kao argument u passujes literal string cak ti i ne treba strunpack.
enum E_DLS_PLAYER_PAY_TYPES
{
pay_type_name[18 char],
e_PAY_TYPE:pay_type,
bool:pay_type_credit
}
static PayTypes[][E_DLS_PLAYER_PAY_TYPES] = {
{!"Cash", PAY_TYPE_POCKET, false},
{!"Bankovni transfer", PAY_TYPE_BANK, false},
{!"Kredit", PAY_TYPE_CREDIT, true}
};
// Koriscenje na liniji -> https://github.com/daniscavalic/monaco-roleplay/blob/a72faac20bf483ff74c575ea6d28fb9e88f15154/gamemodes/backend/vehicles/car_dealership.pwn#L136:
PlayerTextDrawSetString(playerid, Contract_PTD[playerid][3], PayTypes[dealer_Player_PayType[playerid]][pay_type_name]); // zapravo se ne mijenja nista jer ga ne formatiramo
Svidja mi se sto si uvazio par mojih prijedloga i to sto ne mlataram u prazno kao obicno.
Slažem se da je ovo u ovom slučaju bolje, međutim, ovo je mikrooptimizacija, kada bi sad ušao i gledao svaku liniju našao bi još 300 komentara sigurno, mogu ispraviti, par sekundi posla, imamo li fakat tako velik benefit od ovoga? Htio sam koristiti PawnPlus tho, ali ipak sam odustao na kraju, znam da on ima one dinamičke stringove
Citat: Slade poslato April 19, 2023, 00:08:53 PRE PODNE
Hvala na komentarima, adresirat ću šta stignem kada uhvatim vremena.
Moja crvena nije klasična FF0000, mislim, uz dužno poštovanje, da koristeći tuđi library za coloring je žešće sviranje k, valjda možeš definisat sam boje za svoj gamemode, moje boje su malo specifične, nijedna nije klasična (plava,zelena,crvena, tirkizna), sve imaju malo svijetliju-tamniju nijansu koja se slaže sa ostalim isto takvog tipa da se mogu mješati u chatu i da to lijepo izgleda, neke su boje naravno predefinirane u prethodno verziji odnosno izvornoj verziji moda, nisam ih dirao, ako se ne koriste, lako ih je obrisati svakako
Script template je, da radim sebi (planirao sam al nemam vremena iskreno), vjerovatno i bi, ma da te biblioteke generalno imaju 90% funkcija koje neću i 10% koje hoću koristit, lakše mi je izvadit tu jednu, ubacit je u neki utils fajl, i ostavit credits, nego includeovati čitavu biblioteku, uz to, naročito starije biblioteke, imaju jako loše hooks tako da je jako teško ubaciti recimo 2 includea koji vrše interakciju sa vozilima i da su kompatibilna jedan sa drugim (da nema errora).
Ne sjećam se da ti budem iskren, mislim da sam našao guglanjem da je to neki compiler problem sa ovim tipom gamemodea gdje je kod razdvojen u fajlove sa hooksom, smetao mi je warning iako nije konzistentan pa sam ga sklonio, ako si klonirao mod mozes sklonit liniju pa probaj kompajlirati, vidjet ces o cemu se radi, ali nije relevant, ako nista na tu temu, ne mislim svakako da je lako reproducirati ovaj warning pa samim time i da je problem što stoji ta linija
Mislim da da, nisam siguran, provjerim pa ako jeste, onda je redundant definitivno pa pobrišem ostale.
U trenutnoj strukturi komandi je to okej, bio sam svjestan tagova, tako da sam stavio da ako je komanda, a nije validna, dal ne postoji ili je taj format, da ti vrati poruku da ne postoji, jer jednostavno nije tako ni definirana i shodno tome i ne postoji, možda ne izgleda bajno ali funkcioniše, ko misli da će doći u interakciju sa ostalim tagovima može zamjenit tu jednu liniju da ispiše zapravo da ne postoji samo kad je COMMAND_UNDEFINED case, u svakom slučaju nije mi se pravio edge case da vratim poruku/izvršim handling za svaki case tako da i nisam, ili je ispravna ili nije, if u know what I mean :D
Ne težim da bude za početnike, svakako ima nekih stvari u TextDrawima koje ja lično ne bih znao ni pročitati kad sam tek kretao da učim programiranje, koje je generalno i počelo od samog SA-MPa, ovo je baš to što kažeš, template, za neki mod, ima predefinirane stvari, neke bazne sisteme, čak i neke TDove, vremenom ću ga i ja malo ažurirati vjerovatno, uglavnom dobar template, TD handling, sql (orm), neka osnovna baza, kul za početak.
A što se tiče omp, nemam iskreno dobar odgovor na tvoje pitanje, vjerovatno hoću nekada, generalno ni nemam vremena da radim, ali vjerovatno ću ako bih išta krenuo da pišem od 0, makar iz zabave, odabrati omp.
Pošto sam na fonu staviću ti broj parafrafa na koji ti odgovaram.
1. Dobro, boja manje više. Zato sam i stavio napomenu. U potpunosti se slažem, samo sam ti napomenuo biblioteku da znaš čisto.
2. Iskren da budem dao sam ti svoju jako lepo napisanu i novu biblioteku ? pa sam zato spomenuo, ali generalno, ako ćeš tako posmatrati zbog 90% funkcija koje nećeš koristiti, izvadiš jednu, znaš, nije to, možda će ti baš zatrebati to, uostalom to i jeste biblioteka sa razlogom, neće ti te funkcije smetati i da ne koristiš, stvarno ima korisnih stvari, a nemoj da te to nekorišćenje funkcija brine. Koliko biblioteka ima da traže jednu stvar da bi one radile samo, a taj dependency je baš bespotreban tvom modu, ali ti je potrebna ova prethodna biblioteka i jebi ga. Moraš da skineš stvar koju ćeš koristiti samo u jednoj situaciji ?.
3. Ne znam za to, ali ako je warning za const, to se lako rešava.
4. //
5. //
6. Pa možda baš ovo da prebaciš. Iskreno, znaš, nije uopste toliko teško. Samo treba neke biblioteke da zameniš malo da sredis pluginove i komponente i da ubacis omp-server.exe i da se generiše config.json
Sve u svemu napisao sam samo, a ima 100 stvari, ali realno very simple i može da se uradi. Možda otvorim neki issue pa ti pomognem.
EDIT:
Imaju neke "?" u sred rečenica. Da znaš da su emoji neki
Znam za tvoj library za vehicles, mislim da sam ga koristio u drugom modu, i da slažem se, ima tu vehicle offseta i svašta nešto, mnogo prebačenih definicija da bi se izvukla samo jedna funkcija, u jednu ruku i not worth it, ovaj mod i nema nešto generalno funkcija za sama vozila (engine i lights sistem, i to je to ako se ne varam)
Ako želiš i imaš vremena, slobodno ispravi/optimizuj, možeš i integrisat svoju biblioteku vozila u mod ako misliš da ima pozitivan efekat, makar za čitanje koda, i otvori pull request pa ćemo mergati, svaka kontribucija je dobrodošla, a ja ću gledat da adresiram stvari što ste ti i Xunder pisali, kad uhvatim vremena :D
Citat: Slade poslato April 19, 2023, 00:31:02 PRE PODNE
Znam za tvoj library za vehicles, mislim da sam ga koristio u drugom modu, i da slažem se, ima tu vehicle offseta i svašta nešto, mnogo prebačenih definicija da bi se izvukla samo jedna funkcija, u jednu ruku i not worth it, ovaj mod i nema nešto generalno funkcija za sama vozila (engine i lights sistem, i to je to ako se ne varam)
Ako želiš i imaš vremena, slobodno ispravi/optimizuj, možeš i integrisat svoju biblioteku vozila u mod ako misliš da ima pozitivan efekat, makar za čitanje koda, i otvori pull request pa ćemo mergati, svaka kontribucija je dobrodošla, a ja ću gledat da adresiram stvari što ste ti i Xunder pisali, kad uhvatim vremena :D
Brate u pravi čas si krenuo sa ovim. I ja pišem mod od 0 neki, ako si za mogao bih da migriram na open.mp tvoj mod. Pa da šaltam s njim iskreno. Imam lepih stvari, sigurno bi ti značilo.
Može, forkaj, il ako želiš poslat ću ti contribute invitation, ako ćeš tako pošalji mi samo github mail/username, na ovaj repo pa ćemo verzionirat ovaj core na 0.1-SAMP, a naredna verzija i master da budu omp, svakako je SAMP stao sa razvijanjem, a OMP je budućnost
Citat: Slade poslato April 19, 2023, 00:39:06 PRE PODNE
Može, forkaj, il ako želiš poslat ću ti contribute invitation, ako ćeš tako pošalji mi samo github mail/username, na ovaj repo pa ćemo verzionirat ovaj core na 0.1-SAMP, a naredna verzija i master da budu omp, svakako je SAMP stao sa razvijanjem, a OMP je budućnost
Forkovacu, cim zavrsim nesto sutra. No, another question.
Iterator: ServerVehicles<MAX_VEHICLES>;
Zašto ovo? YSI vec ima iterator za vozila.
Važi.
Citat: Mergevos poslato April 19, 2023, 00:44:01 PRE PODNE
Iterator: ServerVehicles<MAX_VEHICLES>;
Zašto ovo? YSI vec ima iterator za vozila.
Ima da, ali se odnosi na vehicle creating funkcije i kul je da loopaš samo fakat kreirana vozila, međutim to obuhvata sva vozila, recimo AdminVehicle, koji je dio moda, ne spada u ServerVehicles, u ServerVehicles spadaju id-ovi isključivo vozila iz vehicle handlera (privatnih, organizacionih/faction, poslovnih), odnosno ukratko, onih koji se čuvaju u bazi podataka, postoji par alternativa za ovaj sistem ali ja sam išao ovim načinom, tako da kad uništiš vozilo koje se čuva i u bazi, za razliku od ostalih koja se samo destroy-aju, ova se obrišu i u iteratoru i u bazi.
Tako da short story long, taj iterator drži vozila kreirana na serveru koja su dinamična (spremljena u bazi podataka), dok ona privremena (event, admin, itd) ne drži.
Aha, zapravo nije loše. Kao grupe za vozila (sssh koristite vehicle-plus, to sve ima 8) 8) 8) ). Odlična ideja zapravo. Baš mi je drago što je diskusija krenula u ovakvom smeru. Otvoricu neke issues-e sada, pa cu forkovati sutra najverovatnije pa ću ti pomoći
Jel mozes uploudat mod na mediafire pa nam das da skinemo mene nesto jebe github.
:D
Citat: TheGjorgii poslato April 24, 2023, 16:32:37 POSLE PODNE
Jel mozes uploudat mod na mediafire pa nam das da skinemo mene nesto jebe github.
:D
Github te ne jebe nego si ti glup pa ne znas kako da skines
Citat: TheGjorgii poslato April 24, 2023, 16:32:37 POSLE PODNE
Jel mozes uploudat mod na mediafire pa nam das da skinemo mene nesto jebe github.
:D
Mislim da GitHub može da ima statusnih problema, ali samo tebe da zeza, naročito u downloadu moda, teško haha...
Samo idi na Code, i downloaduj ZIP, i to je to.
Ili ako imaš downloadovan git, otvori cmd/powershell, i kucaj:
git clone https://github.com/daniscavalic/monaco-roleplay.git {ime foldera}
U direktoriju gdje želiš download mod, i naravno stavi ime foldera koje želiš (ako uopšte ništa ne ukucaš bit će to ime repoa, a to je monaco-roleplay.
Vehicle sistem dobar primer kako treba da se rade sistemi inace, kako se razmislja programerski. ORM od mysql plugina u sampu mi nije po volji, dosta je limitiran po meni, ali zavrsava posao.
U sustini ne mogu nista prigovoriti, sve je super, ako ima nesto ili je vise stvar licnih preferenci i stila, ili je glupost koja nije ni bitna.
To receno, Error, Usage, Server i tako te definicije bih preimenovao u SendErrorMessage ili makar ErrorMessage, moze cak i SendError (ja ovo imam po modovima mojim, mada opet to je vecinom iz 2010-12 godine ostalo...). To je cisto da se zna da se salje poruka a ne da se ispisuje u konzoli ili slicno.
Ovo Torq, Red i Blue, definicije funkcija, sa ovim si me razocarao...
Umesto mysql_connect savjetujem mysql_connect_file, tako da se podaci uzimaju iz fajla i nema da pazis tokom compile za koju db ti trebaju podaci. Samo podesis podatke jednom na local i na hostu i kasnije upload .amx bez ikakvih switcheva i cuda.
Bump
Bump 8)
.
Planiram da koristim ovaj mod kao nekakav "base" za neki moj Freeroam projekt na kojem ću da radim tokom slobodnog vremena. Vrijedi li ili ima i nešto bolje ? Za sada mi je bitno da je u MySQL i da ima fino odrađen register/login i osnovne sitnice kao spremanje novca, score, skin itd. Također sasvim mi je nebitno da li je u modulu ili ne.
Lijep mod, ništa kritično. ;D
Citat: pokerface poslato Maj 16, 2023, 17:53:59 POSLE PODNE
Planiram da koristim ovaj mod kao nekakav "base" za neki moj Freeroam projekt na kojem ću da radim tokom slobodnog vremena. Vrijedi li ili ima i nešto bolje ? Za sada mi je bitno da je u MySQL i da ima fino odrađen register/login i osnovne sitnice kao spremanje novca, score, skin itd. Također sasvim mi je nebitno da li je u modulu ili ne.
Nema ništa pretjerano sistema orijentisanih za neki određeni tip gamemode-a tako da možeš praktično i DM server napraviti od njega. Sretno :)
Citat: Kenzi poslato Maj 16, 2023, 21:54:27 POSLE PODNE
Lijep mod, ništa kritično. ;D
Hvala :D
Ne mogu da uhvatim vremena da adresiram jos neke stvari ali bit ce otom potom, mozda i odradim koji update.
Odlican mod
nema slika :'(
probacu mod :)
Imaju na repozitoriju
Citat: BoTa poslato Maj 18, 2023, 13:50:04 POSLE PODNE
nema slika :'(
probacu mod :)
Nema tu sta da budu slike, covek je napravio osnovu, pokazao kako se sta radi, i kako se moze koristiti. Dao dobar primer za vehicle ownership sistem, sve ostalo je na vama...
Sta reci clean mod sve na mestu, zapalo mi je za oko ovaj sys diler sipa pohval za to veoma lepo odradjeno.
Mod ko mod je lepa osnova za nesto veliko ipak mi na balkanu imamo vemoma opasne skriptercine :D pa moza se nesto iz ovog moda i izrodi na kraju krajeva.
Danise dobro odradjen posao!
Hvala, a da od moda se moze stosta napraviti, moze biti baza za bilo koji tip servera
Bump
bump
vrhunski kod, gj :D
Citat: TheGjorgii poslato April 24, 2023, 16:32:37 POSLE PODNE
Jel mozes uploudat mod na mediafire pa nam das da skinemo mene nesto jebe github.
:D
Moje misljenje je to da ovo nije jedan od onih modova koje skines preko MediaFire i automatski stavljas na lemehost, ovo je jebena umjetnost.
Bump
Bampujem
Bump
Bump
Bump
Citat: Slade poslato April 14, 2023, 23:54:46 POSLE PODNE
Naziv: Monaco RP - Script template
Izvorni (Skripter): realnaith
Slike: GitHub Repo (https://github.com/daniscavalic/monaco-roleplay)
Skripter: Slade (Danis)
Download: GitHub Repo (https://github.com/daniscavalic/monaco-roleplay)
Scan: //
Dodatno:
Iz dosade sam skinuo myserver i počeo da radim na modu. Malo sam fakat i posvetio pažnje pa sam napravio neke stvari u TD-ovima (dealership, char registration) koje su mi i oduzele malo vremena. Kod u nekim segmentima može bolje, poput zajedničkih update funkcija, umjesto da se parametri TD-ova ažuriraju samo po potrebi, ali nije ni loš. Potrebno je završiti dealership sistem (uvezati potvrdom ugovora kupovinu vozila i dodjelu istog igraču) te naravno car ownership sistem sam od sebe (lock vozila, parking, lociranje itd). Mod ima već kreirano čuvanje i funkciju za isto (kao i loadanje).
Mod koristi ORM bazirano čuvanje u SQLu (core je bio ini) pomoću kojeg je omogućeno početnicima koji ne razumiju sql da lako dodaju/spreme neki podatak u neku tabelu, primjer je tu na korisnicima, kao i spremanju/učitavanju vozila.
Kod je separiran u fajlove, ili kao što se kod nas kaže, "modularan :D", svaki fajl ima hookuje ono što mu treba, doduše neki su fajlovi samo biblioteke nekih handlera, dok handleri sami po sebi rade uglavnom neovisno od gamemode-a (osim ako su potrebni neki podatci o igraču).
Ako je ko voljan završiti nedovršeno (otvoriti PR na repou sa izmjenama), nastaviti raditi (forkati/cloneati repo), feel free to do it!
Kada uhvatim vremena možda i sam završim ako ništa ovo započeto, a možda bude i nekog versioninga.
[/quote
moze pomoc kada pokrenem samp-server.exe otvori mi se neki crni prozor a ne samp wtf
kada ocu da pokrenem samp-server bude mi crni prozor a ne samp
Citat: Marko_Derdic poslato Avgust 31, 2023, 00:32:08 PRE PODNE
kada ocu da pokrenem samp-server bude mi crni prozor a ne samp
console program...
ok je
Citat: Marko_Derdic poslato Avgust 31, 2023, 00:32:08 PRE PODNE
kada ocu da pokrenem samp-server bude mi crni prozor a ne samp
Pznat problem sa samp serverom
Odlican posao ..
Au moram ovo bump
templatee
Bump
Opet bump
Dobarr
Jako Lepo ! BUMP