Jump to content

Ryso

Uživatel
  • Příspěvků

    13
  • Registrován

  • Aktivní

Reputace

0 Na nule

Návštěvníci

The recent visitors block is disabled and is not being shown to other users.

  1. Jo aha Preto odporucam danych hracov spectovat a uistit sa pred udelenim banu.
  2. Tu podmienku s vozidlom mam priamo v prikaze if(!IsPlayerInAnyVehicle(hrac)) return SendClientMessage(playerid,COLOR_RED,"[ADMIN] Hráč musí byť vo vozidle!"); // hrac musi byt vo vozidle
  3. V dnesnej dobe ma kazdy server problem s cheatermi a ich odhalovanim. Neexistuje ziaden anticheat, ktory by na 100% odhalil cheatera. Vo svojom mode mam spraveny jeden stunt, ktory je nemozne prejst so SetVehicleHealth(vehicleid,1000);, tak som spravil script, ktory spravi vozidlo nesmrtelnym (SetVehicleHealth(vehicleid,9999*1000);. Po postupnom testovani niektorym hracom tie vozidla stale vybuchovali a ani za boha som nevedel najst chybu. Neskor som si nasiel na nete sobeit (potreboval som airbreak na rychlejsie ziskavanie suradnic pre tvorbu svojho modu) a ked som vyskusal ten stunt so zapnutym sobeitom, nesmrtelnost vozidla z nicoho nic prestala fungovat. Po chvili testovania som zistil, ze sobeit nikdy neprekroci hranicu zivota vozidla nad standartnych 1000. A tak mi napadlo spravit script, ktory zisti, ci ma hrac spusteny sobeit, avsak dany hrac musi byt vo vozidle. Tento anticheat funguje nasledovne: #include new Float:OldVehicleHealth[MAX_PLAYERS]; // sem sa ulozi prvotny zivot vozidla new Float:NewVehicleHealth[MAX_PLAYERS]; // sem sa ulozi zivot pocas zistovania sobeitu #define MAX_ODPOCET_TIMER 1 new Odpocet_Timer[MAX_PLAYERS][MAX_ODPOCET_TIMER]; // nadefinujeme timer enum Informacie // klasicky enum, do ktoreho bude ulozena casomiera { timerSobeitCheck }; new Hrac[MAX_PLAYERS][informacie]; COMMAND:sobeit(playerid,params[]) //zaciatok prikazu { if(!IsPlayerAdmin(playerid)) return false; // je hrac rcon admin ? new hrac = strval(params); // ulozi parameter do if(isnull(params)) return SendClientMessage(playerid,COLOR_RED,"Použitie: /sobeit [ ID ]"); // toto vypise, ak zadate bez paarmetra if(!IsPlayerConnected(hrac)) return SendClientMessage(playerid,COLOR_RED,"Hráč nie je pripojený na serveri!"); // je hrac pripojeny ? if(!IsPlayerInAnyVehicle(hrac)) return SendClientMessage(playerid,COLOR_RED,"[ADMIN] Hráč musí byť vo vozidle!"); // hrac musi byt vo vozidle GetVehicleHealth(GetPlayerVehicleID(hrac),OldVehicleHealth[hrac]); // ulozi prvotny zivot vozidla, ktory bude potom vrateny SetVehicleHealth(GetPlayerVehicleID(hrac),5000); // nastavime zivot vozidla Hrac[hrac][timerSobeitCheck] = 2; // casomiera 2 sekundy Odpocet_Timer[hrac][1] = SetTimerEx("SobeitCheck",1000,true,"i",hrac); // spustime casomieru SendClientMessage(playerid,COLOR_RED,"[ANTICHEAT] Počkaj 2 sekundy, kým prebehne kontrola..."); // oznamovaci text.. return true; } publicEx SobeitCheck(playerid) // timer { if(Hrac[playerid][timerSobeitCheck] > 0) // odpocet { Hrac[playerid][timerSobeitCheck]--; } if(Hrac[playerid][timerSobeitCheck] == 1) // ak ostava presne 1 sekunda do konca, zistime zivot vozidla { GetVehicleHealth(GetPlayerVehicleID(playerid),NewVehicleHealth[playerid]); } if(Hrac[playerid][timerSobeitCheck] == 0) // vyhodnotenie { KillTimer(Odpocet_Timer[playerid][1]); // zrusime timer Hrac[playerid][timerSobeitCheck] = 0; // vynulujeme casomieru new str[128]; if(NewVehicleHealth[playerid] > float(1000)) // ak zivot ostal na tych povodnych 5000, hrac ne negativny // ta podmienka "viac ako 1000" tam je preto, lebo hrac moze pocas tych dvoch sekund naburat a zivot sa znizi (za 2 sekundy je velmi mala pravdepodobnost, ze si ju znizi az o 4000 { format(str,sizeof(str),"[ANTICHEAT] %s (ID: %d) je negatívny na sobeit!",PlayerName(playerid),playerid); SendClientMessageToAll(COLOR_RED,str); // vypise spravu SetVehicleHealth(GetPlayerVehicleID(playerid),OldVehicleHealth[playerid]); // vrati prvotny zivot vozidla } else // to znamena, ze sa BUD zivotnost znizila o 4000 (velmi nepravdepodobne), ALEBO hrac ma zapnuty sobeit, ktory automaticky nastavil zivot vozidla na 1000 { format(str,sizeof(str),"[ANTICHEAT] %s (ID: %d) je pozitívny na sobeit!",PlayerName(playerid),playerid); SendClientMessageToAll(COLOR_RED,str); // vypise spravu SetVehicleHealth(GetPlayerVehicleID(playerid),OldVehicleHealth[playerid]); // vrati prvotny zivot vozidla } } return true; } alebo v pastebin http://pastebin.com/ZV2W1ZHy To je len taky zaklad, ale podstata je zachovana. Samozrejme tie "SendClientMessageToAll" si zmente, aby to vypisalo len adminom, nechceme predsa, aby cheateri o tom vedeli . Nevyhodou tohto scriptu je to, ze hrac musi byt vo vozidle, ale zase na 100% zisti, ak ma hrac co i len zapnuty sobeit, pricom nemusi pouzivat ziaden z jeho konkretnych cheatov. Testoval som to len raz, ziadne bugy som nenasiel, vsetko funguje. Vyhodou je, ze cheater o tom ani nevie, ze na nom prebieha kontrola. PS: Pouzil som include zcmd.inc (najdete si na samp fore) (Neviem, ci to na bicykloch funguje)
  4. Ryso

    pomoc Array

    Mam nasledovny script: #define MAX_PLAYERS_VAR 100 #define PICKUP_NUMBER 5 #define MAX_LOCATIONS 60 new PickUpLocationForEachPlayer[MAX_PLAYERS_VAR][PICKUP_NUMBER]; new Float:AllPickUpLocations[MAX_LOCATIONS][3] = { {2689.9155,-1698.7030,9.9737}, {2218.4771,-1164.4073,25.2973}, ... // dokopy je ich 60 {2286.9871,-1106.2396,26.4612}, {2505.1658,-1694.7491,13.1132} } Ako spravim funkciu, ktora vybere nahodne 5 suradnic z tych 60tich a v nich vytvori pickupy?
  5. Keby si si to cele precital, vsimol by si si, ze som ten warning vlozil do 'Code' priamo do riadku, kam to ten warning vyhadzuje.
  6. Chcem spravit, ze hrac moze pri registracii cez dialog pouzit len znaky z PasswordChars[]: new PasswordChars[] = { "A","B","C","D","E","F","G","H","I","J","K","L","M", "N","O","P","Q","R","S","T","U","V","W","X","Y","Z", "a","b","c","d","e","f","g","h","i","j","k","l","m", "n","o","p","q","r","s","t","u","v","w","x","y","z", "0","1","2","3","4","5","6","7","8","9" }; stock PasswordExceptions(string[]) { for(new i=0; i<63; i++) { if(!strfind(string,PasswordChars[i],true) != -1) return true; // warning 213: tag mismatch } return false; } v OnDialogResponse: if(PasswordExceptions(inputtext)) { SendClientMessage(playerid,COLOR_RED,"Heslo môže obsahovať len písmená a čísla!"); } avsak pise to warning
  7. Ryso

    pomoc OnPlayerText

    Spravil som si funkciu, ze ked hrac napise slovo cheat, tak mu to vypise spravu, "Našiel si cheatera? Nahlás ho adminom cez /report", samozrejme odosle aj tu jeho povodnu spravu.. public OnPlayerText(playerid,text[]) { for(new i = 0; i < MAX_PLAYERS; i++) { if(strfind(text[i], "cheat", true) != -1) { new pName[24]; GetPlayerName(playerid, pName, 24); SendClientMessageToAll(COLOR_WHITE, text[i]); SendClientMessage(playerid, COLOR_RED, "Našiel si cheatera? Nahlás ho adminom cez /report"); return 0; } } return 1; } Lenze odo to odosle tu hracovu spravu bez jeho mena, odosle len ten text. Da sa to nejak spravit, ze ta sprava bude odoslana aj s hracovym menom s prislusnou farbou hraca?
  8. Nefunguje Vypise mi "89" cez GameTextForPlayer a to je vsetko... Pouzil som PutPlayerInVehicle..
  9. Praveze to odpocitavanie sekund je dolezite (to GameTextForPlayer), aby hrac vedel, kolko mu ostava casu..
  10. Spravil som prikaz, ktory vas posadi do RC lietadielka a v tom momente sa zacne odpocitavat 90 sekund (GameTextForPlayer), po ktorych uplynuti vas vysadi z toho vozidla a vozidlo bude odstranene, lenze cele to nefici new Odpocet_Timer_RC; if(strcmp("/rc", cmdtext, true) == 0) { new car; new SecondsLeftRC; SecondsLeftRC = 90; RC(playerid, SecondsLeftRC); Odpocet_Timer_RC = SetTimerEx("RC", 1000, true, "i", playerid); car = CreateVehicle(464,-2137.5256,116.9713,35.3203,270,1,2,0); PutPlayerInVehicle(playerid,car,0); SendClientMessage(playerid,0xFFFFFFAA,"Požičal si si RC Lietadielko na 90 sekúnd!"); return 1; } forward RC(playerid, SecondsLeftRC); public RC(playerid, SecondsLeftRC) { if(SecondsLeftRC < 91 && SecondsLeftRC > 0) { new str[100]; format(str,sizeof(str),"~w~%d",SecondsLeftRC); GameTextForPlayer(playerid,str,1000,1); } if(SecondsLeftRC == 0) { new car; SecondsLeftRC = 0; GameTextForPlayer(playerid,"cas uplynul",5000,3); KillTimer(Odpocet_Timer_RC); RemovePlayerFromVehicle(car); DestroyVehicle(car); } return 1; }
  11. Chcem vo svojom mode spravit (2 teamy), ze sa superi navzajom nevidia na radare; na radare vidis len svojich spoluhracov ShowNameTags(0); ShowPlayerMarkers(0); forward SetPlayerNametagsMarkers(playerid); public SetPlayerNametagsMarkers(playerid) { if(Hrac[playerid][gTeam] == TEAM_GREEN) { for(new i=0; i < MAX_PLAYERS; i++) { if(IsPlayerConnected(i)) { if(Hrac[i][gTeam] == TEAM_GREEN) { ShowPlayerNameTagForPlayer(i, playerid, true); SetPlayerMarkerForPlayer(i, playerid, TEAM_GREEN_COLOR); ShowPlayerNameTagForPlayer(playerid, i, true); SetPlayerMarkerForPlayer(playerid, i, TEAM_GREEN_COLOR); } else if(Hrac[i][gTeam] == TEAM_BLUE) { ShowPlayerNameTagForPlayer(i, playerid, false); SetPlayerMarkerForPlayer(i, playerid, TEAM_BLUE_COLOR); ShowPlayerNameTagForPlayer(playerid, i, false); SetPlayerMarkerForPlayer(playerid, i, TEAM_BLUE_COLOR); } } } } else if(Hrac[playerid][gTeam] == TEAM_BLUE) { for(new i=0; i < MAX_PLAYERS; i++) { if(IsPlayerConnected(i)) { if(Hrac[i][gTeam] == TEAM_GREEN) { ShowPlayerNameTagForPlayer(i, playerid, false); SetPlayerMarkerForPlayer(i, playerid, TEAM_GREEN_COLOR); ShowPlayerNameTagForPlayer(playerid, i, false); SetPlayerMarkerForPlayer(playerid, i, TEAM_GREEN_COLOR); } else if(Hrac[i][gTeam] == TEAM_BLUE) { ShowPlayerNameTagForPlayer(i, playerid, true); SetPlayerMarkerForPlayer(i, playerid, TEAM_BLUE_COLOR); ShowPlayerNameTagForPlayer(playerid, i, true); SetPlayerMarkerForPlayer(playerid, i, TEAM_BLUE_COLOR); } } } } return 1; } Lenze to nefici
  12. Nastavil som si teamkill, ze pri zabiti spoluhraca ma to taktiez zabije.. Lenze staci, ked vystrelim do spoluhraca co i len jeden naboj, a ked ten hrac napise potom /kill, alebo sa sam zabije nejakym inym sposobom, do killistu vypise, ze som ho zabil ja a tym padom ma to ako teamkill tiez zabije.. Da sa to nejak opravit ?
  13. Chcem spravit pickup podobny tomu na PTPM (moze sa zobrat len raz za urcitu dobu, pricom ten pickup tam ostane; ak niekto zobere ten pickup pocas tej doby cakania, vypise mu to text..). Spravil som nasledovne: SetTimerEx("ZazracnaStudna",90000, true,""); //pickup sa obnovi kazdych 90 sekund forward ZazracnaStudna(); public ZazracnaStudna() { Pickup[7] = CreatePickup(3082,1,-2114.3657,207.7968,36.2977); return 1; } Ako mam dalej spravit, ze hracovi, ktory zodvihne ten pickup, vypise "Pickup momentalne nedostupny" ?
×
×
  • Create New...