Jump to content

Sinner.PWN

Membru
  • Posts

    239
  • Joined

  • Last visited

  • Days Won

    7

Everything posted by Sinner.PWN

  1. stock IsPlayerFalling( playerid ) // Definim stock-ul nostru { new Float:Velocity[ 3 ]; // Definim o variabila de tip float cu o dimensiune de 3 celule GetPlayerVelocity( playerid, Velocity[ 0 ], Velocity[ 1 ], Velocity[ 2 ] ); // Verificam viteza de deplasare pe toate cele 3 coordonate x,y,z return ( Velocity[ 2 ] != 0.0 ); // Daca Z-ul ce reprezinta miscarea pe axa Z(pe verticala) a jucatorului este diferit de 0 stock-ul va returna valoarea 1. } // Exemplu comanda CMD:pee( playerid, params[] ) { if( IsPlayerFalling( playerid ) ) return SendClientMessage( playerid, ~1, "Te afli in cadere, nu poti folosi aceasta animatie!" ); // Cod animatie return true; } Postez aici o functie care poate va fi utila in blocarea animatiilor. Exista un bug in care daca se foloseste /pee in cadere libera viata jucatorului nu va fi afectata la impactul cu solul.
  2. Incearca ce-ti dau eu mai jos: CMD:aduty(playerid, params[]) { if(gPlayerLogged[playerid] == 0) return SendClientMessage(playerid, COLOR_GREY, "{ffffff}Ne pare rau, nu esti logat pentru a utiliza aceata comanda!"); if(PlayerInfo[playerid][pAdmin] == 0) return SendClientMessage(playerid, COLOR_ERROR, AdminOnly); switch( AdminDuty[playerid] ) { case 0: { new sendername[MAX_PLAYER_NAME], string[256]; AdminDuty[playerid] = 1; SetPlayerArmourEx(playerid, 999); SetPlayerHealthEx(playerid, 999); SetPlayerSkin(playerid, 217); PlayerTextDrawSetPreviewModel(playerid, SkinPreview[playerid], GetPlayerSkin(playerid)); PlayerTextDrawShow(playerid, SkinPreview[playerid]); GetPlayerName(playerid, sendername, sizeof(sendername)); format(string, sizeof(string), "Notice: {FFFFFF}Admin %s is now on administrative duty.", sendername); ABroadCast(COLOR_RED2,string,1); if(PlayerInfo[playerid][pAdmin] >= 5) for(new i = 0; i < sizeof(CarInfo); i++) SetVehicleParamsForPlayer(i,playerid,0,0); } case 1: { new sendername[MAX_PLAYER_NAME], string[256]; AdminDuty[playerid] = 0; SetPlayerArmourEx(playerid, 0); SetPlayerHealthEx(playerid, 100); SetPlayerSkin(playerid, PlayerInfo[playerid][pModel]); PlayerTextDrawSetPreviewModel(playerid, SkinPreview[playerid], PlayerInfo[playerid][pModel]); PlayerTextDrawShow(playerid, SkinPreview[playerid]); GetPlayerName(playerid, sendername, sizeof(sendername)); format(string, sizeof(string), "Notice: {FFFFFF}Admin %s is now off administrative duty.", sendername); ABroadCast(COLOR_RED2,string,1); } } return 1; }
  3. Ti-a mai zis cineva intr-un topic anterior ca trebuie sa folosesti variabilele tale din GM si in aceasta comanda nu poti da copy paste dintr-un GM intr-altul Lasa-te de edit ca nici de asta nu esti in stare.
  4. Iti da "Unknown command." pentru ca ai dat return 0 acolo. Inlocuieste bucatica asta in felul urmator: if(floatcmp(0.0, Z) != 0) return SS(playerid, COLOR_ERROR, "You can't use any animations while falling.","Nu poti folosi aceasta comanda in timp ce cazi.");
  5. Ajuta daca intelegi macar ce-am postat acolo. Si sistemul meu e asemanator B-Zone dar am facut zonele sa fie random pentru a intervine plictiseala facand mereu si mereu acelasi traseu.
  6. Off: Daca nu stii ce inseamna warning-ul de mai jos lasa-te. warning 219: local variable "str" shadows a variable at a preceding level
  7. Puteai face mai simplu facand ceva de genul nu 100 de public-uri cu timer fara sens. function JobGarbage( playerid ) { DisablePlayerCheckpoint( playerid ); playerVariables[ playerid ][ pCP ] = 10070; playerVariables[ playerid ][ pGarbageCP ]++; switch( playerVariables[ playerid ][ pGarbageCP ] ) { case 1..19: { SelectRandomGarbage( playerid ); TogglePlayerControllable( playerid, true ); new garbageCP = playerVariables[ playerid ][ pJobLastCP ]; InfoTD_MSG( playerid, 5000, "Gunoi colectat (~r~%d/20~w~~h~).~n~Urmatorul tomberon se afla in: ~y~~h~%s (LS)", playerVariables[ playerid ][ pGarbageCP ], GetPlayer3DZone2( gRandomGarbage[ garbageCP ][ 0 ], gRandomGarbage[ garbageCP ][ 1 ], gRandomGarbage[ garbageCP ][ 2 ] ) ); UpdateJobBox( playerid, Iter_Count(PlayerGarbage), "Colecteaza gunoiul din Los Santos~n~~y~~h~Info! ~w~~h~Sunteti platiti la descarcarea gunoiului!" ); } case 20: { //CheckPlayerQuest( playerid, QUEST_GARBAGE ); UpdateJobStats( playerVariables[ playerid ][ pJob ] ); TogglePlayerControllable( playerid, true ); InfoTD_MSG( playerid, 5000, "Masina este plina!~n~Descarca gunoiul colectat la groapa de gunoi indicata pe GPS!" ); SetPlayerCheckpoint( playerid, 2175.1179, -2001.5468, 13.6539, 8.0 ); playerVariables[ playerid ][ pGarbageCP ] = 99; } case 100: { PayPlayerJob( playerid, 13 ); SelectRandomGarbage( playerid ); TogglePlayerControllable( playerid, true ); UpdatePlayerSkill( playerid, playerVariables[ playerid ][ pJob ] ); playerVariables[ playerid ][ pGarbageCP ] = 0; UpdateJobBox( playerid, Iter_Count(PlayerGarbage), "Colecteaza gunoiul din Los Santos~n~~y~~h~Info! ~w~~h~Sunteti platiti la descarcarea gunoiului!" ); InfoTD_MSG( playerid, 10000, "Ai descarcat gunoiul si ai fost platit cu ~g~$%s~n~~w~~h~Urmeaza traseul pentru a colecta gunoiul din Los Santos!~n~Skill-ul se aplica la descarcarea gunoiului!", FormatNumber( playerVariables[ playerid ][ pJobValue ] ) ); } } }
  8. "programator de meserie"
  9. Greseala la tine era ca nu includeai si stringz2 in format asa ca nu iti stoca decat ultima factiune in string. Foloseste ce ti-am lasat mai jos si o sa-ti mearga asa cum trebuie CMD:factions(playerid, params[]) { if( gPlayerLogged[ playerid ] == 0 ) return SendClientMessage( playerid, COLOR_LIGHTRED, "You need to login first." ); new factionString[ 1024 ]; for( new fID = 1; fID <= 14; fID++ ) if( DynamicFactions[ fID ][ fApp ] ) format( factionString, sizeof factionString, "%s{FFFFFF}%s [%d] {00FF00}[aplicatii deschise]\n", factionString, DynamicFactions[ fID ][fName], GetFactionMembers( fID ) ); else format( factionString, sizeof factionString, "%s{FFFFFF}%s [%d]\n", factionString, DynamicFactions[ fID ][fName], GetFactionMembers( fID ) ); ShowPlayerDialog( playerid, DIALOG_FACTIONSLIST, DIALOG_STYLE_LIST, "Factions", factionString, "OK", "" ); return true; }
  10. Incearca asa, nu garantez ca o sa mearaga. Si nu mai folosi "const" daca nu stii ce face. CMD:bput( playerid, params[] ) { new vehicleid = GetClosestVehicle( playerid ), cID = vPersonal[vehicleid]; if( !vPersonal[ vehicleid ] ) return true; if( !CheckIfIsOwner( playerid, vehicleid ) ) return Server( playerid, "You aren't the Owner of this car!"); for( new y=1; y < MAX_PCARS; y++ ) { new name[ 32 ], info2[ 256 ]; cartrunk[ cID ] = troaca[ playerid ][ y ]; new model = GetVehicleModel( cartrunk[ cID ] ); for( new t=0; t < 6; t++ ) { if( IsPlayerInRangeOfVehicle( playerid, cartrunk[cID], 5.0 ) ) { tWeapon[ cartrunk[ cID ] ][ t ] = g_Weaps[ t ]; tAmmo[ cartrunk[ cID ] ][ t ] = g_Ammo[ t ]; } } if( IsPlayerInRangeOfVehicle( playerid, cartrunk[cID], 5.0 ) ) { if( model == 448 || model == 461 || model == 462 || model ==463 || model == 468 || model == 471 || model == 481 || model == 509 || model == 510 || model == 521 || model==522 || model==523 || model==581 || model==586 ) return SendClientMessage(playerid, COLOR_YELLOW, " This is vehicle not have trunk!" ); for( new t=0; t < 6; t++ ) { if( tWeapon[cartrunk[ cID ]][ t ] != 0 ) { etWeaponName( tWeapon[ cartrunk[ cID ] ][ t ], name, sizeof( name ) ); format( info2, sizeof( info2 ), "%s%d. %s\n", info2, t+1, name ); } else format( info2, sizeof( info2 ), "%s%d. Empty\n", info2, t+1) ; } ShowPlayerDialog( playerid, DIALOG_BPUT, DIALOG_STYLE_LIST, "Trunk Weapon", info2, "Select", "Cancel" ); } } return true; }
  11. Daca problema vine de la o } sau un ; sau si o simpla , o sa-ti dea crash. Trebuie sa analizezi codul in detaliu sau poti cauta un program care face asta pentru tine si detecteaza unde n-ai inchis } sau nu ai pus ; ,
  12. CMD:helpers( playerid, params[] ) { new Helpers; SendClientMessage( playerid, COLOR_LIGHTRED, "Online helpers:" ); foreach(new i: Player) { if( playerVariables[ i ][ pHelper ] > 0 ) { FormatMSG( playerid, ~1, "{0033FF}%s(ID:%d) "COL_W"- level %d (Duty: %s)", PlayerName( i ), i, playerVariables[ i ][ pHelper ], ( playerVariables[ i ][ pHelperDuty ] ) ? ("ON") : ("OFF") ); Helpers++; } } if( Helpers == 0 ) SendClientMessage( playerid, ~1, ""COL_R"No Helpers online at the moment!" ); SendClientMessage( playerid, COLOR_TEAL, "-------------------------------------------------------------------" ); SendClientMessage( playerid, COLOR_WHITE,"Daca ai vreo problema, poti folosi /report. Pentru intrebari legate de joc poti folosi /n" ); SendClientMessage( playerid, COLOR_WHITE,"Poti deschide un ticket pe panel daca ai o problema ce nu tine de joc!" ); SendClientMessage( playerid, COLOR_TEAL, "-------------------------------------------------------------------" ); return true; } Eu iti dau mai sus un exemplu care arata daca jucatorul este Duty ON sau OFF. Daca stii ce sa faci cu ce ti-am dat o sa-ti fie de folos mare
  13. Nu am idee cum arata acel server dar incearca sa faci o treaba si anume baga un debug si vezi cand se incarca acele case din baza de date cu interiorul corect. Eventual daca ai intrarea pe tasta F vezi daca-ti seteaza un interior anume cand intri
  14. Nu folosesc niciun edit, e serverul meu facut de la 0 si am pastrat "playerVariables" pentru ca mi-a placut.
  15. Era vorba despre cum era codul meu inainte de R40 si cum il transformi tu cu CTRL + H in R40 deci hai sa dam exemple cu banana( 69, "cartofi", g_Maner );
  16. Deci sincer ma doare burta de ras In primul rand g_Handle e conexiunea si nu o variabila. In al doilea rand: ESTI PROST SAU PROST? Dupa 20 de reply capul ala al tau de mediocru tot n-a inteles ca cache_get_value_name_int nu mai returneaza absolut NIMIC? Si cum cacat egalezi tu o functie MySQL cu o variabila? =)))) new int_dest; cache_get_value_name_int(2, "money", int_dest); printf("The value in the third row and in the column 'money' is '%d'.", int_dest);
  17. Deci @Spmn nu a avut dreptate si nu te-a lamurit cu nimic. Si in continuarea ai dreptate ca tu cu un ctrl+h poti face chestia de mai jos.
  18. In primul rand, report pentru limbaj ca nu te-am jignit. Invata-i o metoda mai buna daca tot s-au chinuit altii, net superiori intregii comunitati de sa-mp din Romania, sa faca plugin-uri si librarii Daca vine un newbie si te vede pe tine Moderator Scripting si "servicii scripting de calitate" si tu vii si ii prezinti coduri cu strmid nu crezi ca o sa te ia drept model gresit? Un mic edit daca-mi permiti o mica sugestie pentru tutorialul tau switch( weaponid ) { case 1..9: { PlayerInfo[playerid][pMelle] = weaponid;// variabila care este idul armei va lua idul dat PlayerInfo[playerid][pAMelle] = ammo;//iar variabila care stocheaza gloantele va lau valoarea gloantelor date GivePlayerWeapon(playerid, weaponid, ammo);// si ii vom si da arma pentru ca nu o putem da in alt fel } case 22..24: // acelasi lucru dar pentru pistoale deagle silencer si 9mm { PlayerInfo[playerid][pPistol] = weaponid; PlayerInfo[playerid][pAPistol] = ammo; GivePlayerWeapon(playerid, weaponid, ammo); } case 25..27: // si pentru shootgun { PlayerInfo[playerid][pShootgun] = weaponid; PlayerInfo[playerid][pAShootgun] = ammo; GivePlayerWeapon(playerid, weaponid, ammo); } }
  19. Ai auzit de sscanf? new testSlots[ 16 ]; cache_get_value_name( row, "playerSlots", testSlots, sizeof( testSlots) ); sscanf( testSlots, "p<:>ddd", valoare[ 0 ], valoare[ 1 ], valoare[ 2 ] );
  20. CP is dati de motor btw. Un supercar ce merge ca un logan.
  21. Sa incepem: Nici macar la OnDialogResponse nu ai pus un switch pentru o viteza mai mare de raspuns ( este recomandat chiar si in pagina de wiki sa-mp). https://wiki.sa-mp.com/wiki/OnDialogResponse Nu ai switch la listitem din dialoguri deci la fel de prost. Ai bagat if(gLogged[playerid] != 1) return SendClientMessage(playerid,COLOR_RED,"Nu esti logat"); la fiecare comanda cand puteai foarte simplu sa foloseti codul o singura data in: OnPlayerCommandReceived dar nah csf, n-ai csf. Ai 297 de SetTimerEx in tot GM-ul deci optimizare se dovedeste a fi in floare. Pe partea de MySQL folosesti: cache_get_field_content(x,"PosZ", temp); HouseInfo[x][hPosZ] = floatstr(temp); si am o veste buna pentru tine S-a inventat si cache_get_field_content_float Surprinzator nici in SetPlayerToTeamColor(playerid) nu s-a auzit de switch mai ales la o functie utilizata des in spawn. Ai declarat un new strings[388]; global se pare si il folosesti in tot GM-ul dar nu ti-a auzit mintea de un strings[ 0 ] = EOS; ( (E)nd (O)f (S)tring ca sa nu te obosesti sa cauti ). M-am amuzat sa aflu ca SirFulgerica a facut un Live si la ~100 de jucatori s-a dus naibii serverul si avea undeva la 1-2k query/secunda (din declaratiile lui). Sute de linii de cod pentru un sistem de Paintball carea poate fi facut foarte simplu si-am sa-ti dau o mica lectie :* (P.S. Functia de mai jos ruleaza cele 4 tipuri de minigame in acelasi timp ) Am asteptat momentul sa-ti gasesc o creatie fabuloasa ca sa am un contra-argument la "stock-ul e mai bun" si la R40 cu un simplu CTRL+H. Poti in continuare sa te revolti sau sa faci ce vrei dar pentru mine si poate si pentru cei care au inteles ce-am scris mai sus esti un scripter ce tinde spre -infinit ca valoarea, pace! function PaintBallTimer( ) { for( new paintID=0; paintID < MAX_PAINT; paintID++ ) { if( paintballVariables[ paintID ][ paintTimer ] != 0 ) { paintballVariables[ paintID ][ paintTimer ]--; } if( paintballVariables[ paintID ][ paintStatus ] == 0 && paintballVariables[ paintID ][ paintTimer ] == 0 ) { if( paintballVariables[ paintID ][ paintPlayers ] >= 3 ) { foreach( Player, i ) { if( playerVariables[ i ][ pPaintBall ] == paintID ) { ResetServerWeapons( i ); playerVariables[ i ][ pPaintBallVotedMap ] = false; playerVariables[ i ][ pPaintBallVotedWeapon ] = false; playerVariables[ i ][ pPaintBallKills ] = 0; playerVariables[ i ][ pPaintBallDeaths ] = 0; playerVariables[ i ][ pPaintBallLevel ] = 0; } } ResetArenaVotes( paintID ); paintballVariables[ paintID ][ paintStatus ] = 1; paintballVariables[ paintID ][ paintTimer ] = 30; } else { paintballVariables[ paintID ][ paintStatus ] = 0; paintballVariables[ paintID ][ paintTimer ] = 0; } } else if( paintballVariables[ paintID ][ paintStatus ] == 1 && paintballVariables[ paintID ][ paintTimer ] == 0 ) { if( paintballVariables[ paintID ][ paintPlayers ] >= 3 ) { SelectVotedArena( paintID ); if( paintID == 0 ) paintballVariables[ paintID ][ paintWeaponSet ] = GetVoteScoreWeapon( paintID ); paintballVariables[ paintID ][ paintStatus ] = 2; paintballVariables[ paintID ][ paintTimer ] = 300; // 300 pentru normal - 2 minute pentru teste foreach( Player, i ) { if( playerVariables[ i ][ pPaintBall ] == paintID ) { SetPlayerArenaPosition( i ); SetPlayerHealthEx( i, 100 ); SetPlayerArmourEx( i, 0.0 ); GivePlayerWeaponPack( i, paintID ); } } } else { paintballVariables[ paintID ][ paintStatus ] = 0; paintballVariables[ paintID ][ paintTimer ] = 0; } } else if( paintballVariables[ paintID ][ paintStatus ] == 2 && paintballVariables[ paintID ][ paintTimer ] == 0 ) { if( paintballVariables[ paintID ][ paintPlayers ] >= 2 ) { new winnerID = CalculatePaintballWinner( paintID ); foreach( Player, i ) { if( playerVariables[ i ][ pPaintBall ] == paintID ) { // ( Insert Paintball logs ) gsQuery[ 0 ] = EOS; mysql_format( g_Handle, gsQuery, sizeof gsQuery, "INSERT INTO `server_paintball`(`paintPlayer`, `paintKills`, `paintDeaths`) VALUES ('%s', %d, %d)", playerVariables[ winnerID ][ pNormalName ], playerVariables[ winnerID ][ pPaintBallKills ], playerVariables[ winnerID ][ pPaintBallDeaths ] ); mysql_tquery( g_Handle, gsQuery ); FormatMSG( i, COLOR_YELLOW, "Round over! Winner: %s - %d kills.", PlayerName( winnerID ), playerVariables[ winnerID ][ pPaintBallKills ] ); SendClientMessage( i, COLOR_YELLOW, "Use /votegun to vote for a gun. Use /votemap to vote for a map." ); ResetServerWeapons( i ); playerVariables[ i ][ pPaintBallVotedMap ] = false; playerVariables[ i ][ pPaintBallVotedWeapon ] = false; playerVariables[ i ][ pPaintBallKills ] = 0; playerVariables[ i ][ pPaintBallDeaths ] = 0; playerVariables[ i ][ pPaintBallLevel ] = 0; } } ResetArenaVotes( paintID ); paintballVariables[ paintID ][ paintStatus ] = 1; paintballVariables[ paintID ][ paintTimer ] = 30; } else { paintballVariables[ paintID ][ paintStatus ] = 0; paintballVariables[ paintID ][ paintTimer ] = 0; } } // ( Update the Texts ) switch( paintballVariables[ paintID ][ paintStatus ] ) { case 0: // waiting for players { foreach( Player, i ) if( playerVariables[ i ][ pPaintBall ] == paintID ) Announce( i, "~n~~n~~y~~h~NOT ENOUGH PLAYERS TO START...", 2000, 3 ); paintballVariables[ paintID ][ paintString ][ 0 ] = EOS; format( paintballVariables[ paintID ][ paintString ], 128, "~g~WAITING FOR MORE PLAYERS TO JOIN...", TimeConvert( paintballVariables[ paintID ][ paintTimer ] ) ); } case 1: // vote map/gun { if( paintballVariables[ paintID ][ paintTimer ] <=5 ) { paintballVariables[ paintID ][ paintString ][ 0 ] = EOS; format( paintballVariables[ paintID ][ paintString ], 128, "~w~~h~PAINTBALL STARTING IN~n~~r~%d ~w~~h~SECONDS", paintballVariables[ paintID ][ paintTimer ] ); foreach( Player, i ) if( playerVariables[ i ][ pPaintBall ] == paintID ) Announce( i, paintballVariables[ paintID ][ paintString ], 2000, 4 ); } paintballVariables[ paintID ][ paintString ][ 0 ] = EOS; format( paintballVariables[ paintID ][ paintString ], 128, "PAINTBALL ROUND STARTS IN: ~y~~h~%s", TimeConvert( paintballVariables[ paintID ][ paintTimer ] ) ); } case 2: // play { if( paintballVariables[ paintID ][ paintPlayers ] < 2 ) { foreach( Player, i ) if( playerVariables[ i ][ pPaintBall ] == paintID ) ResetServerWeapons( i ); paintballVariables[ paintID ][ paintStatus ] = 0; paintballVariables[ paintID ][ paintTimer ] = 0; } paintballVariables[ paintID ][ paintString ][ 0 ] = EOS; format( paintballVariables[ paintID ][ paintString ], 128, "PAINTBALL ROUND ENDS IN: ~b~%s", TimeConvert( paintballVariables[ paintID ][ paintTimer ] ) ); } } UpdatePaintTextDraws( paintID ); } }
  22. Mai citeste pana iti dai seama ca scrie "Spmn i-ai dat Bluescreen".
  23. @SpmnI-ai dat bluescreen :))) Apropo eu am facut acea functie cu forward pentu float pentru ca din cate imi amintesc daca o faci pe stock trebuie sa il pui mai sus de functiile in care il folosesti si eu am un fix cu aranjarea scriptului si am facut un public
×
×
  • Create New...

Important Information

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