Jump to content

Leaderboard


Popular Content

Showing content with the highest reputation since 07/24/2019 in all areas

  1. 2 points
    Salut! Anterior am publicat un gm Khain RPG si vreau sa stiu daca ma apuc de o noua versiune va fi actual sau nu? Astept pareri si daca doriti anumite sisteme in gm,le lasati aici. Bafta!
  2. 1 point
    Sistemul pe care urmeaza sa-l prezint este cel de opencrate, care vine la pachet cu cel de skins. Il dau la 5 euro psf/paypal. Toate dovezile le aveti aici: https://imgur.com/a/2x3yplv
  3. 1 point
    Salut eu sunt MIKE[] si acesta este primul meu gamemod pe care il postez. Am muncit 2 luni la el fara pauza si as spera sa imi apreciati munca. O sa va prezint ce am editat si ce am rezolvat la el. 1:Am adaugat /getgift. 2:Am adaugat un /quest foarte frumos. 3:Am schimbat spawnul 4:Am rezolvat bugul de la /shop 5:Am rezolvat bugul cand dai /fly nu prea mergea Factiuni LSPD National Guard FBI Hitman News Reporter Taxi Los Santos Grovre Street Ballas Gang Los Astecas San Fierro Los Vagos Joburi 1:Bus Driver 2:Detective 3:Mechanic 4:Garbage-Man 5:Trucker 6:Fermier 7:Drug Dealer 8:Arms Dealer Cam atat si cu joburile Link GM:http://www.mediafire.com/file/qt7x5pt5laqbvw3/RPG.OG-RANK.RO+EDIT+BY+MIKE[].rar VirusTotal:https://www.virustotal.com/#/file/2a561c5e214ce1778e4f13fcaedbd1eac3aea362a0bd74a8546eeab7c29b2842/detection sper ca va fost de ajutor gm si ce sa va zic bafta! merit un +1
  4. 1 point
    EDIT 8: Rezolvat bug la comanda /so Rezolvat bug la /lock /shop gen neph readaugate mai multe comenzi am scris pe chat se pot vedea in poze ce am readaugat gard fish readaugat rezolvat sistemu l de ban uri multe chestii nu se salvau in baza de date speedometer a primit si el modificari ceea ce a mai ramas de rezolvat sunt quest urile cam atat logo ul la server (td u) a primit si el modificari scoase multe forward uri si chestii aiurea prin gamemode coordonatele de la lspd la intrare au primit modificari era prea departe de usa coordonatele de la business urile de tip gun shop de la intrare au primit modificari /buymaterials inutila scoasa se putea abuza de ea(1kk mats 900k wtf) adaugata comanda /staff se poate vedea staff ul cat si online da si offline gamemode ul arata mai frumos mai promotator recomanda sa folositi baza de date din arhiva la EstiFondator sa puneti numele voastre Gamemode ul nu are comenzi ascunse adaugat /remote pentru function estifondator /fspecid adaugat /resetgift a primit modificare e ok acum poti apasa tasta shift daca esti spec pe un player si sunt mai multi playeri pe sv te pune spec pe urmatorul player EDIT 9: Toate forward urile sterse si public si gm u a fost trecut pe function stock isplayerfalling a fost modificat toate plugin urile si mai multe include uri au fost actualizate la cele mai noi versiuni Camera_move modificata pare ok acum EDIT 10: Nu mai primesti mute de la anti spam daca ai admin 1+ va aparea cine te omoara un politist on duty sau off duty am zis sa o bag si eu =)) se poate lua kick la possible global kill acum se poate castiga mp3 player la giftbox acum EDIT 11: rezolvat un bug in care daca un player era in hq si alt player dadea find pe el afisa checkpoint ul gresit nu iti mai poti da arma cu /givegun daca esti in si puteai abuza de asta EDIT 12: Vehicule rainbow /rainbowveh disponibila pentru utilizatorii VIP functia de kick a fost imbunatatita mici buguri gasite rezolvate EDIT 13: /spawnchange pe dialog de acum au fost scoase niste dialog uri aiurea din gamemode baza de date a primit modificari la users au fost scoase niste include uri inutile parolele au fost trecute pe md5 daca luati acum gm u si ii dati drumul si aveti baza de date de la versiunile anterioare o sa va dea wrong password recomand wipe ca sa va mearga alte chestii degeaba si inutile scoase din gm adaugat plugin ul Whirlpool EDIT 14: Toate plugin urile aduse la cele mai noi versiuni mai ales mysql R39-6 /getjob a primit modificari este mai ok acum nu mai poti folosi mai multe comenzi in timpul unui rob adica astea de find au fost sterse 2 job uri mi se pare 2 sau 3 comenzi care nu aveau legatura cu modul de joc comenzi facute aiurea multe chestii nu se salvau in baza de date aveti functia EstiFondator in gm unde va puneti numele nu fac reclama la numele de la sv da asa a ramas asa am avut eu sv ul il schimbati si voi chiar nu mai stiu refacute cv la factiuni mod de joc imbunatatit plugin uri imbunatatite, include uri + altele mai cautati si voi chiar nu mai stiu asta e ultimul gm sau daca mai vreti sa mai fac cate cv o sa fac cand am timp multumesc celor care mi au dat +1 la gm urile anterioare pup all ! + progressbar si nuj ce etc Update's: - Rezolvate mai multe chestii in baza de date cateva remedieri - Rezolvate niste buguri care au aparut in gamemode care nu merita mentionate Download: http://www.girlshare.ro/3490178168.4
  5. 1 point
    Salutare, după cum am şi spus, am revenit cu partea a 2 -a a tutorialului "Cum să creezi o nouă facţiune de la 0". În acest tutorial voi arată cum o să va puneţi locul de spawn, comenzile de enter-exit, iar la enter-exit ne vom juca puţin cu VirtualWorld-urile, şi ne vom juca şi cu 3DText-urile şi Pick-urile. Spawn-ul îl vom face la 2 din facţiuni Police Departament şi Police Blue Berry(cred că aşa se numea acel sat), fiecăruia îi vom pune şi o sala de antrenament, iar la spawnare să primească o culoare, când vorbeşte să arate o culoare, şi să primească diferite beneficii de gen arme, bani sau viaţă plină.... Va mai urmă o ultima parte. O să vedeţi la timpul potrivit în ce va constă şi a 3-a parte, dar să rămânem la "oile noastre" şi să începem. Pentru început avem nevoie de poziţii, aşa că mergem pe server şi salvăm cateva poziţii. 4 poziţii sunt la Police Departament Los Santos, ele fiind: 1)locul de spawn 2)locul de unde intră poliţistul în secţie(în partea de jos, lângă spawn, o să vedeţi voi) 3)Locul de unde intră civili în secţie 4)Locul de unde va intră şi va ieşi poliţistul din sala de antrenament Celelalte poziţii sunt la fel, dar sunt poziţiile de la Police Blue Berry. ACUM, MERGETI DUPA URMATORII PASI: IAR NOI NE VOM FOLOSI DE COORDONATELE ACESTEA: O să aveţi nevoie de tutorialul: Ne vom folosi de aceste coordonate, ele reprezintă poziţiile de spawn în San Andreas: Acum, că am făcut rost de coordonate, vom merge şi vom face în felul următor. Ne vom uită după interioarele dorite de AICI. Mergem acum la publicul OnPlayerSpawn şi punem aşa: public OnPlayerSpawn(playerid) { if(IsPlayerConnected(playerid))//verificăm dacă playerul este conectat { if(P_Data[playerid][pMember] == 1 || P_Data[playerid][pLeader] == 1)//verificăm dacă playerul are lider sau member = 1 { SetPlayerPos(playerid,1532.0398, -1677.7267, 5.8906);// dacă va avea lider sau member = 1, sau amândouă sau una dintre ele, îl va spawna la locul unde am vrut, //SetPlayerPos- funcţia ; playerid- playerul care se spawneaza, iar restu , sunt coordonatele de la care am plecat, cele din poză pe care le-am scos în evitenta. SetPlayerInterior(playerid,0);// nu este într-o clădire sau altcv , deci îi vom seta 0 când se spawneaza SetPlayerVirtualWorld(playerid, 0);// îi setăm VirtualWorld-ul 0 , deoarece în virtual world 0 sunt maşinile şi obiectele şi altele, despre virtual world vorbim puţin mai încolo } else if(P_Data[playerid][pMember] == 2 || P_Data[playerid][pLeader] == 2)// verificăm dacă playerul are lider sau member = 2 { SetPlayerPos(playerid, 627.3973, -571.4391, 17.9145);// dacă va avea lider sau member = 2, sau amândouă sau una dintre ele îl va spawna în faţă uşii, va fi acolo şi coordonată de /enter SetPlayerInterior(playerid,0);// nu este într-o clădire sau altcv , deci îi vom seta 0 când se spawneaza SetPlayerVirtualWorld(playerid, 0); } else// aici vom verifică dacă nu are lider să îl spawneze la locul dorit { SetPlayerPos(playerid, 1479.6548, -1725.2207, 13.5469); SetPlayerInterior(playerid,0);// nu este într-o clădire sau altcv , deci îi vom seta 0 când se spawneaza SetPlayerVirtualWorld(playerid, 0); } } return 1; } Aici dacă vrem mai îi adăugăm o armă şi , dacă vrem, îi scădem 50$ la fiecare spawn, pe unele servere era denumit Medic Bill, adică îi da viaţă plină şi de aceea trebuie să plătească taxa de sănătate... doar dacă credeţi că e necesar, poftim şi un model: if(P_Data[playerid][pMember] == 1 || P_Data[playerid][pLeader] == 1)// verificăm dacă playerul are lider sau member = 1 { SetPlayerPos(playerid,1532.0398, -1677.7267, 5.8906); SetPlayerInterior(playerid,0); SetPlayerVirtualWorld(playerid, 0); GivePlayerWeapon(playerid, 31, 250);// îi da armă cu id 31(M4A) cu 250 gloanţe GivePlayerMoney(playerid,-50);// îi scade suma de 50$ din cont SetPlayerArmour(playerid, 100);// pentru că e poliţai îi da şi 100 armură //Voi puteţi şterge ce nu va convine, treaba voastră , eu am arătat că se poate şi treaba asta, o putem lungi foarte mult , dar nu cred că are sens } Voi adăugaţi care cum vreţi de preferinţă. Acuma că am făcut spawn ul mergem şi facem comenzile de enter şi exit. Mergem pe site-ul care l-am propus mai sus, şi alegem interiorul, interiorul fiind cu id 6 şi cu poziţia 246.783996,63.900199,1003.640625 , interiorul de la Police Departamant Los Santos. Facem prin 2 metode. Prima metodă comenzii , comandă e prin zcmd, totu simplu şi uşor , şi metodă 2 , metodă prin tasta, care e mai elegant să o foloseşti, pentru că jucătorul nu se chinuie să scrie "/enter" ci apasă doar o tasta, de preferat F. Prima metodă(metodă prin comandă): Mai întâi mergem şi ne punem o ordine în coordonate, adică care sunt de enter, care sunt de spawn , care sunt de intrare, de ieşire, în fine adică de unde îl luăm şi unde îl ducem. Eu mi-am pus deja o ordine şi facem în felul următor. 2 comenzi /enter şi /exit, ambele fiind pentru toate comenzile. Aici vreau să va vorbesc despre VirtualWorld-uri . ele pot fi denumite şi "dimensiuni" deoarece 2 playeri pot fi în aceaşi poziţie , dar în VirtualWorld-uri diferite, deci ei nu se văd, dar sunt în aceaşi poziţie nu se văd, nu se ating, cu VirtualWorld vom crea şi sala de antrenament , adică vom folosi acelaşi interior, dar fiecare facţiune va avea virtual World ul ei , pentru că playerii din 2 facţiuni diferite să nu se întâlnească, adică cumva vom avea 2 construcţii identice , dar în zone diferite(sau cu asta putem păcăli necunoscătorii). mcmd:enter(playerid,params[]) { if(IsPlayerConnected(playerid))// verificãm dacã playerul care foloseºte comandã este conectat { // facem comandã pentru civili: if(IsPlayerInRangeOfPoint(playerid,2, 1554.6113, -1675.6897, 16.1953))// verificãm dacã este în jurul coordonatei pe care am salvat-o , primul "2" de lângã playerid reprezintã distanþã dintre poziþie ºi player, adicã 2 metri {// dacã este în jurul poziþiei respective, la 2 metri distanþã TogglePlayerControllable(playerid, 1);// îl facem sã se poatã miºcã SetPlayerPos(playerid, 246.783996,63.900199,1003.640625);// îl teleportãm în poziþia interiorului SetPlayerInterior(playerid, 6);// îi dãm interior = 6, deoarece în acea poziþie, are nevoie de interiorul setat pe 6 cã sã vadã playerul obiectele, dacã nu , va cãdea în gol SetPlayerVirtualWorld(playerid, 1);// îl punem în Virtual World 1 deoarece este în interior, ºi aºa ar fi frumos dacã folosim interiorul. } // facem comandã pentru poliþist if(P_Data[playerid][pMember] == 1 || P_Data[playerid][pLeader] == 1)// verificãm dacã playerul are lider sau member = 1 { if(IsPlayerInRangeOfPoint(playerid,2, 1524.5369, -1677.8561, 6.2188))// verificãm dacã este în jurul coordonatei pe care am salvat-o ea fiind în parcarea poliþiei, deci va intrã din parcare în clãdire , nu din faþã clãdirii în clãdire {// dacã este în jurul poziþiei respective, la 2 metri distanþã TogglePlayerControllable(playerid, 1);// îl facem sã se poatã miºcã SetPlayerPos(playerid, 246.783996,63.900199,1003.640625);// îl teleportãm în poziþia interiorului SetPlayerInterior(playerid, 6);// îi dãm interior = 6, deoarece în acea poziþie, are nevoie de interiorul setat pe 6 cã sã vadã playerul obiectele, dacã nu , va cãdea în gol SetPlayerVirtualWorld(playerid, 1); } // facem pentru sala de antrenament if(IsPlayerInRangeOfPoint(playerid,2, 1568.4191, -1689.9735, 6.2188))// verificãm dacã este în jurul coordonatei pe care am salvat-o ea fiind în parcarea poliþiei , locul care vrem sã fie intrarea în sala de antrenament {// dacã este în jurul poziþiei respective, la 2 metri distanþã TogglePlayerControllable(playerid, 1);// îl facem sã se poatã miºcã // cãutãm pe forum ul respectiv interiorul de la sala de antrenament, ea având interior = 1, poziþie:1412.639892,-1.787510,1000.924377 SetPlayerPos(playerid, 1412.639892,-1.787510,1000.924377);// îl teleportãm în poziþia interiorului SetPlayerInterior(playerid, 1);// îi dãm interior = 1, deoarece în acea poziþie, are nevoie de interiorul setat pe 1 cã sã vadã playerul obiectele, dacã nu , va cãdea în gol SetPlayerVirtualWorld(playerid, 1);// aici apare virtual world 1 } } //dacã nu are lider/member = 1 , ºi folosesc comandã în preajma poziþiei, nu se vor teleporta. // voi trece peste enter-ul ºi exitul la facþiunea 2 referitor la interiorul secþiei ºi voi aratã cum mã folosesc la sala de antrenament if(P_Data[playerid][pMember] == 2 || P_Data[playerid][pLeader] == 2)// verificãm dacã playerul are lider sau member = 2 { if(IsPlayerInRangeOfPoint(playerid,2, 611.1915, -583.4981, 18.2109))// verificãm dacã este în jurul coordonatei pe care am salvat-o ea fiind în preajma poliþiei BlueBery, locul care vrem sã fie intrarea în sala de antrenament {// dacã este în jurul poziþiei respective, la 2 metri distanþã TogglePlayerControllable(playerid, 1);// îl facem sã se poatã miºcã // cãutãm pe forum ul respectiv interiorul de la sala de antrenament, ea având interior = 1, poziþie:1412.639892,-1.787510,1000.924377 SetPlayerPos(playerid, 1412.639892,-1.787510,1000.924377);// îl teleportãm în poziþia interiorului SetPlayerInterior(playerid, 1);// îi dãm interior = 6, deoarece în acea poziþie, are nevoie de interiorul setat pe 6 cã sã vadã playerul obiectele, dacã nu , va cãdea în gol SetPlayerVirtualWorld(playerid, 2);// aici apare virtual world 2 pentru a nu se întâmpina cu cei de la Police Departament Los Santos } } } return 1; } Iar în comandă /exit vom înlocui coordonatele de la IsPlayerInRangeOfPoint cu cele de la SetPlayerPos aşa: mcmd:exit(playerid,params[]) { if(IsPlayerConnected(playerid))// verificãm dacã playerul care foloseºte comandã este conectat { // facem comandã pentru civili: if(IsPlayerInRangeOfPoint(playerid,2, 246.783996,63.900199,1003.640625))// verificãm dacã este în jurul coordonatei de la intrare,în faþã uºii în police departament {// dacã este în jurul poziþiei respective, la 2 metri distanþã TogglePlayerControllable(playerid, 1);// îl facem sã se poatã miºcã SetPlayerPos(playerid, 1554.6113, -1675.6897, 16.1953);// îl teleportãm în poziþia din parcare SetPlayerInterior(playerid, 0);// îi dãm interior = 0 deoarece nu este într-un interior, ci este afarã SetPlayerVirtualWorld(playerid, 0);// îl punem în Virtual World 0 deoarece este în parcare ºi maºinile trebuie sã aparã pe harta, ele fiind în virtualWorld 0 } // facem comandã pentru poliþist if(P_Data[playerid][pMember] == 1 || P_Data[playerid][pLeader] == 1)// verificãm dacã playerul are lider sau member = 1 { if(IsPlayerInRangeOfPoint(playerid,2, 246.783996,63.900199,1003.640625))// verificãm dacã este în jurul coordonatei pe care am salvat-o ea fiind în parcarea poliþiei, deci va intrã din parcare în clãdire , nu din faþã clãdirii în clãdire {// dacã este în jurul poziþiei respective, la 2 metri distanþã TogglePlayerControllable(playerid, 1);// îl facem sã se poatã miºcã SetPlayerPos(playerid, 1524.5369, -1677.8561, 6.2188);// îl teleportãm în poziþia din parcare SetPlayerInterior(playerid, 0);// îi dãm interior = 6, deoarece în acea poziþie, are nevoie de interiorul setat pe 6 cã sã vadã playerul obiectele, dacã nu , va cãdea în gol SetPlayerVirtualWorld(playerid, 0);// la fel cã sus } // facem pentru sala de antrenament if(IsPlayerInRangeOfPoint(playerid,2, 1412.639892,-1.787510,1000.924377))// verificãm dacã este în jurul coordonatei pe care am salvat-o ea fiind în parcarea poliþiei , locul care vrem sã fie intrarea în sala de antrenament {// dacã este în jurul poziþiei respective, la 2 metri distanþã TogglePlayerControllable(playerid, 1);// îl facem sã se poatã miºcã // cãutãm pe forum ul respectiv interiorul de la sala de antrenament, ea având interior = 1, poziþie:1412.639892,-1.787510,1000.924377 SetPlayerPos(playerid, 1568.4191, -1689.9735, 6.2188);// îl teleportãm în poziþia ieºirii SetPlayerInterior(playerid, 1);// îi dãm interior = 6, deoarece în acea poziþie, are nevoie de interiorul setat pe 1 cã sã vadã playerul obiectele, dacã nu , va cãdea în gol SetPlayerVirtualWorld(playerid, 0);// aici îi dãm virtualWorld 0 pentru a apãrea maºinile, el fiind ºi VirtualWorld-ul în care se joacã playerii } } //dacã nu are lider/member = 1 , ºi folosesc comandã în preajma poziþiei, nu se vor teleporta. // voi trece peste enter-ul ºi exitul la facþiunea 2 referitor la interiorul secþiei ºi voi aratã cum mã folosesc la sala de antrenament if(P_Data[playerid][pMember] == 2 || P_Data[playerid][pLeader] == 2)// verificãm dacã playerul are lider sau member = 2 { if(IsPlayerInRangeOfPoint(playerid,2, 1412.639892,-1.787510,1000.924377))// verificãm dacã este în jurul coordonatei din interiorul sãlii de antrenament {// dacã este în jurul poziþiei respective, la 2 metri distanþã TogglePlayerControllable(playerid, 1);// îl facem sã se poatã miºcã // cãutãm pe forum ul respectiv interiorul de la sala de antrenament, ea având interior = 1, poziþie:1412.639892,-1.787510,1000.924377 SetPlayerPos(playerid, 611.1915, -583.4981, 18.2109);// îl teleportãm în poziþia de afarã, în faþã secþiei SetPlayerInterior(playerid, 0);// îi dãm interior = 0, deoarece în acea poziþie el nu mai este în interior SetPlayerVirtualWorld(playerid, 0);// aici apare virtual world 0 la fel cã ºi cel de sus, al Police-ului departament , pentru cã ambele poziþii vor avea ieºire în virtualWorld 0 } } } return 1; } Aţi observat că v-am vorbit de virtual world-uri. ATENŢIE!!!! aveţi grijă cu ele, dacă nu , playerii vor fi rătăciţi printre ele. Am mai spus şi sus, ele sunt făcute că să nu se întâlnească playerii, şi va dau şi un exemplu pe care sigur l-aţi văzut. Mergem pe un server RPG. Şi aici mergem la benzinărie , în magazin şi vedem un interior. Merge un prieten de-al vostru în alt 24/7 dar când intră, vede acelaşi interior. Ei au intrat unul de la benzinărie , celălalt din altă parte, dar sunt în aceaşi poziţie , dar nu se văd. Asta pentru că sunt în VirtualWorld-uri diferite, dar după ce ies se pot întâlni, pentru că sunt în Virtual World 0. Sper că am lămurit până aici cu interioarele şi virtualWorild-urile. Metodă a două(metodă prin tasta): Mai întâi alegem o tasta de AICI. Eu am ales tasta F/ENTER adică "KEY_SECONDARY_ATTACK ". Avem nevoie de public-ul OnPlayerKeyStateChange, iar în comandă vom înlocui în loc de CMD:enter(playerid,params[]) cu if (newkeys & KEY_SECONDARY_ATTACK) Şi va sună cam aşa: public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { if (newkeys & KEY_SECONDARY_ATTACK) { // punem poziþiile de enter if(IsPlayerConnected(playerid))// verificãm dacã playerul care foloseºte comandã este conectat { // facem comandã pentru civili: if(IsPlayerInRangeOfPoint(playerid,2, 1554.6113, -1675.6897, 16.1953))// verificãm dacã este în jurul coordonatei pe care am salvat-o , primul "2" de lângã playerid reprezintã distanþã dintre poziþie ºi player, adicã 2 metri {// dacã este în jurul poziþiei respective, la 2 metri distanþã TogglePlayerControllable(playerid, 1);// îl facem sã se poatã miºcã SetPlayerPos(playerid, 246.783996,63.900199,1003.640625);// îl teleportãm în poziþia interiorului SetPlayerInterior(playerid, 6);// îi dãm interior = 6, deoarece în acea poziþie, are nevoie de interiorul setat pe 6 cã sã vadã playerul obiectele, dacã nu , va cãdea în gol SetPlayerVirtualWorld(playerid, 1);// îl punem în Virtual World 1 deoarece este în interior, ºi aºa ar fi frumos dacã folosim interiorul. } // facem comandã pentru poliþist if(P_Data[playerid][pMember] == 1 || P_Data[playerid][pLeader] == 1)// verificãm dacã playerul are lider sau member = 1 { if(IsPlayerInRangeOfPoint(playerid,2, 1524.5369, -1677.8561, 6.2188))// verificãm dacã este în jurul coordonatei pe care am salvat-o ea fiind în parcarea poliþiei, deci va intrã din parcare în clãdire , nu din faþã clãdirii în clãdire {// dacã este în jurul poziþiei respective, la 2 metri distanþã TogglePlayerControllable(playerid, 1);// îl facem sã se poatã miºcã SetPlayerPos(playerid, 246.783996,63.900199,1003.640625);// îl teleportãm în poziþia interiorului SetPlayerInterior(playerid, 6);// îi dãm interior = 6, deoarece în acea poziþie, are nevoie de interiorul setat pe 6 cã sã vadã playerul obiectele, dacã nu , va cãdea în gol SetPlayerVirtualWorld(playerid, 1); } // facem pentru sala de antrenament if(IsPlayerInRangeOfPoint(playerid,2, 1568.4191, -1689.9735, 6.2188))// verificãm dacã este în jurul coordonatei pe care am salvat-o ea fiind în parcarea poliþiei , locul care vrem sã fie intrarea în sala de antrenament {// dacã este în jurul poziþiei respective, la 2 metri distanþã TogglePlayerControllable(playerid, 1);// îl facem sã se poatã miºcã // cãutãm pe forum ul respectiv interiorul de la sala de antrenament, ea având interior = 1, poziþie:1412.639892,-1.787510,1000.924377 SetPlayerPos(playerid, 1412.639892,-1.787510,1000.924377);// îl teleportãm în poziþia interiorului SetPlayerInterior(playerid, 1);// îi dãm interior = 1, deoarece în acea poziþie, are nevoie de interiorul setat pe 1 cã sã vadã playerul obiectele, dacã nu , va cãdea în gol SetPlayerVirtualWorld(playerid, 1);// aici apare virtual world 1 } } //dacã nu are lider/member = 1 , ºi folosesc comandã în preajma poziþiei, nu se vor teleporta. // voi trece peste enter-ul ºi exitul la facþiunea 2 referitor la interiorul secþiei ºi voi aratã cum mã folosesc la sala de antrenament if(P_Data[playerid][pMember] == 2 || P_Data[playerid][pLeader] == 2)// verificãm dacã playerul are lider sau member = 2 { if(IsPlayerInRangeOfPoint(playerid,2, 611.1915, -583.4981, 18.2109))// verificãm dacã este în jurul coordonatei pe care am salvat-o ea fiind în preajma poliþiei BlueBery, locul care vrem sã fie intrarea în sala de antrenament {// dacã este în jurul poziþiei respective, la 2 metri distanþã TogglePlayerControllable(playerid, 1);// îl facem sã se poatã miºcã // cãutãm pe forum ul respectiv interiorul de la sala de antrenament, ea având interior = 1, poziþie:1412.639892,-1.787510,1000.924377 SetPlayerPos(playerid, 1412.639892,-1.787510,1000.924377);// îl teleportãm în poziþia interiorului SetPlayerInterior(playerid, 1);// îi dãm interior = 6, deoarece în acea poziþie, are nevoie de interiorul setat pe 6 cã sã vadã playerul obiectele, dacã nu , va cãdea în gol SetPlayerVirtualWorld(playerid, 2);// aici apare virtual world 2 pentru a nu se întâmpina cu cei de la Police Departament Los Santos } } } // punem ºi poziþiile de exit if(IsPlayerConnected(playerid))// verificãm dacã playerul care foloseºte comandã este conectat { // facem comandã pentru civili: if(IsPlayerInRangeOfPoint(playerid,2, 246.783996,63.900199,1003.640625))// verificãm dacã este în jurul coordonatei de la intrare,în faþã uºii în police departament {// dacã este în jurul poziþiei respective, la 2 metri distanþã TogglePlayerControllable(playerid, 1);// îl facem sã se poatã miºcã SetPlayerPos(playerid, 1554.6113, -1675.6897, 16.1953);// îl teleportãm în poziþia din parcare SetPlayerInterior(playerid, 0);// îi dãm interior = 0 deoarece nu este într-un interior, ci este afarã SetPlayerVirtualWorld(playerid, 0);// îl punem în Virtual World 0 deoarece este în parcare ºi maºinile trebuie sã aparã pe harta, ele fiind în virtualWorld 0 } // facem comandã pentru poliþist if(P_Data[playerid][pMember] == 1 || P_Data[playerid][pLeader] == 1)// verificãm dacã playerul are lider sau member = 1 { if(IsPlayerInRangeOfPoint(playerid,2, 246.783996,63.900199,1003.640625))// verificãm dacã este în jurul coordonatei pe care am salvat-o ea fiind în parcarea poliþiei, deci va intrã din parcare în clãdire , nu din faþã clãdirii în clãdire {// dacã este în jurul poziþiei respective, la 2 metri distanþã TogglePlayerControllable(playerid, 1);// îl facem sã se poatã miºcã SetPlayerPos(playerid, 1524.5369, -1677.8561, 6.2188);// îl teleportãm în poziþia din parcare SetPlayerInterior(playerid, 0);// îi dãm interior = 6, deoarece în acea poziþie, are nevoie de interiorul setat pe 6 cã sã vadã playerul obiectele, dacã nu , va cãdea în gol SetPlayerVirtualWorld(playerid, 0);// la fel cã sus } // facem pentru sala de antrenament if(IsPlayerInRangeOfPoint(playerid,2, 1412.639892,-1.787510,1000.924377))// verificãm dacã este în jurul coordonatei pe care am salvat-o ea fiind în parcarea poliþiei , locul care vrem sã fie intrarea în sala de antrenament {// dacã este în jurul poziþiei respective, la 2 metri distanþã TogglePlayerControllable(playerid, 1);// îl facem sã se poatã miºcã // cãutãm pe forum ul respectiv interiorul de la sala de antrenament, ea având interior = 1, poziþie:1412.639892,-1.787510,1000.924377 SetPlayerPos(playerid, 1568.4191, -1689.9735, 6.2188);// îl teleportãm în poziþia ieºirii SetPlayerInterior(playerid, 1);// îi dãm interior = 6, deoarece în acea poziþie, are nevoie de interiorul setat pe 1 cã sã vadã playerul obiectele, dacã nu , va cãdea în gol SetPlayerVirtualWorld(playerid, 0);// aici îi dãm virtualWorld 0 pentru a apãrea maºinile, el fiind ºi VirtualWorld-ul în care se joacã playerii } } //dacã nu are lider/member = 1 , ºi folosesc comandã în preajma poziþiei, nu se vor teleporta. // voi trece peste enter-ul ºi exitul la facþiunea 2 referitor la interiorul secþiei ºi voi aratã cum mã folosesc la sala de antrenament if(P_Data[playerid][pMember] == 2 || P_Data[playerid][pLeader] == 2)// verificãm dacã playerul are lider sau member = 2 { if(IsPlayerInRangeOfPoint(playerid,2, 1412.639892,-1.787510,1000.924377))// verificãm dacã este în jurul coordonatei din interiorul sãlii de antrenament {// dacã este în jurul poziþiei respective, la 2 metri distanþã TogglePlayerControllable(playerid, 1);// îl facem sã se poatã miºcã // cãutãm pe forum ul respectiv interiorul de la sala de antrenament, ea având interior = 1, poziþie:1412.639892,-1.787510,1000.924377 SetPlayerPos(playerid, 611.1915, -583.4981, 18.2109);// îl teleportãm în poziþia de afarã, în faþã secþiei SetPlayerInterior(playerid, 0);// îi dãm interior = 0, deoarece în acea poziþie el nu mai este în interior SetPlayerVirtualWorld(playerid, 0);// aici apare virtual world 0 la fel cã ºi cel de sus, al Police-ului departament , pentru cã ambele poziþii vor avea ieºire în virtualWorld 0 } } } } return 1; } Acum putem testa şi vedem că putem intră în clădiri , putem ieşi, fără nici o problema. Acum , se pune problema , că jucătorul să vadă că acolo se intră, şi marcăm cu un pick-up şi un text 3D. Mergem AICI şi căutăm un pick-up care ne convine , şi îl vom crea. Eu am ales pickup cu id 1239. Mergem la public-ul OnGameModeInit şi adăugăm aşa: AddStaticPickUp(model, type, Float:X, Float:Y, Float:Z, Virtualworld) model- modelul pickup-ului, în cazul nostru 1239 type- tipul de pick-up, adică dacă va dispărea , dacă nu, căutaţi pe wiki PickupTypes şi gătiţi detalii Float x y z sunt poziţiile VirtualWorld este virtual-word-ul în care suntem Eu voi crea 2 Pick-up-uri şi 2 3Dtext-uri , adică cel de la intrarea în Police Departament a civililor şi unul în secţie. Create3DTextLabel(text[], color, Float:X, Float:Y, Float:Z, Float:DrawDistance, virtualworld, testLOS) text[] este textul, el se pune între ghilimele "" color- culoarea textului Float:X, Float:Y, Float:Z poziţiile 3Dtext-ului Float:DrawDistance - distanţă maximă de care să se vadă 3DText-ul virtualworld- virtualWorld-ul în care se află playerul testLOS - reprezintă 2 valori aici 0/1 şi corespund văzului, adică dacă să se vadă prin pereţi sau nu Mergem la OnGameModeInit şi punem aşa: Create3DTextLabel("Apasă F sau scrie /entern pentru a intră!", -1,1554.6113, -1675.6897, 16.1953, 10.0, 0, 0);// textul din faţă poliţiei Create3DTextLabel("Apasă F sau scrie /exitn pentru a intră!", -1,246.783996,63.900199,1003.640625, 10.0, 1, 0);// textul din interiorul poliţiei AddStaticPickup(1314, 23, 1554.6113, -1675.6897, 16.1953);// pickup-ul din faţă secţiei de poliţie, observăm că faţă de al 2-lea nu are pus 1, deoarece suntem în Virtual World 0, şi nu mai are rost să punem ",0" la urmă AddStaticPickup(1314, 23, 246.783996,63.900199,1003.640625,1);// pickup-ul din interiorul secţiei, are virtualWorld 0 Observăm aici că nu au condiţie de interior, deci e un avantaj. Acum mergem , testăm, totul ok şi mai avem nevoie de culoare la facţiune. Mergem AICI şi definim culorile în GM Atenţie în text punem culoarea între paranteze, dar nu oricum ci în felul următor: 0xAFAFAFAA -> {AFAFAF} deci din culoarea definită "0xAFAFAFAA" am scos "0x AFAFAF AA" AA şi 0x de la început , iar înăutru parantezei sunt celelalte 6 caractere. Avem mai întâi nevoie de ProxDetector, pentru a vedea de la o limita de distanţă în chat, avem nevoie şi de forech, care îl găsiţi aici şi îl definim: #define COLOR_FADE1 0xE6E6E6E6 #define COLOR_FADE2 0xC8C8C8C8 #define COLOR_FADE3 0xAAAAAAAA #define COLOR_FADE4 0x8C8C8C8C #define COLOR_FADE5 0x6E6E6E6E forward ProxDetector(Float:radi, playerid, string[], col1, col2, col3, col4, col5); public ProxDetector(Float:radi, playerid, string[], col1, col2, col3, col4, col5) { if(IsPlayerConnected(playerid)) { new Float:posx, Float:posy, Float:posz; new Float:oldposx, Float:oldposy, Float:oldposz; new Float:tempposx, Float:tempposy, Float:tempposz; GetPlayerPos(playerid, oldposx, oldposy, oldposz); foreach(Player, i) { if(GetPlayerVirtualWorld(i) == GetPlayerVirtualWorld(playerid)) { GetPlayerPos(i, posx, posy, posz); tempposx = (oldposx -posx); tempposy = (oldposy -posy); tempposz = (oldposz -posz); if (((tempposx < radi/16) && (tempposx > -radi/16)) && ((tempposy < radi/16) && (tempposy > -radi/16)) && ((tempposz < radi/16) && (tempposz > -radi/16))) { SendClientMessage(i, col1, string); } else if (((tempposx < radi/8) && (tempposx > -radi/8)) && ((tempposy < radi/8) && (tempposy > -radi/8)) && ((tempposz < radi/8) && (tempposz > -radi/8))) { SendClientMessage(i, col2, string); } else if (((tempposx < radi/4) && (tempposx > -radi/4)) && ((tempposy < radi/4) && (tempposy > -radi/4)) && ((tempposz < radi/4) && (tempposz > -radi/4))) { SendClientMessage(i, col3, string); } else if (((tempposx < radi/2) && (tempposx > -radi/2)) && ((tempposy < radi/2) && (tempposy > -radi/2)) && ((tempposz < radi/2) && (tempposz > -radi/2))) { SendClientMessage(i, col4, string); } else if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi))) { SendClientMessage(i, col5, string); } } else { SendClientMessage(i, col1, string); } } } return 0; } Acesta îl găsiţi şi pe internet, etc, noi îl vom folosi. Mergem mai întâi să modificăm scrisul în chat, adică la public-ul OnPlayerText şi punem aşa: public OnPlayerText(playerid, text[]) { new strîng[1000];// facem strîng-ul şi text-ul de 1000 de caractere, adică să scrie până la 1000 de caractere(SPACE se ia că caracterd) if(P_Data[playerid][pMember] == 1 || P_Data[playerid][pLeader] == 1)// dacă e lider/member 1 {//scrie în chat(cu T) format(strîng, sizeof(strîng), "{2641FE}%s {FFFFFF}: %s", GetName(playerid), text);//observaţi că va fi de genu {2641FE}Widualk: mesaj // {2641FE} este culoarea albastră, adică va fi scris Widualk cu albastru dacă sunt poliţist // {FFFFFF} - este culoarea alb, şi mesajum meu este cu alb, deci mesaj>alb nume>albastru SetPlayerChatBubble(playerid, text, -1, 30.0, 10000);// SetPlayerChatBubble face că mesajul să fie scris deasupra capului, -1 reprezintă culoarea albă //-1 reprezintă culoarea albă, 30.0 reprezintă distanţă la care vede celălalt jucător mesajul, în cazul nostru se vede deasupra capului până la distanţă de 30 m // 10000> reprezintă timpul adică 10 secunde, 1000 însemnând 1 secundă ProxDetector(20.0, playerid, strîng, COLOR_FADE1, COLOR_FADE2, COLOR_FADE3, COLOR_FADE4, COLOR_FADE5); // Aici ProxDetector face că textul în chat să fie văzut de la distanţă de 20metri //Adică trebuie să ai fi la cel mult 30metri să îi vezi textul deasupra capului şi la max 20 metri să vezi textul în chat } //la facţiunea 2(Police BlueBerry) else if(P_Data[playerid][pMember] == 2 || P_Data[playerid][pLeader] == 2)//dacă e în facţiunea nr 2 că membru/lider/amândouă {//şi scrie în chat, o să se întâmple că mai sus. format(strîng, sizeof(strîng), "{1E519D}%s {FFFFFF}: %s", GetName(playerid), text); SetPlayerChatBubble(playerid, text, -1, 30.0, 10000); ProxDetector(20.0, playerid, strîng, COLOR_FADE1, COLOR_FADE2, COLOR_FADE3, COLOR_FADE4, COLOR_FADE5); } //acum, dacă nu are lider/member la cele de mai sus, adică este civil else { // este civil şi scrie în chat format(strîng, sizeof(strîng), "{FFFFFF}%s {FFFFFF}: %s", GetName(playerid), text); //la fel că mai sus, dar numele îi apare cu alb("{FFFFFF}") SetPlayerChatBubble(playerid, text, -1, 30.0, 10000); ProxDetector(20.0, playerid, strîng, COLOR_FADE1, COLOR_FADE2, COLOR_FADE3, COLOR_FADE4, COLOR_FADE5); } return 1; } Acum, mergem , verificăm, şi mai ramande de făcut un singur lucru, când apăsăm TAB să apară numele cu o culoare. Când te apropi de el, are culoarea albă, noi o modificăm tot cu aceast callback Mergem şi definim un nou callback, şi un public al callback-ului forward FactionColor(playerid);// definim Callback-ul public FactionColor(playerid)// facem callback-ul { if(IsPlayerConnected(playerid))// verificăm dacă este conectat { SetPlayerColor(playerid, COLOR_WHITE);// dacă nu are lider/member într-o facţiune să scrie cu alb if(P_Data[playerid][pMember] == 1 || P_Data[playerid][pLeader] == 1)// dacă are lider/member 1 SetPlayerColor(playerid,COLOR_BLUE);// culoarea playerului este albastră if (P_Data[playerid][pMember] == 2 || P_Data[playerid][pLeader] == 2)// dacă are lider/member 2 SetPlayerColor(playerid,COLOR_BLUE);// culoarea playerului este albastră } return 1; } Acum mergem la OnPlayerSpawn şi adăugăm la urmă: //liniile care le avem else// aici vom verifică dacă nu are lider să îl spawneze la locul dorit { SetPlayerPos(playerid, 1479.6548, -1725.2207, 13.5469); SetPlayerInterior(playerid,0);// nu este într-o clădire sau altcv , deci îi vom seta 0 când se spawneaza SetPlayerVirtualWorld(playerid, 0); } // asta e ultimul else, şi după el adăugăm: FactionColor(playerid);// când se spawneaza să îi dea culoare Atenţie, dacă sunteţi singur pe server, nu puteţi vedea, deoarece numele vostru e selectat, şi va apărea mereu cu alb, folosiţi tutorialul pentru a testa cu prietenii fără HOST. Mă scuzaţi de întârziere, dar am avut mult de scris... am făcut şi poze, am stat sa pun diacritice, am făcut mai mult decât mi-am propus... DIN FERICIRE PENTRU VOI. Sper că am fost de folos cu acest tutorial, am să vin cu ultima parte cât de repede am să pot. Până dată viitoare PACE!
  6. 1 point
    Gamemode complect cu include, baza de date si tot Daca dai +1 esti smecher Download: http://rapidteria.com/2Z9G
  7. 1 point
    Nu ai sanse la Scripter bun care sa-si faca treaba gratis.
  8. 1 point
    Recomand, ma si ajutat in plus dupa ce l-am cumparat.
  9. 1 point
    Daca mai este actual,adauga pe discord Mo_Garcia#3221
  10. 1 point
    Inlocuieste DIALOG_UPGRADEVIP cu asta case DIALOG_UPGRADEVIP: { if(!response) return 1; new idd = GetPVarInt(playerid, "VehicleID"); if(CarInfo[idd][Spawned] == 0) return SendClientMessage(playerid, COLOR_LGREEN, "Eroare: Vehiculul tau nu este spawnat!"); if(valid_vip_vehicle(CarInfo[idd][cModel]) == 0) return SCM(playerid, COLOR_GREY, "Acest vehicul nu poate fi upgradat!"); if(strlen(CarInfo[idd][cText]) > 3) return SCM(playerid, -1, "Acest vehicul este deja unul VIP!"); if(PlayerInfo[playerid][pPremiumPoints] < 1008) return SCM(playerid, -1, "Nu ai destule puncte premium."); if(IsABike2(CarInfo[idd][Spawned])) return SCM(playerid, COLOR_LGREEN, "Eroare: Nu poti upgrada acest vehicul!"); PlayerInfo[playerid][pVIPTicket] -= 1; Update(playerid, pVIPTicketx); SCM(playerid, COLOR_YELLOW, "* Felicitari! Ti-ai upgradat cu succes vehiculul la unul VIP."); format(string, sizeof(string), "%s si-a upgradat vehiculul %s[id: %d] la unul VIP pentru 1xTicket VIP.", GetName(playerid), aVehicleNames[CarInfo[idd][cModel]-400], idd); InsertLog(playerid, string, LOG_SHOP); format(string, sizeof(string), "UPDATE `cars` SET `Text`='%s' WHERE `ID`='%d'", GetName(playerid), idd); mysql_query(SQL, string); format(CarInfo[idd][cText], 32, GetName(playerid)); attach_vip_text(idd); CarInfo[idd][cVIPcar] = 1; format(query, sizeof(query), "UPDATE `cars` SET `VIPcar`='1' WHERE `ID`='%d'", idd); mysql_query(SQL, query); }
  11. 1 point
    Ai discord? Add: qSorin[]#6098
  12. 1 point
    Ba eu te respect pentru ce a ce facii felicitarii bro
  13. 1 point
    Recomand gazduirejocuri.
  14. 1 point
    Conecteaza baza de date..
  15. 1 point
    Vand Avere OG-Times aparte fara conturi am 30kkk care doreste sa cumpere avere dau pe bucata. Sms in privat pentru mai multe detalii.
  16. 1 point
    @jumainkain Te poti lua dupa exemplu lui @razvanduciuc. Este explicat foarte bine. +1
  17. 1 point
    Definesti numele si il adaugi la comenzile respective. Exemplu: #define FONDATOR "NumeleTau" forward Fondatorul(playerid); public Fondatorul(playerid) { if(IsPlayerConnected(playerid)) { new nume[30]; //Numele tau trebuie sa contina maxim 30 caractere. GetPlayerName(playerid, nume, sizeof(nume)); if((strcmp(nume, FONDATOR, true) == 0)) { return 1; } } return 0; } Apoi inlocuiesti la comenziile respective la care doresti sa ai acces pe acel nume. Exemplu: Din if (PlayerInfo[playerid][pAdmin] >= 6) Pui if (Fondatorul(playerid)) Sau daca vrei si un anumit numar al unui admin de exemplu 6 sa poata folosi comanda si tu la fel sa pui in felul urmator. if (PlayerInfo[playerid][pAdmin] == 6 || Fondatorul(playerid)) Dar sa nu uiti si de restrictii: if(!Fondatorul(playerid)) return SendClientMessage(playerid, COLOR_WHITE, "Doar fondatorul poate folosi aceasta comanda."); Sper ca te-am ajutat in mare parte.
  18. 1 point
    incearca sa compilezi cu include -urile din folderul pawno care vine cu gamemode-ul, sau sa faci un update la plugin Ahm, ma scuzi? Ne stim de undeva, ai vreun argument in ceea ce priveste opinia ta? Nu ti se pare bun, esti liber sa nu te uiti, insa daca tii neaprat sa iti exprimi o opinie, vino cu argumente
  19. 1 point
  20. 1 point
    Salut, vreau sa va prezint gamemode-ul de la care au inceput scripterii sa scripteze pentru serverele mari, gen t4p / nephrite / og-times. - Download - http://sprysphere.com/D5ZV ---[] Este gamemode-ul optimizat bigzone, fara erori, etc, cel mai bun de inceput. - SUBSCRIBE - Andrei Claudiu : STAR. == Dati un ochii repejor aici - https://www.youtube.com/channel/UCM0Vxbx9RhWptqqpciXJuLA - Imagini : Bigzone-ul fara erori / warning-uri / etc.
  21. 1 point
    Salut am facut si eu recent factiunea uber si vreau sa creiez masini dar nu stiu cum sa schimb logo de taxi in uber adica cum scrie la taxi sus TAXI eu vreau sa fie UBER sunt pe gamemode BURNED
  22. 1 point
    Salutare stimaţi utilizatori, am revenit cu partea a 3-a a tutorialului "Cum să creezi o nouă facţiune de la 0".În tutorialele precedente aţi învăţat cum să adăugaţi facţiunea, cum să faceţi spawn, culoare playerului şi celelalte functi. În acest tutorial vom face 2 lucruri. Primul lucru este că vom adaugă respectivei facţiuni maşini.Am văzut că se plânge lumea, au adăugat nişte maşini şi că i sau dat peste cap id lor. Ei în tutorialul acesta vom explică de ce se întâmplă această, şi cum să o evităm. Partea a 2-a a tutorialului va constă în adăugarea GATE-urilor(porţilor) cu restricţie dacă eşti liderul facţiunii x sau membrul facţiunii x. Ne vom folosi de MAP EDITOR pentru adăugarea mai rapidă a facţiunilor. Dacă nu ştiţi să folosiţi Map Editor, aveţi AICI un tutorial. Bun , dacă tot am vorbit despre ce o să facem, să îi dăm drumul şi practicii. Mergem în Map Editor şi plasăm 5 vehicule. Noi în momentul de faţă, nu avem nici un vehicul introdus.Că să vedeţi id vehiculelor mergeţi aici: Vehicule Adăugăm vehiculele la publicul OnGameModeInit. // acestea sunt vehiculele de la PD CreateVehicle(596, 1544.9691, -1650.9399, 5.4536, 90.0000, -1, -1, 100); CreateVehicle(596, 1544.9491, -1654.9799, 5.4536, 90.0000, -1, -1, 100); CreateVehicle(596, 1544.9491, -1658.9999, 5.4536, 90.0000, -1, -1, 100); CreateVehicle(596, 1544.9491, -1662.8599, 5.4536, 90.0000, -1, -1, 100); CreateVehicle(596, 1544.9491, -1667.7000, 5.4536, 90.0000, -1, -1, 100); Acum mergem la inceput şi facem un callback de restricţie a id-urilor vehiculelor. Mai întâi vedem în GM id vehiculelor introduse cu "/dl" şi le notăm pe o foaie. Noi am pus 5 vehicule deci id-urile lor sunt 1 , 2 ,3 ,4 , 5. ATENŢIE!!! Nu este necesar să trecem toate vehiculele pe o foaie. Putem trece doar primul vehicul şi ultimul vehicul, pentru că de ele ne vom folosi. Mergem în pawn şi facem următoarele: forward PoliceCar(carid);// Se creaza callback-ul de restrictie public PoliceCar(carid)// se face publicul de restrictie { if((carid >= 1) && (carid <=5))// daca id la vehicul este intre 1 si 5 { return 1;// ii returnam 1 } return 0;// daca nu se afla intre 1 si 5 nu se returneaza nimic. } Bun , aşa facem şi la celelalte facţiuni, chiar dacă au return 0 la primul callback nu au nici o problema. Acum că am pus verificarea la id vehiculelor punem şi restricţie. Trebuie să facem următoarele: Mergem la publicul OnPlayerStateChange şi punem aşa: public OnPlayerStateChange(playerid, newstate, oldstate) { new newcar = GetPlayerVehicleID(playerid);// definim newcar ca id masinii in care sa urcat playerul. if(PoliceCar(newcar))// daca playerul se afla in masina de politie si { if(P_DATA[playerid][pMember] == 1 || P_DATA[playerid][pLeader] == 1) // daca este membru 1 sau lider 1 {}// Nu se intampla nimic. else//altfel , daca nu este nici lider 1 si nici member 1 { RemovePlayerFromVehicle(playerid); // il scoate din masina SendClientMessage(playerid,-1,"Nu faci parte din Police Departament!");// si ii da acest mesaj. } } return 1; } Perfect, acum mergem şi şi verificăm. Vedem că merge totul perfect. Aşa faceţi şi la celelalte facţiuni. Dacă observaţi, când băgaţi un filescript pe server, filescriptul respectiv conţinând nişte maşini, o să va dea id vehiculelor peste cap. De ce? Pentru că serverul ia mai întâi ce e pe filescripturi(în ordinea în care aţi adăugat în server.cfg) şi pe urmă ce e în GM, deci cumva dacă aveţi 5 maşini într-un filescript, ele vor avea id 1 2 3 4 5 iar cele de la Police Departament vor avea id 6 7 8 9 10. Că să nu se întâmple această aveţi posibilitatea de a face 2 chesti. 1) Introduceţi tot filescriptul în GM, vehiculele din fs punându-le ultimele ori 2)Copiaţi maşinile din fs(filescript) , le puneţi ultimele, ştergeţi din fs vehiculele, compilaţi fs şi compilaţi GM. Aşa nu veţi mai întâmpina probleme. Acum că ştim să restricţionăm maşini , mai trebuie şi porţi(gate). Aceste porţi vom face să se deschidă şi să se închidă. Se va închide într-un număr de timp. Noi vom seta 5 secunde pentru a se închide, adică după 5 secunde ce să coborât se va urcă înapoi. Mergem în map editor şi vom face următoarea: Potitia initiala Pozitia de coborare Acum mergem în pawn şi definim poartă aşa. // la inceputul GM new GatePD1; //La OnGameModeInit: GatePD1 = CreateObject(980, 1586.81323, -1637.93604, 14.95745, 0.00000, 0.00000, 0.00000); Acum că am definit poartă şi am adăugat-o, luăm poziţia coborâtă, adică unde se va duce poartă, adică o coboram. Bine , acum am demonstrat că am coborât-o. Voi trebuie să o coborâti sub pământ deoarece nu trebuie să se vadă. Salvăm undeva ambele coordonate ale obiectului: -poziţia iniţială -poziţia coborâtă adică acestea: CreateObject(980, 1586.81323, -1637.93604, 14.95745, 0.00000, 0.00000, 0.00000);// pozitia initiala CreateObject(980, 1586.81323, -1637.93604, 9.52512, 0.00000, 0.00000, 0.00000);// pozitia coborata. Acum trebuie să facem că poartă să se deschidă. Putem face prin 2 metode: -metodă comenzii -metodă apăsării pe tasta Facem mai întâi metodă apăsării pe tasta, cred şi cea mai la îndemână şi elegantă, deoarece playerul nu mai trebuie să stea să scrie /deschidegate(exemplu), ci doar apasă o tasta. Tastele le luăm de aici: Tasta După cum am spus, la ambele metode trebuie să apelăm la un timer de move, adică poartă trebuie să coboare, dar şi să se ridice la loc(bine înţeles). Aşa că facem următoarele: Mergem la publicul OnPlayerKeyStateChange şi punem aşa: // alegem o tasta, eu amales tasta KEY_CROUCH deoarece apasa "H" cand e in masina si "C" cand nu este in masina. Voi alegeti orice tasta credeti ca vi s-ar potrivi. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { if (newkeys & KEY_CROUCH )// daca apasa tasta KEY_CROUCH { if(P_DATA[playerid][pMember] == 1 || P_DATA[playerid][pLeader] == 1)// daca este lider sau member la factiunea cu nr 1(Police Departament) { if(IsPlayerInRangeOfPoint(playerid, 15, 1586.81323, -1637.93604, 14.95745))// daca este in raza portii //1586.81323, -1637.93604, 14.95745 - locatia portii //15 - distanta dintre poarta si player, adica daca este la max 15 metri de poarta { MoveObject(GatePD1, 1586.81323, -1637.93604, 9.52512, 5.0, 0.00000, 0.00000, 0.00000);// se muta obiectului // GatePD1 - dupa cum am definit obiectul, GatePD1 este poarta noastra // 586.81323, -1637.93604, 9.52512- pozitia lui de coborare // 5.0 viteza de deplasare in jos // 0.00000, 0.00000, 0.00000 - rotatiile acestuia, in cazul nostru nu se roteaza. Rotatiile sunt doar la alegere, dar e mai bine ca sa punem si aceasta pentru a nu intampina probleme SetTimer("MoveGatePd1",5000,0);// apelam la callback-ul MoveGatePd1 pentru a se inchide poarta, adica dupa 5 secunde sa se apeleze la callback SendClientMessage(playerid,-1,"Ai deschis poarta 5 secunde!");// ii da acest mesaj } } } return 1; } // facem si callback-ul la care am apelat: forward MoveGatePd1();// cream callback-ul public MoveGatePd1()// cream publicul { MoveObject(GatePD,11586.81323, -1637.93604, 14.95745, 5.0, 0.00000, 0.00000, 0.00000);// mutam poarta // la fel ca in pasii de sus // GatePD1- obiectul nostru // 11586.81323, -1637.93604, 14.95745 - pozitia initiala // 5.0 - viteza de deplasare // 0.00000, 0.00000, 0.00000 - rotatiile obiectului, in momentul de fata nu se roteste deloc, deoarece a plecat de la aceasi rotatie si a ajuns la aceasi rotatie. return 1;// returnam 1. } -Metoda prin comanda Mergem la OnPlayerCommandText si punem asa: if (strcmp("/deschidepoarta", cmdtext, true, 10) == 0) { if(P_DATA[playerid][pMember] == 1 || P_DATA[playerid][pLeader] == 1)// daca este lider sau member la factiunea cu nr 1(Police Departament) { if(IsPlayerInRangeOfPoint(playerid, 15, 1586.81323, -1637.93604, 14.95745))// daca este in raza portii //1586.81323, -1637.93604, 14.95745 - locatia portii //15 - distanta dintre poarta si player, adica daca este la max 15 metri de poarta { MoveObject(GatePD1, 1586.81323, -1637.93604, 9.52512, 5.0, 0.00000, 0.00000, 0.00000);// se muta obiectului // GatePD1 - dupa cum am definit obiectul, GatePD1 este poarta noastra // 586.81323, -1637.93604, 9.52512- pozitia lui de coborare // 5.0 viteza de deplasare in jos // 0.00000, 0.00000, 0.00000 - rotatiile acestuia, in cazul nostru nu se roteaza. Rotatiile sunt doar la alegere, dar e mai bine ca sa punem si aceasta pentru a nu intampina probleme SetTimer("MoveGatePd1",5000,0);// apelam la callback-ul MoveGatePd1 pentru a se inchide poarta, adica dupa 5 secunde sa se apeleze la callback SendClientMessage(playerid,-1,"Ai deschis poarta 5 secunde!");// ii da acest mesaj } } return 1; } ATENŢIE!!! Noi folosim CreateObject şi MoveObject. Dacă folosiţi STREAMER şi le creaţi cu CreateDynamicObject OBLIGATORIU mutaţi cu MoveDynamicObject, la fel şi invers. Nu va funcţiona nici odată altfel. Eu v-aş recomandă să folosiţi SREAMER-ul şi să creaţi obiectele cu el. De ce? Pentru că limita de obiecte în SĂ-MP este de 1000 de obiecte. De aceea, pentru a va lasă obiectele mai importante să le creaţi cu CreateObject. De ce e pusă această limita? Pentru binele clientului(când intraţi pe un server, voi sunteţi clientul adică jocul, nu serverul) deoarece mănâncă din RAM şi veţi avea lag dacă limita e mai mare sau infinită. NOTĂ! Ştiu că mulţi dintre voi începători , sau persoane puţin mai avansate citiţi aşa "răsfoind" sau mai deloc de am scris eu după "//" ,dar eu am explicat ce e cu fiecare funcţie şi cum se foloseşte, deoarece dacă nu ştiţi să creaţi aşa ceva , nu veţi putea dezvoltă un server , şi veţi veni la noi şi veţi spune "Nu , că nu ştiu, fă-mi tu.". Eu va explic, şi voi dacă citiţi şi încercaţi o dată, a două oară, a 3-a oară până va iese şi deprindeţi modul de gândire, veţi avansa, altfel nu aveţi cum. NOTĂ2!! Aveţi măcar bunul simt de a nu copia tutorialul şi a-l poştă în altă parte şi ai modifică creditele. Eu am muncit la aceste tutoriale, am adăugat si diacritice unde sa putut şi am încercat să explic pe cât posibil pe înţelesul tutuor. Această este marea mea rugăminte. Notă secundară! Dacă va plăcut acest tutorial, dacă va folosit acest tutorial sau dacă măcar îmi respectaţi muncă depusă, daţi + 1 la tutorialele postate de mine. Aşa văd că muncă mea e apreciată , şi voi poştă în continuare tutoriale. Cam atât a fost cu cele 3 părţi ale tutorialului, am încercat să va prezint cum se face o facţiune de la 0, nu că alte tutoriale pe care le-am văzut, şi care sunt cam pe lângă. Sper că va fost de folos , şi încercaţi să gândiţi când citiţi. Luaţi fiecare funcţie în parte şi o gândiţi, astfel veţi face performanţă.
  23. 1 point
    - Server Description: Current Version: 6.4 - Server Details: Owners: FaLLenGirL Mode: Stunt/Race/Fly/Gangs/Freeroam Map: Stunt/Race/Fly/Gangs/Freeroam DNS: is.hype.zone.ro:7777 IP: 93.119.25.72:7777 Players record: 50/50. (26 November 2016) Server Systems: House System. Properties System. Admin System. V.I.P System. Gang System. Capture System. Blow/Repair System. Gang Statistics System. Player Statistics System. Achievements System. Admin Statistics System. Private Messages System. News System. Race System. Animations System. Rules System. Login/Register System. Anti-Flood System. Ban System. Kick System. Anti-Spam System. Player Panel System. Admin Console System. Ignores System. Textdraws System. Reactions System. Fly/Vup System. Speed System. Repair System. Flip System. Ranks System. God System. Commands System. Top System. Teleports System. Lotto System. Jail System. Freeze System. Warnings System. Minigames System. Deathmatches System. Freeroam System. Record System. Radio System. Premium Level System. Premium Points System. Automatic Premium Level UP System. e.t.c. Server Record: Photos with Systems and Commands: House System: General Commands: /myh, /housemenu, /hcmds. Properties System: General Commands: /myp, /pinfo, /pcmds. Admin System: General Commands: /acmds, /admins. V.I.P System: General Commands: /vcmds, /vips. Gang System: General Commands: /gcmds, /gm, /ginfo Panel System: General Commands: /panel Configuration Panel System: General Commands: /configpanel Statistics System: General Commands: /stats Admin Statistics System: General Commands: /astats Achievements System: General Commands: /achs News System: General Commands: /news Commands System: General Commands: /cmds Rules System: General Commands: /rules Lotto System: General Commands: /lottohelp, /buyticket Premium Level and Points System: General Commands: /pinfolevel Minigames System: General Commands: /minigames Top System: General Commands: /top Much more on server !
  24. 1 point
    Salutare, astazi vin cu un nou tutorial in 3 pasi. Mi-am propus in cei 3 pasi sa va arat cum se creaza o factiune de la 0, pentru ca si voi sa va concepeti un GM de la 0 , si sa stiti cum se adauga factiunile. Atentie, inainte tin sa mentionez ca eu ma folosesc de registerul mysql din tutorialul acesta: . Parcurgeti acest tutorial doar daca v-ati creat sistemul de inregistrare dupa tutorial, deoarece eu aduc o contribuire lui. In partea 1 o sa creem variabilele de la factiune pe care le vom folosi si anume pLeader, pMember si pRank in baza de date , dar si in GM. Tot aici vom crea publicul Update, care ne va usura updateul la baza de date. Am vazut la unele GM-uri ca se foloseau de acest public(R33 Ideal pentru RPG by wopss, RedzMax parca asa se chema si alte GM-uri care nu imi mai aduc aminte denumirea lor ) si m-am gandit ca e foarte bine sa il folositi. Vom crea si un nou enum cu datele de update. Vom crea comenzile /invite , /makeleader(cu rconul) /giverank, /uninvite , /fpk(cu rcon). Acum ca am facut introducerea sa trecem si la treaba practica. Mergem la enum-ul "pInfo" si vom adauga cele 3 variabile in felul urmator: enum pInfo { pParola, pID, pLeader,// variabila playerului cand are lider pMember,// variabila playerului cand are membru pRank// variabila playerului cand are rank }; creem un enum cu cele 3 upload-uri enum { LeaderUpdate, MemberUpdate, RankUpdate }; si callback-ul forward Update(playerid, type);// creem callback-ul public Update(playerid, type) // facem publicul { if(IsPlayerConnected(playerid))// verificam daca playerul este conectat { new query[256];// se creaza o interogare in public pentru baza de date switch(type)// aplicam la swich pentru a face mai rapida apelarea la callback { switch(type) { case LeaderUpdate:// dupa cum am creat enum-ul , verificam cazul de update, adica lider { mysql_format(handle, query, sizeof(query), "UPDATE `conturi` SET `Leader`='%d' WHERE `Nume`='%e'", P_Data[playerid][pLeader], GetName(playerid));// facem update-ul la baza de date mysql_query(handle, query);// trimitem update-ul } case MemberUpdate:// cazul memnerului { mysql_format(handle, query, sizeof(query), "UPDATE `conturi` SET `Memner`='%d' WHERE `Nume`='%e'", P_Data[playerid][pMember], GetName(playerid));// facem update-ul la baza de date mysql_query(handle, query);// trimitem update-ul } case RankUpdate:// cazul rank-ului { mysql_format(handle, query, sizeof(query), "UPDATE `conturi` SET `Memner`='%d' WHERE `Nume`='%e'", P_Data[playerid][pMember], GetName(playerid));// facem update-ul la baza de date mysql_query(handle, query);// trimitem update-ul } } } } return 1; } Acum facem comenzile , dar mai intai aveti nevoie de urmatparele scripturi: ZCMD SSCANF CMD:makeleader(playerid,params[]) { if(IsPlayerConnected(playerid)) { new string[100], lider, factiuneid;// se creaza variabilele, lider = persoana pe care aplicam comanda, factiuneid = id factiunii la care va fi acea persoana if(!IsPlayerAdmin(playerid))// verificam daca playerul nu este conectat cu rcon-ul return SendClientMessage(playerid, -1, "Trebuie sa fi conectat cu Rcon-ul!"); if(sscanf(params,"ud",lider,factiuneid))// verificam daca playerul nu scrie comanda completa return SendClientMessage(playerid,-1,"Romania Reality: /makeleader [Nume_Player/ID] [FactiuneID]"); if(factiuneid > 11 && factiuneid < 1)//punem conditie la cate factiuni avem return SendClientMessage(playerid, -1, "Trebuie sa fie intre 1 si 11!"); if(!IsPlayerConnected(lider))// verificam daca playerul nu este conectat return SendClientMessage(playerid,-1,"Acest jucator nu este conectat"); P_Data[lider][pLeader] = factiuneid;// persoana pe care aplicam comanda va fi liderul factiunii pe care am scris-o P_Data[lider][pMember] = factiuneid;// persoana pe care aplicam comanda va fi membrul factiunii pe care am scris-o P_Data[lider][pRank] = 6; // ii va da rank 6 Update(lider, LeaderUpdate);// se va face update catre baza de date a liderului Update(lider, MemberUpdate);// se va face update catre baza de date a liderului ca este si membru in factiune Update(lider, RankUpdate);// se va face update la bazaz de date a liderului care are rank 6 format(string, sizeof(string), "Ai fost promovat ca lider de catre %s", GetName(playerid)); SendClientMessage(lider, -1, string);// ii da mesaj liderului de cine a fost promovat format(string, sizeof(string), "%s este noul lider al factiunii %d.", GetName(lider), factiuneid); SendClientMessage(playerid, -1, string);// ii da mesaj adminului pe cine a promovat SpawnPlayer(lider);// il spawneaza pe lider } return 1; } Facem comanda /fpk CMD:fpk(playerid,params[]) { if(IsPlayerConnected(playerid)) { new concediat, motiv[200], string[200];// se creaza noile variabile care vor fi folosite la verificarea comenzii in scriere if(sscanf(params,"us[199]", concediat, motiv))// verificam ca comanda sa se scrie corect return SendClientMessage(playerid,-1,"SERVER: /fpk [Nume_Player] [MOTIV]");// daca nu e scrisa corect , atunci sa ii dea mesajul cum sa se scrie if(!IsPlayerAdmin(playerid))// verificam daca playerul nu este conectat cu rcon-ul return SendClientMessage(playerid, -1, "Trebuie sa fi conectat cu Rcon-ul!"); if(!IsPlayerConnected(concediat))// verificam daca playerul nu este conectat return SendClientMessage(playerid,-1,"Acest jucator nu este conectat"); if(sscanf(params,"us[199]", concediat, motiv))// verificam ca comanda sa se scrie corect return SendClientMessage(playerid,-1,"SERVER: /fpk [Nume_Player] [MOTIV]"); P_Data[concediat][pLeader] = 0;// il facem lider 0 P_Data[concediat][pMember] = 0;// il facem membru 0 P_Data[concediat][pRank] = 0; // ii dam rank 0 Update(concediat, LeaderUpdate);// se va face update la bazaz de date a concediatului Update(concediat, MemberUpdate);// se va face update la bazaz de date a concediatului Update(concediat, RankUpdate);// se va face update la bazaz de date a concediatului format(string, sizeof(string), "Ai fost concediat de catre OWNERUL %s, pe motivul: %s", GetName(playerid), motiv); SendClientMessage(concediat, -1, string);// ii da mesaj concediatului de cine a fost concediat format(string, sizeof(string), "%s este concediat pe motivul: %s", GetName(concediat), motiv); SendClientMessage(playerid, -1, string);// ii da mesaj adminului pe cine a concediat SpawnPlayer(concediat);// il spawneaza pe lider } return 1; } Facem comanda /uninvite CMD:uninvite(playerid,params[]) { if(IsPlayerConnected(playerid)) { new concediat, motiv[200], string[200];// creem variabilele de care ne folosim in comanda if(P_Data[playerid][pLeader] < 0)// verificam daca playerul este lider(persoana care foloseste comanda) return SendClientMessage(playerid,-1,"SERVER: Nu esti lider"); if(sscanf(params,"us[199]", concediat, motiv))//verificam daca comanda e scrisa bine return SendClientMessage(playerid,-1,"SERVER: /uninvite [Nume_Player/ID] [MOTIV]"); if(P_Data[playerid][pLeader] != P_Data[concediat][pMember])// verificam daca liderul foloseste comanda pe ai sai prieteni return SendClientMessage(playerid,-1,"SERVER: Nu poti folosi comanda decat pe cei din factiune la tine!"); if(concediat == P_Data[concediat][pLeader])// verificam daca concediatul nu e lider return SendClientMessage(playerid,-1,"SERVER: Nu poti folosi comanda pe un lider!"); // daca este ii dam mesaj corespunzator P_Data[concediat][pMember] = 0;// il facem membru 0 P_Data[concediat][pRank] = 0; // ii dam rank 0 Update(concediat, MemberUpdate);// se va face update la bazaz de date a concediatului Update(concediat, RankUpdate);// se va face update la bazaz de date a concediatului format(string, sizeof(string), "Ai fost concediat de catre Liderul %s, pe motivul", GetName(playerid), motiv); SendClientMessage(concediat, -1, string);// ii da mesaj "victimei" de cine a fost concediat format(string, sizeof(string), "%s este concediat pe motivul: %s", GetName(concediat), motiv); SendClientMessage(playerid, -1, string);// ii da mesaj liderului pe cine a concediat SpawnPlayer(concediat);// il spawneaza pe lider } return 1; } Facem comanda /invite CMD:invite(playerid,params[]) { if(IsPlayerConnected(playerid)) { new membru, string[200];// se creaza variabilele folosite in comanda if(P_Data[playerid][pLeader] < 0)// verificam daca playerul este lider return SendClientMessage(playerid,-1,"SERVER: Nu esti lider"); if(sscanf(params,"u", membru))//verificam daca comanda e scrisa bine return SendClientMessage(playerid,-1,"SERVER: /uninvite [Nume_Player/ID]"); if(P_Data[membru][pLeader] > 1) return SendClientMessage(playerid,-1,"SERVER: Nu poti folosi comanda pe alti lideri!"); if(P_Data[membru][pMember] > 1) return SendClientMessage(playerid,-1,"SERVER: Nu poti folosi comanda pe alti membri!"); P_Data[membru][pMember] = P_Data[playerid][pLeader];// il facem membru la factiunea in care este si cel care invita P_Data[membru][pRank] = 0; // ii dam rank 0 Update(membru, MemberUpdate);// se va face update la bazaz de date a membrului Update(membru, RankUpdate);// se va face update la bazaz de date a membrului format(string, sizeof(string), "Ai fost promovat membru de catre Liderul %s, pe motivul", GetName(playerid)); SendClientMessage(membru, -1, string);// ii da mesaj membrului de cine a fost invitat format(string, sizeof(string), "%s este membru la tine in factiune", GetName(membru)); SendClientMessage(playerid, -1, string);// ii da mesaj liderului pe cine a invitat SpawnPlayer(membru);// il spawneaza pe lider } return 1; } Comanda /giverank CMD:giverank(playerid,params[]) { if(IsPlayerConnected(playerid)) { new membru, rank, string[200];// creem variabilele cu care vom face conditie in comanda if(P_Data[playerid][pLeader] < 1)// verificam daca playerul este lider return SendClientMessage(playerid,-1,"SERVER: Nu esti lider"); if(sscanf(params,"ud", membru, rank))//verificam daca comanda e scrisa bine(ne folosim de cele de mai sus) return SendClientMessage(playerid,-1,"SERVER: /uninvite [Nume_Player/ID] [NRRank]"); if(P_Data[membru][pLeader] == P_Data[playerid][pLeader]) return SendClientMessage(playerid,-1,"SERVER: Nu poti folosi comanda pe tine!"); if(P_Data[membru][pLeader] > 0) return SendClientMessage(playerid,-1,"SERVER: Nu poti folosi comanda pe alti lideri!"); if(P_Data[membru][pMember] != P_Data[playerid][pLeader])// verificam daca comanda se foloseste pe membri altei factiune return SendClientMessage(playerid,-1,"SERVER: Nu poti folosi comanda pe alti membri!"); if(P_Data[membru][pMember] != P_Data[playerid][pLeader]) P_Data[membru][pRank] = rank; // ii dam rank 0 Update(membru, RankUpdate);// se va face update la bazaz de date a membrului format(string, sizeof(string), "Ai fost promobat cu rank %d de catre liderul %s", rank, GetName(playerid)); SendClientMessage(membru, -1, string);// ii da mesaj membrului de cine a fost promovat in rank format(string, sizeof(string), "%s este membru la tine in factiune cu rank: %d", GetName(membru), rank); SendClientMessage(playerid, -1, string);// ii da mesaj liderului pe cine a promovat } return 1; } Acum un pas foarte important, mergem la callback-ul OnLogin si punem sub P_Data[playerid][pID] = cache_get_field_content_int(0, "ID"); urmatoarele: P_Data[playerid][pLeader] = cache_get_field_content_int(0, "Leader"); P_Data[playerid][pMember] = cache_get_field_content_int(0, "Member"); P_Data[playerid][pRank] = cache_get_field_content_int(0, "Rank"); Iar acum mergem la baza de date si parcurgem urmatorii pasi: Bun, aceasta a fost partea 1. Daca gasiti greseli pe la comenzi , asta e din cauza ca acuma, seara, l-am facut si sunt putin cam obosit(se vede si dupa data de postare a tutorialului). Sper ca ati inteles pana aici, voi reveni cu a 2-a parte maine. Tutorial 100% scris de WIDUALK. Postarea acestui tutorial fara acordul meu va fi reclamata! Pana data viitoare(maine) PACE!
  25. 1 point
    Problema cu nr 1 nu prea, dar celelalte da. Tot din cauza cretinilor care apar pe zi ce trece, m-am lasat si eu de SAMP. Oricum, degeaba ii facut topicul. Cei cretini nu o sa inteleaga nimic. Romanul e specia care vrea sa aibe el tot.
This leaderboard is set to Bucharest/GMT+03:00
×

Important Information

This site uses cookies. By continuing browsing, you agree to the use of this information. For more details, see Terms of Use and Privacy Policy.