Jump to content

MAC1

Membru
  • Posts

    66
  • Joined

  • Last visited

    Never

Posts posted by MAC1

  1. Logic ca apare...daca ai pus functia care trimite mesajul (BroadCast in cazul de fata) intr-un for.

    Si nu apare de 20 de ori, apare in functie de numarul de playeri de pe server. Daca ai 400 de jucatori, apare de 400 de ori.

    Scoate functia din for si pune-o mai jos putin.

  2. Start -> run -> cmd -> ipconfig

    Teoretic o sa-ti arate acelasi ip care ti-l arata si pe site-urile alea.

    Sau roaga pe cineva care are server samp sa faca repede o functie getIP, apoi cand te loghezi pe serverul lui o sa-i apara lui IP-ul tau, dupa care ti-l spune tie.

    later edit: Stai, tu nu iti gasesti IP-ul sau nu iti arata serverul pe IP-ul respectiv?

  3. Nu ai nevoie de timer pentru o chestie de genul...

    Declari o variabila care sa retina un UTS (Unix TimeStamp)

    Cand jucatorul intra in primul checkpoint, se salveaza UTS-ul curent in variabila.

    Cand jucatorul intra in urmatorul checkpoint faci: UTS-ul curent - UTS-ul din variabila (de la primul checkpoint) si il decodezi.

    Astfel, lucrezi mai eficient si dpdv al memoriei si al timpului de executie (la nivel mic, ma rog...).

  4. De ce te apuci sa scrii un tutorial daca nu ai cunostintele necesare?!

    Le dai altora informatii gresite...

    Nu am stat sa citesc tot tutorialul pentru ca a fost de-ajuns sa vad a doua bucata de cod pusa de tine acolo...

    Fa o diferenta intre ce ai scris tu si ce scriu eu:

    enum pInfo 
    { 
    	AdminLevel,
    	Level,
    	Cash,
    	Password
    };
    
    new PlayerInfo[MAX_PLAYERS][pInfo];
    

    Imi pare rau, dar nu poti sa te apuci de scris tutoriale cand tu nu stii sa faci nici macar pentru tine!

  5. Anakin" post="148724" timestamp="1373985986"]

    Acum 18 ore a aparut R29 <3 .

    Pluginul lui Dan numai este asa rapid . In R21 MySQL Facut De BlueG sa zic asa era mai incet ca cel al lui Dan :) . Dan este roman apropo :D . De cand au introdus Multi-Thread Este cel mai rapid dintre toate , crede-ma . Au precizat si in topic-ul principal si a aratat si stuntman in cate secunde sa incarca cu R26 nu cu R29 :)) .

    Nu am mai verificat sa-mp.com de ceva vreme, asa ca nu am avut ocazia sa vad ce s-a mai scos pe-acolo.

    Eficienta unui program / plugin nu consta doar in timpul lui de executie...

    Anakin link=topic=28113.msg148724#msg148724 date=1373985986]

    Ce varsta ai ? Daca ai terminat facultatea sau esti la facultate ti-as da 20 - 23 ani :) .

    Fac 19 pe 19, luna asta. Varsta e irelevanta in programare.

    Anakin link=topic=28113.msg148724#msg148724 date=1373985986]

    Sper sa il continui mai departe !

    O sa mai lucrez ceva pe el, ii mai adaug cateva functii, dar e un plugin mai mult demonstrativ, pentru ca nu ma pot compara cu "granzii" sa-mp-ului si nu ar avea rost sa mai dezvolt si eu un plugin MySQL performant din moment ce exista 2 bune.

    Am de gand sa scot pe viitor un plugin cu permisiuni pentru grupuri / fiecare jucator in parte. Ceva in genul permisiunilor TeamSpeak, daca stii, doar ca pentru sa:mp; adica ceva foarte bun pentru administrarea serverelor.

    Mai am de gand sa fac un soft pentru serverele sa:mp prin care un jucator sa poata avea acces la statisticile lui fara sa intre in sa:mp, dar asta dupa ce termin cu admiterea la facultate (care e chiar pe 19)...

    Anakin link=topic=28113.msg148724#msg148724 date=1373985986]

    Felicitari . Eu cred ca nu voi putea sa fac un dasta neam la varsta pe care o am acum =)) .

    Esti pe urmele lui Dan .

    Cum am spus, varsta e irelevanta in programare.

    Nu-s pe urmele lui Dan, nici nu intentionez sa fiu, chiar daca el e un programator mult mai bun ca mine.

  6. Ai uitat sa pui ; dupa declararea variabilei si a antetului functiei:

    new tutorial1;
    //--------------
    forward IsATutorialCar(carid);
    
    Apoi, codul asta
    public IsATutorialCar(carid)
    {
    if((carid == tutorial1))
    	{
    		return 1;
    	}
    	return 0;
    }
    
    poate fi scris asa:
    public IsATutorialCar(carid)
    {
         if(carid == tutorial1)
              return 1;
         return 0;
    }
    

  7. @burnfire

    In for nu se pune virgula, ci punct si virgula.

    Modifica si in postul initial.

    for(new g=0,g<100,g++)
    
    for(new g = 0; g < 100; g++)
    

    E o diferenta intre astea doua.

    = - Se foloseste pentru a seta o anumita valoare unei functii

    Exemplu: PlayerLevel[ playerid ] = 10;

    Aia careia ii setezi tu valoarea se numeste variabila. Functia poate cel mult sa returneze o valoare sau sa o primeasca drept parametru.

  8. Sau mai simplu... :)) asa foloseam eu.

    faceam un INCLUDE si in el puneam #error Do not touch my gamemode!

    E acelasi lucru cu ce a spus DarkyTheAngel...

    Daca-i dai include-ul lui X, el poate edita chestia asta fara probleme.

    Daca nu-i dai include-ul, nu o sa poata compila gm-ul.

    Deci nu reprezinta o metoda sigura "anti-stergere credite".

    In plus, cel ce a facut topicul vrea sa stie cum sa faci ca atunci cand modifici creditele sa primeasca ala eroare, nu tot timpul.

    later edit: Rock, y_lock face acelasi lucru pe care il face si un plugin "protectie", doar ca y_lock e mai usor (oarecum).

  9. Daca acel "cineva" ar fi un incepator (de obiecei incepatorii sterg creditele), nu ar sti ce sa faca.Oricum, nu am zis ca bucata asta de cod functioneaza ca o protectie, iar aici pun cuvantul "protectie" intre ghilimele, eu am aratat ce se poate face ca sa primesti o eroare (doar un simplu exemplu, nimic mai mult).

    Atata timp cat o sa aiba acces la fisiere, o sa modifice si daca s-a apucat de 5 minute de programare (o sa intrebe pe sa-mp.ro/com si tot o sa scoata directivele alea).

    Cum am spus, singura varianta 100% functionabila e un plugin, dar te complici aiurea.

  10. #define HAVE_PROTECTION  ( 0 ) // Schimba pe "1" daca vrei ca protectia sa fie activa.

    if HAVE_PROTECTION == 1

        #error Do not touch my gamemode!

    #endif

    Cam asa ar trebui sa arate.

    Your argument is invalid.

    Daca cineva pune mana pe script, crezi ca i-ar fi greu sa stearga bucata asta de cod?

    Din moment ce are acces la toate fisierele pwn / inc, cum sterge creditele, asa poate sterge si "protectia" asta.

  11. Aveam aseara destul de mult de invatat pentru admiterea la facultate si am zis ca cel mai bine e, cand ai de invatat, sa nu inveti. Asa ca m-am apucat de un plugin MySQL (nu ca nu ar mai exista deja vreo 4, 2 dintre ele chiar foarte bune).

    Nu va asteptati la un super plugin, ca am lucrat doar vreo 3-4 ore pe el, deci nici nu se pune problema de multi-threading, sau cine stie ce alte smecherii. E doar un plugin super-simplu, cu cateva functii in el. (sper sa ii fac niste upgrade-uri pe parcurs).

    Momentan am facut doar versiunea pentru windows deoarece Sfantul Ubunutu nu mai vrea sa coopereze, deci trebuie sa-l instalez iar.

    Functii:

    native 		mysql_connect(hostname[], username[], password[], database[]);
    native 		mysql_debug(mode);
    native 		mysql_close();
    native 		mysql_ping();
    native 		mysql_query(query[]);
    native 		mysql_free_result();
    native 		mysql_store_result();
    native 		mysql_num_rows();
    native 		mysql_real_escape_string(source[], dest[]);
    native 		mysql_fetch_row(result[]);						//la asta inca lucrez, crasheaza sv
    

    Download binary + source: http://www.fileshare.ro/e29710754

    PS: Nu aveti niciun motiv sa folositi plugin-ul asta pe un server oficial (ma rog, nici nu prea puteti, ca-i doar versiune win momentan); folositi plugin-ul lui Dan, e cel mai bun in domeniu.

    Daca aveti nelamuriri / intrebari / ceva de adaugat, sunteti liber sa postati.

  12. Ma crezi ca si eu sunt la liceu si am 5 la matematica 21.gif?

    Am trecut si eu prin asta...in clasa a XI-a cand am dat de analiza matematica. La algebra aveam 8-9, pe cand la analiza numai 5 si 6 (ma rog, am luat si un 2). Insa in clasa a XII-a a inceput sa imi placa mult analiza si am avut numai 10 pe linie, dar m-a stricat algebra cu vreo 2 note de 8 si mi-a iesit media 9 (si pe primul si pe al doilea semestru).

    //later edit: Am deviat de la subiect pentru ca omul m-a intrebat ceva si era urat sa nu-i raspund.

  13. Nu au ce sa caute la tutoriale, pentru ca nu-s tutoriale...sunt doar niste explicatii. Nu-s menite sa ajute utilizatorii de pe forumul asta in scripting.

    Si daca stii geometrie tridimensionala, si daca nu stii, la nivelul la care se programeaza in PAWN, nu ai nevoie de informatii asa "complexe" (ma rog, ele nu-s complexe deloc, sunt destul de simple).

    In fine, ideea principala la tot ce am scris mai sus e ca functia IsPlayerInRangeOfPoint(params) verifica daca raza sferei formata din coordonate si "range" e mai mare decat distanta de la jucator, la centrul sferei.

    PS: Am terminat liceul, sunt in proportie de 80% deja student la info.

  14. Asa...am zis ca daca tot e sarbatoare azi, sa mai iau putin o pauza de la activitatile mele si sa-ti explic cum sta treaba cu functia asta.

    Explicatia e asemanatoare cu cea de la GetPlayerSpeed (vezi topicul cereri tutoriale), pentru ca pe asta se bazeaza cam toata geometria tridimensionala.

    Bun. Avem urmatoarea situatie generala:

    7Ddeob7.png

    Ca sa intelegi cat de cat, trebuie sa fixam cateva lucruri:

    - chestia aia nu e un cerc, ci o sfera cu centrul O in originiea sistemului.

    - liniile punctate sunt puse acolo sa arate faptul ca sfera aia nu e cerc, si ca are volum.

    - linia portocalie (notata cu R) e raza sferei, adica segmentul care pleaca din originie si ajunge pana la marginea sferei, iar in joc, ea reprezinta distanta (range).

    Originea (O) a sistemului xOy reprezinta coordonata tridimensionala in care vrem sa verificam daca se afla jucatorul.

    Cum R este distanta pentru care vrem sa facem verificarea, se creeaza automat acolo o sfera de raza R si centru O. (imagineaza-ti ca din punctul O, adica de la coordonatele alea x,y,z din functie, duci segmente de lungime R in toate directiile, adica duci un numar infinit de segme...asa se creeaza o sfera).

    In functia noastra, avem data raza (range), deci tot ce trebuie sa facem este sa vedem cum este distanta de la jucator la centru sferei fata de raza (daca e mai mare, inseamna ca jucatorul nu e in sfera, iar daca e mai mica, jucatorul se afla in sfera).

    Toate bune si frumoase, noi stim lungimea razei (adica distanta de la origine (O) la un punct oarecare de pe sfera) (pentru ca e parametru in functie), insa nu stim distanta la care se afla jucatorul fata de origine (adica distanta de la O la A, lungimea segmentului OA).

    Pentru a calcula distanta la care se afla jucatorul fata de origine (O), trebuie sa "descompunem" segmentul OA in functie de segmentele aflate pe cele 3 axe (ox,oy si oz).

    Asta-i partea de geometrie de clasa a 7-a, o sa trec mai repede pe-aici pentru ca am mai explicat-o in topicul cu GetPlayerSpeed.

    ___________

    B proiectia lui A in planul DBC => triunghi OBA dreptunghic => OA^2 = OB^2 + BA^2  => OA^2 = OB^2 + OE^2.

    D proiectia lui B in planul EOD => triunghi ODB dreptunghic => OB^2 = OD^2 + DB^2 = OD^2 + OC^2

    Din cele de mai sus => OA^2 = OC^2 + OD^2 + OE^2.

    Acum ca am "descompus" OA-ul pe cele 3 coordonate, trebuie sa obtinem coordonatele in punctul A. (se afla cu functie -> GetPlayerPos(params)). Sa presupunem ca le-am salvat in punctul P(x,y,z) = P(C,D,E) -> adica proiectiile punctului A pe toate cele 3 axe. Originea, cum am spus la inceput, are si ea 3 coordonate x0,y0,z0, adica o scriem ca O(x0,y0,z0) -> x0,y0,z0 sunt parametrii din functie.

    Analitic, aflam distanta OA care este egala cu OA = (C-x0)^2 + (D-y0)^2 + (E-z0)^2 = o sa ne dea un numar.

    Si de aici, pur si simplu comparam cele doua segmente: OA si R, daca OA e mai mare decat R => jucatorul nu e in sfera, altfel => e in sfera.

    Acum, ideea e ca eu am simplificat putin treaba, ca sa fie mai usor de inteles, pentru ca sfera aia trebuia sa fie pusa si ea intr-un alt sistem de axe xOy, dar nu schimba prea mult problema, ca s-ar fi identificat niste versori din ambele sisteme, insa daca s-ar uita un profesor de mate peste chestia asta mi-ar reprosa lucrul asta.

    _____

    Daca nu ai inteles anumite lucruri lasa un reply sau da-mi PM si-ti raspund cand am timp.

  15. Teoretic, nu e nici in cerc, nici in patrat, e in sfera, pentru ca e vorba de un sistem de referinta tridimensional.

    Daca vrei, o sa fac o "analiza" amanuntita a functiei si o s-o postez pe-aici.

    Dar nu stiu sigur cand o sa am ceva timp liber, ca-s destul de ocupat in perioada asta.

×
×
  • 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.