Jump to content

Eyser

Membru
  • Posts

    73
  • Joined

  • Last visited

  • Days Won

    4

Everything posted by Eyser

  1. Daca nu se opreste anim-ul pune in loc de "ClearAnimations(playerid);" functia "SetPlayerSkin(playerid, GetPlayerSkin(playerid));".
  2. Salutari tuturor, am decis sa fac un mic tutorial ce poate sa fie "mare" pentru o parte dintre scripteri "inzestrat" si cu putine informatii. Timpul unui GM ce trebuie compilat (update .AMX) este variabil si nu este niciodata fix indiferent de situatie. Acesta creste pe masura ce GameMode-ul devine tot mai complex si cu alte functii noi adaugate. Ce anume influenteaza timpul de compilare? - In primul rand dimensiunea unui GM dar si variabilele pe care acesta le are, in special array-urile sunt un motiv intemeiat atunci cand timpul de asteptare pentru compilare este prea mare. Spuneam mai devreme ca timpul de compilare nu este fix si asta din cauza faptului ca el este in stransa legatura cu "puterea" de calcul/lucru (cum doriti s-o numiti) a fiecarei unitati PC in parte. Cu siguranta ca cineva cu un procesor potent poate obtine rezultate si pana la 50% mai bune decat unul care duce lipsa de acest aspect si este subapreciat, timpul de asteptare este influentat si de resursele disponibile ale PC-ului in cauza. O mare parte ce poate influenta un timp prea mare de asteptare este folosirea Array-urile 3D cu "MAX_PLAYERS" si "MAX_VEHICLES". In dotarile standard aceste 2 Define-uri sunt setate la "maxim", mai precis valoarea 2000 pentru Vehicule si 1000 pentru Players. Modificati aceste valori raportate DOAR la ratia de jucatori a serverului in cauza, este inutil sa folosesti aceste define-uri daca serverul respectiv nu are mai mult de 100/150 de jucatori, se foloseste mult spatiu ce este considerat inutil. (Aceste 2 define-uri cat si altele se pot gasi in "a_samp.inc", mai precis: "pawno/include/a_samp.inc"), desigur ca modificarile se pot accentua, am prezentat doar 2 exemple firesti. (Ca un mic HINT verificati si "MAX_PICKUPS") Dar totusi... ce fac sa-mi micsorez timpul de asteptare pentru compilare? - Varianta "pawncc.exe" standard care este folosita si astazi nu a mai fost actualizata din 2006, intre timp tehnologiile au evoluat si se pot face acutalizari masive acestui compilator imbunatatind si alte aspecte nu doar timpul, singura solutie este sa folosim un alt compilator restructurat. Avem aceasta varianta pe care o putem numi "Russian Compilator", un nou compilator ce imbunatateste timpul de compilare cu peste 60%. Au fost diverse discutii pe tema acesta nefiind tocmai "sigur" din terte motive una incluzand chiar "no open-source", care de asemenea... intre timp s-a rezolvat, compilatorul fiind open-source la momentul actual. Este de precizat faptul ca "#pragma tabsize 0" a fost dezactivat din acest compilator, deci daca GM-ul nu este "aranjat" corespunzator va veti lovi de (avertizarile: loose indentation), la un moment dat creatorul a precizat ca aceasta optiune a fost dezactivata cu buna stiinta unul dintre motivele principale fiind incurajarea scripterilor sa lucreze intr-un mod ordonat. (Folosirea celor 4 spatii spre exemplu) Precizez ca acestea sunt DOAR avertizari si nu pot afecta GM-ul in niciun fel, multi le confunda cu erorile fiind un mod GRESIT de comparatie! Am facut un BIG (.pwn) la activ cu ~90.000 linii de test doar pentru a expune diferentele considerabile referitoare la timp, asa ca...: Compilator Standard - Normal, Editor: Sublime Text 2: (N-am tinut cont de aseazarea in pagina, de aici cele 1125 avertizari) -------------------- Compilator Nou - New, Editor: Sublime Text 2: Link Descarcare: http://gta-samp.com/files/pawncc.exe Open-Source Link: https://github.com/pawn-lang/compiler -------------------- Inlocuiti noul "pawncc.exe" cu vechiul "pawncc.exe" din folderul "pawno". -------------------- De la Eyser, o seara faina!
  3. Sunt separate pentru ca sistemul banuiesc ca plaseaza CP-urile in sistem random. O solutie de a rezolva asta ar fi sa adaugi o variabila (time) la comanda si sa verifici cand a fost folosita ultima data, daca n-a fost folosita in ultimul minut cu ajutorul variabilelor globale alegi random o pozitie pentru CP si mai adaugi aici si "variabila de timp = gettime()+60;". Dupa cu ajutorul unui if verifici daca a fost folosita in ultimul minut, daca a fost folosita setezi CP-ul cu variabilele globale deja setate la prima folosire.
  4. Jucatorii sunt afisati pe harta prin "SetPlayerMarkerForPlayer" doar daca "ShowPlayerMarkers" este setat pe 2, in caz contrar nu v-a functiona tocmai din cauza functiei precedente. N-ai nevoie de niciun timer care sa-ti consume degeaba resurse cand ai "OnPlayerStreamIn". Verifica in accest callback daca jucatorul este intr-un war si afiseaza-l pe harta prin "SetPlayerMarkerForPlayer", in caz ca nu este fa-l tot prin aceasta functie invizibil pe harta.
  5. https://forum.sa-mp.com/showthread.php?p=3942307
  6. Textul in cauza si textele de genul acesta sunt inserate in fisierele .exe/.txd (daca nu gresesc, textele roadsign sunt in particle.txd), nu se pot sterge din script tocmai pentru ca ele nu sunt defapt obiecte. Exista o modalitate sa-l faci sa dispara dar va fi valabil doar pentru tine, exact ca un mod.
  7. Ai adaugat tu 2 paranteze la [pInfo] din aceasta cauza este eroarea, enum-urile nu se pun niciodata sub paranteze.
  8. Per ansamblu comanda arata cam asa (desigur ca este un BASIC de unde tu poti porni pe mai departe modificarea propriu-zisa): new TEvent, FastEventText[64]; CMD:text(playerid, params[]) { if(pInfo[playerid][pAdmin] < 6) return SendClientMessage(playerid, -1, "Nu ai minim Admin Level 6!"); if(sscanf(params, "s[64]", params)) return SendClientMessage(playerid, -1, "Sintaxa: /text (cuvant)"); new string[150]; return format(FastEventText, 64, "%s", params), TEvent = 1, format(string, 150, "Event: Primul care scrie ''%s'' primeste un premiu surpriza.", FastEventText), SendClientMessageToAll(0xADD63CFF, string), 1; } Si pentru a vedea daca cuvantul scris in chat este corect foloseste-te de callback-ul "OnPlayerText", verifici daca "TEvent" este egal cu 1 si dupa care treci la verificarea cuvantului scris. (Foloseste un singur if pentru ambele conditii)
  9. Ai un server care foloseste pluginul "fixes", acesta a fost lansat in urma cu 2-3 ani pentru a remedia problemele din SA-MP care n-au legatura cu serverul, la el au contribuit diversi scripteri/programatori straini. Iti lipseste o functie din el si drept rezultat primesti aceasta eroare. Incearca sa-l descarci din nou de pe internet si sa-l instalezi in GM de la 0 incat sa fie dotat cu toate functiile cu care a fost lansat.
  10. Ai pierdut virgula din format sau ai valori suplimentare peste ce variabile ai ales sa inserezi la crearea unui cont. Eroarea poate respectiva poate sa apara si din cauza asta: insert into players (name, Age) values (name, 3, 23) Contul nu mai exista la relog pentru ca din cauza acestui bug nu se salveaza in baza de date.
  11. Tine cont de primul if pe care ti l-a dat colegul MiritaXD, mai exact: if(clickedid == Text:INVALID_TEXT_DRAW) Trece in acest IF codul pe care il gasesti la textdraw-ul "X" atunci cand este apelat si muta-l in acest if. (Desigur, cu parantezele aferente) Mai "la obiect", acest if este apelat atunci cand "apesi" pe un textdraw invalid, tasta "ESC" este facuta de la "mama ei" ca si textdraw selectiv atunci cand este apasata, a fost facuta asa tocmai pentru a inchide in orice circumstante dialogurile (deschise)! Dar spre exemplu daca ai un TextDraw selectiv deschis si pe langa asta mai deschizi si un dialog atunci cand "ESC"-ul este actionat prima data se inchide TextDraw-ul Dialogul fiind deschis in continuare. Si bine inteles, mai apesi odata ESC sa inchizi si dialogul deschis anterior. ATENTIE: Daca ai un textdraw selectiv deschis care nu-ti da voie din script sa-l inchizi cu ESC (returneaza SelectTextDraw) si pe langa asta ai si un dialog deschis, nu vei putea inchide dialogul decat daca actionezi continuu tasta ESC (apasata).
  12. Nu jucatorii in sine afecteaza lagul unui server ci actiunile pe care ei le exercita asupra tuturor sistemelor care se gasesc in GM-ul respectiv. Poti sa ai 1000 playeri pe un server prost optimizat cu 100k linii si serverul v-a merge relativ in parametrii optimi (DOAR DACA: ei doar stau degeaba si ai un host cu potential), asta in cazul in care nu ai functii/timere globale care actioneaza mai mereu. Sistemele/functiile sunt raspunzatoare de lagul unui server (desigur, si hostul dar aici nu trebuie sa-ti faci probleme daca tu stii ca esti gazduit de cineva serios si potent sa faca fata cerintelor tale ridicate privind o masa mare de jucatori). Sunt foarte multe tutoriale si tips-uri pe care colegii mei le-au postat aici pe forum si de unde se poate documenta fiecare, internetul si forumul oficial SA-MP este plin totodata de astfel de tutoriale, trebuie doar sa vrei ca schimbarea sa aiba loc.
  13. Erorile "vin" de la o singura linie si in eventualele cereri de ajutor de aici iti recomand sa ne lasi si linia indicata de compilator, respectiv linia "11210" in acest caz. Primul este un warning si iti este afisat din cauza ca nu lucrezi ordonat. (Documenteaza-te te rog aici, foloseste TAB-ul pentru spatiul de 4 caractere lipsa) Dar in orice caz, poate sa para destul de obositor si se poate remedia aceasta problema cu: "#pragma tabsize 0", adauga functia asta la inceput de GM. Cum ar trebui sa arate linia pentru a anula toate avertizarile date de compilator: case 10: { switch(showserverjobgoal[playerid]) { case 0: { showserverjobgoal[playerid] = 1; new manevra[64]; format(manevra, 64, "~g~$%s~n~~w~out_of~n~$70.000.000", FormatNumber(server_jobgoal)); TextDrawSetString(jobgoaltextdraw[1], manevra); TextDrawShowForPlayer(playerid, jobgoaltextdraw[0]); TextDrawShowForPlayer(playerid, jobgoaltextdraw[1]); } case 1: { showserverjobgoal[playerid] = 0; TextDrawHideForPlayer(playerid, jobgoaltextdraw[0]); TextDrawHideForPlayer(playerid, jobgoaltextdraw[1]); } } } Codul acesta nu prezinta erori de ordin tehnic, cu siguranta problema este in alta parte, retine ce ti-am spus mai sus. Cat pentru a2-a problema cu HUD-ul, n-am inteles problema in sine si din acel cod expus aici chiar nu putem gasi o cauza responsabila pentru bug.
  14. Eyser

    Problema

    Problema poate sa vina din mai multe parti implicate direct in acest sistem. Daca culoarea nu se seteaza la vehicul inseamna ca functia "ChangeVehicleColor" primeste un ID de vehicul gresit! Aici poti sa faci un debug sa vezi daca Id-ul de vehicul din variabila "Vehicles[vehicleData]" este corect, dar functia in sine e una incorecta! Folosesti variabilele "color1" si "color2" in dialog si acestea nu sunt actualizate de nimic, pe langa asta in functia "ChangeVehicleColor" actualizezi enum-ul vehiculului cu cele 2 variabile. Daca aceasta functie seteaza culoarea doar pentru un anumit ID (vehiculele au 2 ID-uri de culoare) seteaza culoarea doar pentru ID-ul respectiv. In dialog ai pus IF-ul sa accepte si culoarea 0 (negru) dar aceasta nu v-a functiona intrucat folosesti asta "if(Vehicles[VehicleColor][0])". Poti s-o stergi, foloseste asta pentru un "bool" spre exemplu, in orice caz daca ID-ul de culoare este 0 nu-ti v-a seta culoarea pe vehicul dar ti-o actualizeaza in baza de date si la relog/server restart vehiculul v-a avea culoarea neagra, eu am sters-o din aceste motive din functia ta. Functia corecta: case PCar_D+1: { if(!response) return true; if(strval(inputtext) >= 0 && strval(inputtext) <= 255) { new i = CosminInfo[playerid][CarVCP]; Vehicles[i][VehicleColor][0] = strval(inputtext); ChangeVehicleColor(Vehicles[i][vehicleData], Vehicles[i][VehicleColor][0], Vehicles[i][VehicleColor][1]); Vehicles[i][VehicleInterior] = GetPlayerInterior(playerid), Vehicles[i][VehicleWorld] = GetPlayerVirtualWorld(playerid); UpdateVehicle(i, 1), SaveVehicle(i); } else SendError2(playerid, "Please insert a model between 0 and 255 caracters!", "Te rugam sa inserezi un model intre 0 si 255 caractere!"); } Cat pentru salvarea in baza de date daca nu functioneaza verifica "mysql_log" sau uite-te atent la "UpdateVehicle" si "SaveVehicle".
  15. Compileaza GM-ul cu extensia "-d3" pentru a afla exact linia de cod raspunzatoare de crash! Altfel nu-ti vei putea da seama exact unde este problema dacat daca te apuci de purificat fiecare linie de cod din callback-ul respectiv. "-d3" este o extensie ce se adauga compilatorului pentru a afla exact linia de cod problematica, dupa ce ai compilat intra pe server si in ".log" pe langa erorile aferente ar trebui sa gasesti si numarul liniei cu problema.
  16. In viitoarele cazuri cand vei mai face un tutorial asigura-te macar ca poate fi luat drept exemplu de oricine si aici vorbesc de optimizare dar si de sistem in sine. Trebuie sa inveti sa lucrezi ordonat si frumos de la inceput, in viitor se mergi cu amandoua in "tandem" si nu sa-ti completezi lipsurile din trecut abea atunci cand ai probleme cu asta. (Server cu jucatori si multe probleme privind lagul) Lasand asta, la o scurta privire pe care am "aruncat-o" aici observ ca sistemul in sine e incorect (desigur, se poate corecta) dar il numim tutorial tocmai pentru ca vine in nevoia scripterilor incepatori. In timer ai actionat asta: if(viteza < maxSpeed[vehicleid]) SetVehicleVelocity(vehicleid, vx, vy, vz); Astfel masina v-a accelera singura din senin urcand la o viteza foarte mare fara ca tasta "W" sa fie actionata.
  17. CINE ESTI? - Tanar pasionat de Web Development cu o experienta totala adunata de ~3 ani in acest domeniu fascinant si inovativ pentru mine. CE-MI POTI OFERI? - Servicii web de mare anvergura, ca si exemplu: Index Gaming, Diverse functii/aplicatii pentru Panel (sanctiuni direct de pe panel in joc prin sockets/MySQL, este doar un exemplu) si tot felul de lucruri care iti trec tie prin cap, cu siguranta esti o persoana dinamica. Punctul meu forte este atentia foarte mare la detalii (stii... lucrurile marunte fac diferenta). Stilul meu de lucru este dominat de ordonare si de dorinta pe care o am sa fac totul intr-o lumina cat mai clara. (Optimizarea este si ea luata in calcul foarte serios) Dupa terminarea proiectului acesta este prezentat clientului, dupa care clientul are obligatia sa ofere intai banii dupa care primeste intregul proiect si poate face orice cu acesta. CE TE RECOMANDA? - Sunt creatorul GM-ului Bottles pe care l-am vandut aici, n-am avut absolut nicio critica/reclamatie, totul s-a facut intr-un mod transparent si cu respect fata de clientii care l-au cumparat, de asemenea corectitudinea ma reprezinta si aici incat am respectat support-ul FREE pe care l-am oferit clientilor pana la ultimul client. Toti s-au declarat multumiti. PROJECT CREATED FOR YOU! - Inseamna ca doar tu beneficiezi de proiectul pentru care m-ai contactat si v-a ramane doar al tau, el nefiind postat sau vandut nimanui! L-ai cumparat? Ramane doar pentru tine! VREAU SA TE CONTACTEZ! - ID Skype: mihai.nip | Mail: [email protected] | SAU: PM Forum.
  18. Sigur, lista actualizarilor este pe forum. PS: Scuzati x2, pe o versiune IPB recenta posturile se suprapun la un interval scurt de timp, greseala mea.
  19. A fost doar un mic videoclip mic reprezentativ in care anuntam deschiderea, desigur ca se poate face si ceea ce mi-ai recomandat tu si nici nu o sa exclud aceasta varianta, pentru ca in viitorul apropiat o sa realizam un video si pe acest "segment" de inters pentru jucatori. Multumesc pentru sfat, o zi buna sa ai.
  20. https://www.youtube.com/watch?v=A9XaJnE0g5E PANEL: https://rpg.linkmania.ro/ IP: samp.linkmania.ro:7777
  21. Lasa pool-ul ala pe care il stiu toti (un sistem aproape chel, fara contorizare scoruri adversar sau altceva, te joci singur), intra pe server sa vezi cum este el facut, avea cateva moduri si nu stiu de ce i-au disparut o parte din TD-uri / informatii. Exista mese de joc, nu poti juca doar la una. Bara aia de SPEEd e facuta cu ajutorul " Progress Bars " M-am folosit doar de Physics, daca exista un sistem pe undeva prin lumea asta nu inseamna neaparat ca l-ai copiat cod cu cod doar pt ca asa e el acolo sau doar pentru ca el a aparut primul si al tau mai tarziu.
  22. https://www.youtube.com/watch?v=j-OBC6F4YAU Parerile voastre sunt constructive pentru mine, poate aveti sugestii.
  23. Eyser

    O intrebare

    Salut, Am o intrebare, n-am mai conectat de multa vreme un server SAMP la PHP mai exact sockets. Stie cineva la socket_connect($socket, '127.0.0.1', '7778') ce trebuie trecut la IP? 127.0.0.1 nu merge, am incercat sa pun toate IP-urile si de la web host si de la server si degeaba. Preciezez ca web host-ul este diferit fata de serverul de SAMP, web host-ul are instalat sockets-urile. Multumesc pentru eventualele raspunsuri. Zi faina tuturor.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.