Ryso
Uživatel-
Příspěvků
13 -
Registrován
-
Aktivní
Reputace
0 Na nuleNávštěvníci
The recent visitors block is disabled and is not being shown to other users.
-
Jo aha Preto odporucam danych hracov spectovat a uistit sa pred udelenim banu.
-
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
-
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)
-
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?
-
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.
-
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
-
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?
-
Nefunguje Vypise mi "89" cez GameTextForPlayer a to je vsetko... Pouzil som PutPlayerInVehicle..
-
Praveze to odpocitavanie sekund je dolezite (to GameTextForPlayer), aby hrac vedel, kolko mu ostava casu..
-
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; }
-
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
-
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 ?
-
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" ?