Jump to content

khain.dev

Membru
  • Posts

    658
  • Joined

  • Last visited

  • Days Won

    52

khain.dev last won the day on May 27

khain.dev had the most liked content!

About khain.dev

  • Birthday 19.01.2000

Profile Information

  • Sex
    Masculin
  • Interests
    Programming
  • In-game Name
    khain.dev
  • Level of knowledge
    Experimentat

Contact Methods

Recent Profile Visitors

7.363 profile views

khain.dev's Achievements

Experienced

Experienced (11/14)

  • Dedicated Rare
  • Very Popular Rare
  • First Post
  • Collaborator
  • Posting Machine Rare

Recent Badges

167

Reputation

1

Community Answers

  1. enum e_RadarData { bool:rOn, rLimit, rAreaId } new RadarData[MAX_PLAYERS][e_RadarData]; new Iterator:RadarsOn<MAX_PLAYERS>; #define RADAR_STREAMER_IDENTIFIER 999 public OnGameModeExit() { foreach(new i : RadarsOn) { ResetPlayerRadar(i); } Iter_Clear(RadarsOn); return 1; } public OnPlayerDisconnect(playerid, reason) { if(RadarData[playerid][rOn]) { ResetPlayerRadar(playerid); } return 1; } public OnPlayerDeath(playerid, killerid, reason) { if(RadarData[playerid][rOn]) { ResetPlayerRadar(playerid); SendClientMessage(playerid, COLOR_GREY, "Radarul a fost oprit deoarece ai murit."); } return 1; } stock ResetPlayerRadar(playerid) { if(IsValidDynamicArea(RadarData[playerid][rAreaId])) { DestroyDynamicArea(RadarData[playerid][rAreaId]); } RadarData[playerid][rOn] = false; RadarData[playerid][rLimit] = 0; RadarData[playerid][rAreaId] = INVALID_STREAMER_ID; Iter_Remove(RadarsOn, playerid); TogglePlayerControllable(playerid, 1); return 1; } CMD:startradar(playerid, params[]) { if(!IsACop(playerid)) return SendClientMessage(playerid, COLOR_GREY, "Nu faci parte din departament."); if(OnDuty[playerid] != 1) return SendClientMessage(playerid, COLOR_LGREEN, "Eroare: Nu esti la datorie!"); new vehicleid = GetPlayerVehicleID(playerid); if(!Copcar2(vehicleid)) return SendClientMessage(playerid, COLOR_GREY, "Nu esti intr-o masina a factiunii."); if(RadarData[playerid][rOn]) return SendClientMessage(playerid, -1, "Ai deja activat radaru."); new viteza; if(sscanf(params, "d", viteza)) return SendClientMessage(playerid, COLOR_GREY, "USAGE: {FFFFFF}/startradar <Speed Limit>"); if(viteza > 200 || viteza < 40) return SendClientMessage(playerid, -1, "Viteza invalida (40-200)."); new Float:cX, Float:cY, Float:cZ, Float:cAngle; GetVehiclePos(vehicleid, cX, cY, cZ); GetVehicleZAngle(vehicleid, cAngle); new Float:rad = (90.0 - cAngle) * 0.0174532925; new Float:points[8]; points[0] = cX; points[1] = cY; points[2] = cX + (45.0 * floatcos(rad + 0.15)); points[3] = cY + (45.0 * floatsin(rad + 0.15)); points[4] = cX + (45.0 * floatcos(rad - 0.15)); points[5] = cY + (45.0 * floatsin(rad - 0.15)); points[6] = cX; points[7] = cY; new areaid = CreateDynamicPolygon(points, cZ - 3.0, cZ + 6.0, 4); Streamer_SetIntData(STREAMER_TYPE_AREA, areaid, E_STREAMER_EXTRA_ID, playerid + RADAR_STREAMER_IDENTIFIER); RadarData[playerid][rOn] = true; RadarData[playerid][rLimit] = viteza; RadarData[playerid][rAreaId] = areaid; Iter_Add(RadarsOn, playerid); TogglePlayerControllable(playerid, 0); new string[64]; format(string, sizeof(string), "Ai activat radarul. Viteza maxima: %d KM/H.", viteza); SendClientMessage(playerid, COLOR_YELLOW, string); return 1; } CMD:stopradar(playerid, params[]) { if(!IsACop(playerid)) return SendClientMessage(playerid, COLOR_GREY, "Nu faci parte din politie."); if(!RadarData[playerid][rOn]) return SendClientMessage(playerid, COLOR_GREY, "Nu ai radarul activ."); ResetPlayerRadar(playerid); SendClientMessage(playerid, COLOR_YELLOW, "Ai dezactivat radarul!"); return 1; } public OnPlayerEnterDynamicArea(playerid, areaid) { new extraid = Streamer_GetIntData(STREAMER_TYPE_AREA, areaid, E_STREAMER_EXTRA_ID); if(extraid >= RADAR_STREAMER_IDENTIFIER) { new copid = extraid - RADAR_STREAMER_IDENTIFIER; if(IsPlayerConnected(copid) && RadarData[copid][rOn] && RadarData[copid][rAreaId] == areaid) { if(playerid != copid && GetPlayerState(playerid) == PLAYER_STATE_DRIVER && OnDuty[playerid] != 1) { new viteza = Carspeed1(playerid); if(viteza > RadarData[copid][rLimit]) { new targetName[MAX_PLAYER_NAME], copName[MAX_PLAYER_NAME], msg[144]; GetPlayerName(playerid, targetName, sizeof(targetName)); GetPlayerName(copid, copName, sizeof(copName)); format(msg, sizeof(msg), "{FF0000}[RADAR] %s[ID:%d] conduce cu {FFFFFF}%d km/h{FF0000}, Locatie: %s, Limita: %d km/h!", targetName, playerid, viteza, GetPlayerZone(playerid), RadarData[copid][rLimit]); SendClientMessage(copid, COLOR_LIGHTBLUE, msg); format(msg, sizeof(msg), "{FF0000}[RADAR] Ai fost surprins de %s conducand cu {FFFFFF}%d km/h{FF0000}. Limita: %d km/h.", copName, viteza, RadarData[copid][rLimit]); SendClientMessage(playerid, COLOR_YELLOW, msg); } } } } return 1; } Am imbunatatit codul tau, ai avut un bug floatcos/floatsin, eroare de cash
  2. enum e_RadarData { bool:rOn, rLimit } new RadarData[MAX_PLAYERS][e_RadarData]; new Iterator:RadarsOn<MAX_PLAYERS>; new pickuptimer; public OnGameModeInit() { pickuptimer = SetTimer("CustomPickups", 1000, true); return 1; } public OnGameModeExit() { KillTimer(pickuptimer); return 1; } CMD:startradar(playerid, params[]) { if(!IsACop(playerid)) return SendClientMessage(playerid, COLOR_GREY, "Nu faci parte din departament."); if(OnDuty[playerid] != 1) return SendClientMessage(playerid, COLOR_LGREEN, "Eroare: Nu esti la datorie!"); if(!Copcar2(GetPlayerVehicleID(playerid))) return SendClientMessage(playerid, COLOR_GREY, "Nu esti intr-o masina a factiunii."); if(RadarData[playerid][rOn]) return SendClientMessage(playerid, -1, "Ai deja activat radaru."); new viteza; if(sscanf(params, "d", viteza)) return SendClientMessage(playerid, COLOR_GREY, "USAGE: {FFFFFF}/startradar <Speed Limit>"); if(viteza > 200 || viteza < 40) return SendClientMessage(playerid, -1, "Viteza invalida (40-200)."); RadarData[playerid][rOn] = true; RadarData[playerid][rLimit] = viteza; Iter_Add(RadarsOn, playerid); TogglePlayerControllable(playerid, 0); new string[64]; format(string, sizeof(string), "Ai activat radarul. Viteza maxima: %d KM/H.", viteza); SendClientMessage(playerid, COLOR_YELLOW, string); return 1; } CMD:stopradar(playerid, params[]) { if(!IsACop(playerid)) return SendClientMessage(playerid, COLOR_GREY, "Nu faci parte din 専用 politiei."); if(!RadarData[playerid][rOn]) return SendClientMessage(playerid, COLOR_GREY, "Nu ai radarul activ."); RadarData[playerid][rOn] = false; RadarData[playerid][rLimit] = 0; Iter_Remove(RadarsOn, playerid); TogglePlayerControllable(playerid, 1); SendClientMessage(playerid, COLOR_YELLOW, "Ai dezactivat radarul!"); return 1; } forward CustomPickups(); public CustomPickups() { if(Iter_Count(RadarsOn) == 0) return 1; new Float:pX, Float:pY, Float:pZ; new targetName[MAX_PLAYER_NAME], copName[MAX_PLAYER_NAME], msg[144]; foreach(new o : Player) { if(GetPlayerState(o) != PLAYER_STATE_DRIVER || OnDuty[o] == 1) continue; new viteza = Carspeed1(o); GetPlayerPos(o, pX, pY, pZ); foreach(new i : RadarsOn) { if(viteza <= RadarData[i][rLimit]) continue; if(IsPlayerInRangeOfPoint(i, 30.0, pX, pY, pZ)) { GetPlayerName(o, targetName, sizeof(targetName)); GetPlayerName(i, copName, sizeof(copName)); format(msg, sizeof(msg), "{FF0000}[RADAR] %s[ID:%d] conduce cu {FF0000}%d km/h, Locatie: %s, Limita: %d km/h!", targetName, o, viteza, GetPlayerZone(o), RadarData[i][rLimit]); SendClientMessage(i, COLOR_LIGHTBLUE, msg); format(msg, sizeof(msg), "{FF0000}[RADAR] Ai fost surprins de %s conducand cu {FF0000}%d km/h. Limita: %d km/h.", copName, viteza, RadarData[i][rLimit]); SendClientMessage(o, COLOR_YELLOW, msg); break; } } } return 1; }
  3. #include <a_samp> // Intervalul de timp în milisecunde (Ex: 30 de minute = 30 * 60 * 1000) #define WEATHER_TIMER_DELAY (30 * 60 * 1000) // Lista cu ID-urile de vreme alese de tine new const ValidWeathers[] = {1, 2, 3, 5, 9, 12, 15}; public OnGameModeInit() { // Pornim timerul care va apela funcția "ChangeRandomWeather" periodic SetTimer("ChangeRandomWeather", WEATHER_TIMER_DELAY, true); // Opțional: Setăm o vreme random chiar și când se deschide serverul ChangeRandomWeather(); return 1; } forward ChangeRandomWeather(); public ChangeRandomWeather() { // random(sizeof(ValidWeathers)) alege un index la întâmplare din vector new randomIndex = random(sizeof(ValidWeathers)); new newWeather = ValidWeathers[randomIndex]; // Setăm vremea globală pe server SetWeather(newWeather); // Trimitem un mesaj informativ tuturor jucătorilor (opțional) new string[64]; format(string, sizeof(string), "{FF9900}[Server]{FFFFFF} Vremea a fost schimbată (ID: %d).", newWeather); SendClientMessageToAll(-1, string); return 1; } /* sizeof(ValidWeathers): Află automat câte ID-uri ai pus în listă (în cazul tău, 7 ID-uri). Dacă pe viitor vrei să adaugi și ID-ul 7, doar îl treci în array {1, 2, 3, 5, 9, 12, 15, 7} și codul se va adapta singur. random(...): Extrage o poziție din listă (de la 0 la 6). SetWeather(newWeather): Schimbă vremea pentru toți jucătorii care se conectează sau sunt deja pe server.*/
  4. function ScadeTimpBillboard() { new query[248]; for(new i = 0; i < MAX_BILLBOARDS; i++) { if(Billboard[i][blOwned] > 0) { if(Billboard[i][blExpire] > 0) { Billboard[i][blExpire] -= 60; UpdateLabelBillboard(i); mysql_format(SQL, query, sizeof(query), "UPDATE `billboards` SET `expire`='%d' WHERE `ID`='%d'", Billboard[i][blExpire], i); mysql_tquery(SQL, query, "", ""); if(Billboard[i][blExpire] <= 0) { mysql_format(SQL, query, sizeof(query), "UPDATE `users` SET `Billboard` = '0' WHERE `Username` = '%s'", Billboard[i][blOwner]); mysql_tquery(SQL, query, "", "" ); Billboard[i][blOwned] = 0; Billboard[i][blPhone] = 0; Billboard[i][blExpire] = 0; format(Billboard[i][blOwner],25,"AdmBot"); format(Billboard[i][blFont],25,"Arial"); format(Billboard[i][blMessage],32,"Your advertisement here!"); mysql_format(SQL,query,248,"UPDATE `billboards` SET `blFont`='Arial',`blOwned`='0',`blOwner`='AdmBot',`blPhone`='0',`blMessage`='Your advertisement here!',`expire`='0' WHERE `ID` = '%d' LIMIT 1",Billboard[i][blID]); mysql_tquery(SQL,query,"",""); SetDynamicObjectMaterialText(Billboard[i][blObjectID],0,Billboard[i][blMessage], OBJECT_MATERIAL_SIZE_256x128,Billboard[i][blFont], 18, 0, 0xFF000000, 0xFFFFFFFF, OBJECT_MATERIAL_TEXT_ALIGN_CENTER); UpdateLabelBillboard(i); } } } } return 1; } Poftim
  5. cea mai proasta investitie in 2026 este deschiderea unui server samp, nu mai credeti in stele fratilor
  6. Spor la vanzare, nustiu daca mai deschide cineva servere in 2026
  7. Daca un server are +- 500 playeri pe zi (in functie evident de sistemul donate pe server), intr-un an de zile lejer poti sa faci 40k+ euro
  8. Eu zic să nu vă mai pierdeți timpul cu cearta fără rost, fiecare decizie îi aparține și comentariile sau jignirile sunt lipsite de bun simț. Toți sunt proști în programare, nu este unul deștept să le știe pe toate, faptul că unul e mai slab și altul e mai bun în programare nu îți rezervă dreptul de a jigni omul. @Sancky să îți vezi de treaba ta iar @AlexxAdv spor la vânzare și nu mai scrieți prostii în topic să vadă toți bășinile voastre. Mergeți în PM și discutați până ce vă apucă tensiunea.
  9. Prea simplu GM-ul pentru 2024.
  10. In server log nu ai erori? Vezi ca problema ar putea fi in OnPlayerStreamIn, anume acest plugin aplica animatia daca catre alti jucatori, trimite ce cod ai acolo, plus actualizează plugin-ul streamer inclusiv si includul, ar putea fi problema si aici
  11. Hmm...verifica daca CHAINSAW este incarcat corect si nu are erori, este complicat sa ne dăm seama din ce motiv nu arata si celor din jur, incearca si codul de jos CMD:dig(playerid, params[]) { ClearAnimations(playerid); ApplyAnimation(playerid, "CHAINSAW", "WEAPON_csawlo", 4.0, 1, 0, 0, 0, 3000, 1); ForceClassSelection(playerid); return 1; }
  12. new Float:x, Float:y, Float:z; GetPlayerPos(playerid, x, y, z); foreach(new i : Player) { if(i != playerid && IsPlayerInRangeOfPoint(i, 10.0, GetPlayerPosX(playerid), GetPlayerPosY(playerid), GetPlayerPosZ(playerid))) { ApplyAnimation(i, "CHAINSAW", "WEAPON_csawlo", 4.0, 0, 0, 0, 0, 3000, 1); } }
  13. /* ESTE DOAR UN EXEMPLU CUM POTI REALIZA */ #define MAX_GANGS 9 /* pui enum-urile tale */ enum GangData { GangID, GangTurfCount }; new GangInfo[MAX_GANGS][GangData]; CMD:top(playerid, params[]) { new gangIDs[MAX_GANGS] = {15, 16, 17, 18, 19, 20, 21, 22, 23}, GangCount[MAX_GANGS], new i, j; for (i = 0; i < MAX_GANGS; i++) { GangInfo[i][GangID] = gangIDs[i]; GangInfo[i][GangTurfCount] = 0; } foreach (new i : GangTurfs) { for (j = 0; j < MAX_GANGS; j++) { if (TurfInfo[i][zOwned] == GangInfo[j][GangID]) { GangInfo[j][GangTurfCount]++; break; } } } for (i = 0; i < MAX_GANGS - 1; i++) { for (j = i + 1; j < MAX_GANGS; j++) { if (GangInfo[i][GangTurfCount] < GangInfo[j][GangTurfCount]) { new tempID = GangInfo[i][GangID]; new tempCount = GangInfo[i][GangTurfCount]; GangInfo[i][GangID] = GangInfo[j][GangID]; GangInfo[i][GangTurfCount] = GangInfo[j][GangTurfCount]; GangInfo[j][GangID] = tempID; GangInfo[j][GangTurfCount] = tempCount; } } } SendClientMessage(playerid, COLOR_WHITE, "---------- Top Gangs ----------"); for (i = 0; i < MAX_GANGS; i++) { SendClientMessage(playerid, COLOR_WHITE, "{%s}%s {FFFFFF}- %d turfs", GetFactionColor(GangInfo[i][GangID]), FactionName(GangInfo[i][GangID]), GangInfo[i][GangTurfCount]); } SendClientMessage(playerid, COLOR_WHITE, "-------------------------------------"); return 1; }
  14. Este posibil să estimezi capacitatea de rezistență sa îi spun așa ce ține de playeri pe server. La o deschidere de server unde te aștepți că o să se conecteze în același timp +200 playeri, atunci poti face un DDos test asupra serverului tău inainte să il deschizi, practic printr-un test ddos asupra serverului poti vedea daca la deschidere o sa reziste sau nu în momentul unor conectari multiple. O altă metodă la care mulți ajung pentru a testa funcitonalitatea bună a GM-ului este adăugarea de boti fizici pe server, după cum știm un bot față de un player real folosește mai multe resurse ale serverului, respectiv poti adăuga un minim de 300 playeri și daca rezistă atât gm-ul cât și serverul, atunci e bine. Revenind la mentiunea ta, este greu sa estimezi cat de bine o sa tina server-ul tau la solicitari mari, totusi metodele mentionate mai sus simuleaza un test asupra functionalității optime al gm-ului și permite să vezi dacă poate rezista la solicitări mari sau nu.
  15. Nu va mai pierdeți ambii timpul cu acest subiect, în caz contrar, fratele @-=[Vyorel]=- vă rezolvă rapid
×
×
  • 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.