-
Posts
1.337 -
Joined
-
Last visited
-
Days Won
95
Content Type
Profiles
Forums
News
Documentation
Everything posted by WiDuAlK
-
si care e linia 38156
-
Nu prea cred...
-
SA-MP 0.3.7 RC SA-MP 0.3.7 RC5 Client/Server update -Rezolvată problema cu txt încărcarea texturii introdusă în 0.3.7-RC4 care ar putea cauza obiectele de pe harta vederea în alb (presarea fără texura) dacă un sprite al textdraw-ul a fost creat şi distrus -Upgradată conexiunea cookie sistem: adăugate variabilele la server "connseedtime" pentru a specifică cât de des să făcut o legătură actualizandu-se valorile. -Adăugat native SetObjectsDefaultCameraCol(disable); care poate apela la setarea default a valorii camereii, pentru coliziunile recente a creară de obiecte. -Adăugată variabilă serverului "laguage (strîng)" înlocuind în "mapă" coloanele şi filtrul în SĂ-MP browser-ul serverului. Această poate seta orice valoare de către deţinătorul serverului. ""Mapname" în variabilă va apărea în lista de reguli NOTA: SA-MP 0.3.7 este în prezent în funcţie de blocare-jos. Această va fi probabil ultima faza de testare RC pentru 0.3.7. CLIENT SA-MP 0.3.7 RC5 Server SA-MP 0.3.7 RC5 Windows Server SA-MP 0.3.7 RC5 Linux Server UPDATE - Rezolvat fereastră "directmode", care a fost spartă de când a fost adăugată schimbarea dimensiunii fontului. - Suma de alocare de memorie de streaming utilizează memoria de sistem totală găsită Windows, nu memoria disponibilă. - Rezolvate problemele cu tabloul de bord şi listele de dialog în cazul în care în ultimele elemente nu au putut fi accesate pe fără a derula. - Adaugă noi tipuri de dialog DIALOG_TYPE_TABLIST şi DIALOG_TYPE_TABLIST_HEADERS care sunt extensii ale dialogului tip LIST cu suport pentru coloane. De exemplu, utilizarea de tip tablist, va rugăm să consultaţi comenzile / testtablist şi / testtablistheaders în filterscript test_cmds. TABLISTS permite până la 4 coloane, cu 128 de caractere maxim pe coloana şi 256 de caractere maxime pe rând. - Noi ID-uri de obiect adăugate de Matiţe: 140 de noi obiecte Noi filescript-uri adăugate să demonstreze unele dintre obiectele / înlocuiri de construcţii. 12 variaţii de skin-uri (ID skin 300-311). Acestea sunt în mare parte versiuni de skin-uri de poliţie din joc (fără accesorii, etc) modificat. Skin-urile sunt încă WIP, deci va rugăm să nu plângeţi, dacă acestea sunt modificate înainte de final 0.3.7 lansare. Update RC3-2 Fix: : La skinuri, niste probleme neprevazute - Mai multe remedieri pentru coliziuni cu obiecte de camere instalate pe vehiculele . - După respawn jucatorul ar putea fi lasat cu CJ ruland animații ... -Fix: Au fost încă probleme de dialog (lățime listă) . Sunt doar cateva poze pe care am reusit sa le fac, mai sunt obiecte interesante , pe care nu le-am fotografiat... mai sunt si skinuri noi. 0.3.7 RC3-2 Client SA-MP 0.3.7 RC3-2 Client Installer 0.3.7 RC3 Server SA-MP 0.3.7 RC3 Windows Server SA-MP 0.3.7 RC3 Linux Server
-
#define DIALOGIDSETOWNER 1234 sau enum { DIALOGIDSETOWNER };
-
Cu placere, pai comentariile sunt pozitive, na sa dea bine in topic sau sa adune posturi... Personal pot sa am 10, 20, 50 , 100, 10000 pe mine nu ma intereseaza numarul de posturi, ci sa fiu activ, si cumva sa ajut comunitatea dupa cum pot, daca am 100000 de posturi si cel putin 70% sunt comentarii aiurea si 29.9% sunt raspunsuri date aiurea nu are nici un farmec, poate gresesc eu, poate e mai bine sa faci asta, adica totusi TRAIM IN ROMANIA , si e ceva normal de 20 de ani incoace, adica de ce sa ne schimbam , sa ne ridicam mai sus ca alte tari, si aici nu ma refer ca daca dau 3 raspunsuri bune pe forum, gata, tara mea e mai fericita si cu 3 metri mai sus, dar si in real life(tipic SAMP ) ) ne trezim ca comentam aiurea, facem niste afirmati sa ne aflam in treaba... chesti care nu au legatura cu PC-ul. Na am dat-o in filozofie degeaba.... nu cred ca invata nimeni nimic din ce am vrut eu sa subliniez, probabil imi "racesc gura" degeaba, dar am sa tot o fac, cat voi putea. PACE!
-
parametri sunt corecti... nu prea stiu ce ai tu in functie, daca e comanda posteaz-o, daca sunt doar functii posteaza de la inceput acoladei sau incearca asta: groupVariables[ID][gGroupLabelID] = CreateDynamic3DTextLabel(labelString, COLOR_Riffa, groupVariables[ID][gGroupExteriorPos][0], groupVariables[ID][gGroupExteriorPos][1], groupVariables[ID][gGroupExteriorPos][2], 100, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, -1, -1, -1, 50.0); groupVariables[ID][gGroupPickupID] = CreatePickup(1239, 23, groupVariables[ID][gGroupExteriorPos][0], groupVariables[ID][gGroupExteriorPos][1], groupVariables[ID][gGroupExteriorPos][2]); }
-
probabil pentru ca stringul e definit in afara comenzii. incearca asa: CMD:ban( playerid, params[ ] ) { LevelCheck( playerid, 5 ); new liPlayer, liDays, string[200], lsReason[ 156 ] ; if ( sscanf( params, "uis[156]", liPlayer, liDays, lsReason ) ) return SendClientMessage( playerid, COLOR_ULTRARED, "USAGE: {33CCFF}/ban [PlayerID] [Day(s)] [Reason]" ); if ( !IsPlayerConnected( liPlayer ) ) return SendError( playerid, "Player not connected !" ); if ( PlayerInfo[ liPlayer ][ Level ] >= 5 ) FormatMSG( liPlayer, COLOR_ULTRARED, "%s has tried to ban you!", PlayerName( playerid ) ); if ( PlayerInfo[ liPlayer ][ Level ] > PlayerInfo[ playerid ][ Level ] ) return SendError( playerid, "You cannot use this command on this admin" ); if ( liPlayer == playerid && !IsPlayerAdmin( playerid ) ) return SendError( playerid, "You can't ban yourself!" ); if ( liDays < 1 || liDays > 99 ) return SendError( playerid, "Invalid day ! Write values between 1 and 99." ); PlayerInfo[ playerid ][ PBans ]++; SendClientMessageToAll( COLOR_ABLUE, "======================(Ban Info)======================" ); format( string, sizeof(string), "{AFAFAF}Player {3399ff}%s {AFAFAF}has been {FF0000}Banned{AFAFAF} by Administrator {3399ff}%s {AFAFAF}for {FF0000}%d {AFAFAF}days.", PlayerName( liPlayer ), PlayerName( playerid ), liDays, zDate( ) ); SendClientMessageToAll( COLOR_ABLUE, string ); format( string, sizeof(string), "{AFAFAF}Reason: {3399ff}%s ", lsReason ); SendClientMessageToAll( COLOR_ABLUE, string ); SendClientMessageToAll( COLOR_ABLUE, "====================================================" ); new szDay, szMonth, szYear, szHour, szMinute, szSecond ; getdate( szYear, szMonth, szDay ); gettime( szHour, szMinute, szSecond ); if ( !IsPlayerAdmin( liPlayer ) ) { format( gsQuery, 1024, "INSERT INTO `Banlist` (`Key`,`IP`,`Name`,`Reason`,`Admin`,`BanDate`,`BanTime`,`BanDays`,`Request`,`Aproove`) VALUES(0,'%s','%s','%s','%s','%d-%d-%d','%d:%d:%d',UNIX_TIMESTAMP() + %d * 86400,0,0)", GetPlayerIPEx( liPlayer ), PlayerName( liPlayer ), lsReason, PlayerName( playerid ), szYear, szMonth, szDay, szHour, szMinute, szSecond, liDays ); mysql_function_query( g_Handle, gsQuery, false, "", "" ); } for ( new i = 0; i < 69; i++ ) SendClientMessage( liPlayer, ~1, " " ); switch( Lang[ liPlayer ] ) { case 0: { format( string, sizeof(string), "{00FF00}You are banned your server by {FF0000}%s {00FF00}for {FF0000}%d {00FF00}days!", PlayerName( playerid ), liDays ); SendClientMessage(liPlayer, COLOR_GREEN, string ); format( string, sizeof(string), "{FFFF00}Reason: %s", lsReason ); SendClientMessage(liPlayer, COLOR_GREEN, string ); SendClientMessage(liPlayer, COLOR_GREEN, "{00FF00}Press F8 for Screen!" ); format( string, sizeof(string), "{00FF00}If you un-ban, visit x forum and make a request to the name {FF0000}%s {00FF00}and ip {FF0000}%s {00FF00}!", PlayerName( liPlayer ), GetPlayerIPEx( liPlayer ) ); SendClientMessage(liPlayer, COLOR_GREEN, string ); } case 1: { format( string, sizeof(string), "{00FF00}Ai primit interdictie pe server de la {FF0000}%s {00FF00}pentru {FF0000}%d {00FF00}zile!", PlayerName( playerid ), liDays ); SendClientMessage(liPlayer, COLOR_GREEN, string ); format( string, sizeof(string), "{FFFF00}Motiv: %s", lsReason ); SendClientMessage(liPlayer, COLOR_GREEN, string ); SendClientMessage(liPlayer, COLOR_GREEN, "{00FF00}Apasa F8 pentru a face o poza!" ); format( string, sizeof(string), "{00FF00}Daca vrei un-ban, viziteaza x forum si fa o cerere cu numele {FF0000}%s {00FF00}si ip-ul {FF0000}%s {00FF00}!", PlayerName( liPlayer ), GetPlayerIPEx( liPlayer ) ); SendClientMessage(liPlayer, COLOR_GREEN, string ); } } FormatLog( "BanCMD_Log", "Administrator %s has banned %s for reason: '%s'", PlayerName( playerid ), PlayerName( liPlayer ), lsReason ); SetTimerEx("KickPlayer", 500,false,"i",liPlayer); return ( 1 ); } si asta: CMD:warn( playerid, params[ ] ) { LevelCheck( playerid, 3 ); new Player, string[200], Reason[ 180 ] ; if ( sscanf( params, "us[180]", Player, Reason ) ) return SendClientMessage( playerid, COLOR_ULTRARED, "USAGE: {33CCFF}/warn [PlayerID] [Reason]" ); if ( !IsPlayerConnected( Player ) ) return SendError( playerid, "Player is not connected" ); if ( PlayerInfo[ Player ][ Level ] > PlayerInfo[ playerid ][ Level ] ) return SendError( playerid, "You cannot use this command on this admin" ); if ( Player == playerid ) return SendError( playerid, "You cannot warn yourself" ); PlayerInfo[ playerid ][ PWarns ]++; PlayerInfo[ Player ][ Warnings ]++; if ( PlayerInfo[ Player ][ Warnings ] == MAX_WARNINGS ) { string[ 0 ] = EOS; if ( PlayerInfo[ playerid ][ Level ] >= 3 ) format( string, sizeof( string ), "{D1D1D1}*** Administrator {FF0000}%s{D1D1D1} has kicked {00A6FF}%s. {D1D1D1}(Reason: %s) (Warning: %d/%d)***", PlayerName( playerid ), PlayerName( Player ), Reason, PlayerInfo[ Player ][ Warnings ], MAX_WARNINGS ); SendClientMessageToAll( COLOR_GREY, string ); Kick( Player ); PlayerInfo[ Player ][ Warnings ] = 0; return ( 1 ); } else { if ( PlayerInfo[ playerid ][ Level ] >= 3 ) format( string, sizeof( string ), "{FFFF00}*** Administrator {FF0000}%s{FFFF00} has given {00BBF6}%s {FFFF00}a warning. {FFFF00}(Reason: %s) (Warning: %d/%d) ***", PlayerName( playerid ), PlayerName( Player ), Reason, PlayerInfo[ Player ][ Warnings ], MAX_WARNINGS ); SendClientMessageToAll( COLOR_YELLOW, string ); Announce( Player, "~r~~h~You have received a ~y~~h~warning!", 2500, 1 ); } FormatLog( "Warn_Log", "Administrator %s has warned %s with reason %s", PlayerName( playerid ), PlayerName( Player ), Reason ); return ( 1 ); }
-
Aici nu se cer include-uri. Daca nu le gasesti pe internet inseamna ca sunt concepute de persoana care a facut GM si nu a vrut ca sa se "plagieze" GM la credite si altele.
-
posteaza liniile :|
-
Bravo ma. Chiar daca nu e asa sofisticat, dar imi place ca ai incercat sa faci ceva mai interesant.
-
Ai tu ceva prin GM... Ce GM folosest?
-
Ia vezi asa iti merge? stock ShowGangStats( playerid, S_Gang ) { if ( S_Gang > 7 || S_Gang < 1 ) return SendError( playerid, "This gang doesn't exists." ); gsString[ 0 ] = EOS; new string[ 1048 ], string2[ 1048 ], string3[ 1048 ], string4[ 1048 ], string5[ 1048 ], string6[ 1048 ], string7[ 1048 ], string8[ 1048 ], string9[ 1048 ], string10[ 1048 ] ; GetGVarString( "g_Description1", string, sizeof string, S_Gang ); GetGVarString( "g_Description2", string2, sizeof string2, S_Gang ); GetGVarString( "g_Description3", string3, sizeof string3, S_Gang ); GetGVarString( "g_Description4", string4, sizeof string4, S_Gang ); GetGVarString( "g_Description5", string5, sizeof string5, S_Gang ); GetGVarString( "g_Description6", string6, sizeof string6, S_Gang ); GetGVarString( "g_Description7", string7, sizeof string7, S_Gang ); GetGVarString( "g_Description8", string8, sizeof string8, S_Gang ); GetGVarString( "g_Description9", string9, sizeof string9, S_Gang ); GetGVarString( "g_Description10", string10, sizeof string10, S_Gang ); format( gsString, sizeof gsString, "{FFFFFF}%sn {FFFFFF}%sn {FFFFFF}%sn", gsString, string, string2, string3 ); format( gsString, sizeof gsString, "%s{FFFFFF}%sn {FFFFFF}%sn", gsString, string4, string5 ); format( gsString, sizeof gsString, "%s{FFFFFF}%sn {FFFFFF}%sn", gsString, string6, string7 ); format( gsString, sizeof gsString, "%s{FFFFFF}%sn {FFFFFF}%sn {FFFFFF}%sn", gsString, string8, string9, string10 ); //format( gsString, sizeof gsString, "%s{FFFFFF}%sn", gsString, string10 ); format( gsString, sizeof gsString, "%s{00ff00}If you want to view other gang's stats, type {FF0000}/ginfo [GangID]", gsString ); if ( Users[ playerid ][ gang ] == S_Gang && Users[ playerid ][ isLeader ] > 4 ) ShowPlayerDialog( playerid, DIALOG_GANG_DESCRIPTION, 0, "{FFFFFF}Gang Info", gsString, "Description", "OK" ); else ShowPlayerDialog( playerid, DIALOG_EMPTY, 0, "{FFFFFF}Gang Info", gsString, "OK", "" ); return ( 1 ); }
-
Daca tu creezi masini incearca cu INSERT INTO
-
Cerere Tutorial Adaugare Email in inregistrare
WiDuAlK replied to GenOxigen's topic in Cereri Tutoriale
ce eroare? -
Greseala mea... Nu am vazut ca e "cache_get_field_content_int" , verifica din nou tutorialul la OnLogin, nu vei mai avea aceasta problema
-
ai ceva in GM , de exemplu in HardPlay ai o functie de genu: dsVehicles [ ] [ ] = { { 603, 3500000 }, // cars { 426, 1800000 }, { 589, 3500000 }, { 439, 2500000 }, { 565, 8000000 }, { 536, 3000000 }, /////alte masini///// } Cauta in GM ceva de genu si completezi cu ID si pret
-
Cel mai bine si mai bine te apuci tu sa faci un GM, asa vei sti sa faci inregistrarea buna, tutorialul bun, si cand va iesi vro problema, vei sti de unde sa o rezolvi. Ai tutoriale de ale mele, care te vor ajuta, si vor mai aparea. foloseste tutorialul register/login al meu, il ai in semnatura mea
-
Pai, nu prea le-as alege pe nici una, findca designul la Extreme Pawn e de KKA... majoritatea lucrurilor la el, asa si la PawnPlus sunt multe de modificat sau remodificat de genu : Am vazut ca se vad potrivirea acoladelor, asta e bine si nu prea, e bine ca se vad, dar arata hidos , e prea ingrosat, acolo la autocompletare, nu poti sa scri nimic, pentru ca se autocompleteaza fara sa te intrebe, fara sa vrei sau nu, incearca sa faci ca la notepad++, adica parantezele sa se vada cu o alta culoare, de preferat ceva sa iasa in evitenta, nu ingrosat, pentru ca repet , se vede hidos, si la fel cu completarea, e , scuzati limbajul , dar acest cuvant imi vine in minte, e f**ere... , fa doar daca vrea cel care foloseste programul, sa dea sageata in jos si enter, sa il lase sa scrie daca vrea, pentru ca poate vrea sa scrie altcv inafara de cuvintele existente si daca apasa space, deja e completat
-
#EDITAT---> MODIFICAT SI VERIFICAT!! Avea niste probleme cu diacritice introduse in variabile, pe care nu le observasem.Totul merge in parametri normali in momentul de fata. Intr-adevar frumos, dar hai sa iti zic o treaba. Imi place ca iti spui parerea, daca ii poti zice asa, dar macar daca ai citi un sfert din tutorial, macar daca ar fi cu folos reply tau, adica pun pariu ca acest reply e de a-ti mari numarul de posturi, nu de a iti spune o parere sincera, nui nici o problema, dar macar incearca sa inveti ceva din ce am scris, ca pentru voi am scris, eu le stiu deja.
-
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!
-
Astăzi va prezint câteva funcţii, care vor putea fi folosite la crearea unu GM de la 0, când apăsaţi pe butonul "NEW" din partea de sus al pawn-ului şi intraţi o să vedeţi că sunt câteva chestii , că şi în GTA San Andreas, clasicul de exemplu uşi , în care poţi intră, dacă o să va adăugaţi 1-2 maşini , şi o să vedeţi că săriţi, drifting şi alte chestii o să vi se dea o suma de bani în fine , eu va arăt cum să le scoateţi, după preferinţă şi să le modificaţi după bunul plac şi nu numai atât. Următoarele funcţii vor fi puse la publicul OnGameModeInit() Când intraţi prima dată pe serverul "NEW" o să vedeţi că aveţi un mers ciudat, unele servere îl acceptă, altele nu , după preferinţă voastră, cu această funcţie veţi putea opri. Dacă nu aveţi nevoie de ea puteţi să o ştergeţi.Funcţia se numeşte: UsePlayerPedAnims(); După cum v-am spus şi în intro-ul tutorialului veţi remarcă, dacă va puneţi vro maşină , că atunci când săriţi cu ea, faceţi stunting într-un cuvânt o să va dea o suma de bani. ei de aceea, pentru a opri STUNTING-UL folosiţi funcţia: EnableStuntBonusForAll(0); Pentru a bloca interioarele, să nu intri la bună voie, să îţi creezi tu comenzi de teleportare şi alte chestii, te vei folosi de: DisableInteriorEnterExits(); Pe harta(minimap) apar playerii. Sunt 3 stagii ale unei funcţii, pentru a apărea playerii pe server şi a nu apărea. ShowPlayerMarkers(0); // nu apar playerii pe minimap ShowPlayerMarkers(1); // apar playerii pe minimap şi se văd de oriunde ar fi ei, indiferent de distanţă între ei ShowPlayerMarkers(2); // apar playerii pe minimap doar când sunt aproape unii de alţi, altfel nu vor apărea Şi dacă tot am vorbit de apărut playerii pe minimap , este o funcţie asemănătoare care face vizibilitatea numelui jucătorului în joc de la o anumită distanţă pe care o setaţi dvs. Funcţia este: SetNameTagDrawDistance(10.0); SetNameTagDrawDistance este funcţia, iar 10.0 este valoarea distanţei la care se vede numele, adică trebuie să te apropi de playerul X la distanţă de 10 m pentru a-i vedea numele. Valoarea o modificaţi voi după bunul plac. Ultima funcţie pe care v-o prezint în acest tutorial este cea care da nume modului din joc, adică , atunci când deschideţi icoană SĂ-MP-ului pentru a va alege serverul în care doriţi să intraţi, o să apară o căsuţa cu "MODE" în care scrie ceva. La GM "NEW"o să apară BlankScript, voi modificaţi în ce doriţi.Functia este: SetGameModeText("BlankScript");// intre ghilimele inlocuiti voi cu modul de joc. Pentru serverele de RPG am vazut "Los Santos" , pe la serverele de STUNT am vazut"DM/STUNT/DRIVING" , voi puneti ce doriti. Sper că v-a fost de folos tutorialul, şi îl veţi folosi pentru că "EDITUL nu are valoare!"
- 10 replies
-
- 11
-
-
#Tutorial EDITAT---> REPARAT , IMBUNATATIT P.S Imi cer scuze de x2 post , dar am adus la cunostinta, iar aceasta nu are legatura cu reply de mai sus
-
mersi "mami" )
-
Creaza-l din nou, nu l-ai creat bine....
