Jump to content

Banditul

Moderator
  • Posts

    1,134
  • Joined

  • Last visited

  • Days Won

    96

Everything posted by Banditul

  1. In cazul acesta verifica unde ai declarat functia si vezi ce parametri are nevoie. In cazul tau al treilea argument este GetName(id) e posibil ca functia ta sa nu necesite un string sau sa fie gresit facuta.
  2. Ok si care e linia cu acel warning? Pentru ca vad cateva functii care au 3 argumente care pot produce asta. Ca idee poate ai ceva gen Functie (argument1, argument2, Float:argument3) { } Si sa o chemi (acest cod produce warning) new variabila1, variabila2, variabla3; Functie(variabila1, variabila2, variabla3); Iar codul corect sa fie (acest cod nu produce warning) new variabila1, variabila2, Float:variabla3; Functie(variabila1, variabila2, variabla3);
  3. Poate unul dintre gamemode-uri de acest gen care este inca actualizat ar fi https://github.com/Southclaws/ScavengeSurvive care are avantajul de a fi open source , desigur exista o licenta pe care trebuie sa o respecti ce e drept.
  4. Primul post imi sugereaza ca ai deja un sistem de conturi facut pe dini. Daca nu este cazul poti verifica aceste tutoriale Astfel incat sa ai sistemul si sa iti creeze acele conturi pentru fiecare jucator ca sa poti stoca date. Acum, daca nu doresti sa ai login/register dar totusi vrei sa ai doar un fisier pentru acel bonus pentru fiecare jucator poti eventual crea ceva local doar pentru asta CMD:bonus(playerid, params[]) { new file[MAX_PLAYER_NAME + 20], name[MAX_PLAYER_NAME + 1]; GetPlayerName(playerid, name, sizeof name); format(file, sizeof file, "/Bonus/%s.ini", name); // Creaza fisierul daca nu exista if (!dini_Exists(file)) { dini_Create(file); dini_IntSet(file, "Bonus", 1); GivePlayerMoney(playerid, 20000); // Jucatorul a primit bonus return 1; } // Daca exista fisierul // Citeste valoarea new bonus = dini_Get(file, "Bonus"); if (bonus == 1) { // Nu ii da bonus are deja return 1; } // Jucatorul a primit bonus GivePlayerMoney(playerid, 20000); // seteaza la Bonus valoarea 1 in fisier dini_IntSet(file, "Bonus", 1); return 1; }
  5. Dini este mai mult decat antic dar ca sa salvezi date in fisierul jucatorului trebuie sa te folosesti de functia dini_IntSet(filename[],key[],value); eventual ce vei dori sa faci in comanda este ceva de genul if (dini_Exists(file)) { dini_IntSet(file, "Bonus", 1); } Unde file este calea ta catre fisierul jucatorului, ex: Account/GamerulFOX.ini (adica in folderul scriptfiles care contine folderul Account) dar asta depinde de implementatia pe care o ai deja facuta iar in loc de "Bonus" e posibil sa fi definit tu deja altceva. Acuma eventual poti avea poate PlayerInfo[playerid][Bonus] = 1; if (dini_Exists(file)) { dini_IntSet(file, "Bonus", PlayerInfo[playerid][Bonus]); } Daca voiai un exemplu concret cu comanda pe care deja o ai poti oferi data viitoare codul pe care ai incercat sa il faci astfel incat sa ai un exemplu mai bun decat cateva lini de cod
  6. Presupun ca daca mergi pe idea de "faceti voi pentru mine, eu doar o sa dau copy-paste si nu invat nimic" nu o sa ajungi prea departe si judecand dupa topicurile tale din trecut care erau pe teme similare legate de "comanda delay" etc ma asteptam ca ai invatat ceva pana acum. Felicitari totusi pentru ca ai observat acele greseli. Cum am specificat, este o idee de baza pe care esti liber sa o adaptezi si sa o extinzi cum doresti. Poti pune CollectTime[playerid] = 0 la OnPlayerConnect/OnPlayerDisconnect ca sa fie resetata variabila pentru playerul care se va conecta cu acelasi playerid doar ca cum am explicat o sa crezei un 'bug' pe care il poti rezolva doar cu stocare persistenta a datelor. Daca consideri ca logica comenzi este gresita, poti face debug cu printf sa iti arate valoarea gettime si CollectTime si sa modifici acel if cu conditia dorita conform acelor valori. Eventual poti incerca sa cauti pe google informati despre timestamp si cum functioneaza.
  7. new CollectTime[MAX_PLAYERS]; CMD:collect(playerid, params[]) { if (CollectTime[playerid] > gettime()) { new message[30]; format(message, sizeof message, "Timp ramas %i minute.", (CollectTime[playerid] - gettime()) / 60 ); SendClientMessage(playerid, message); } GivePlayerMoney(playerid, 25000); CollectTime[playerid] = gettime() + 15 * 60; } O idee de baza. Singura problema fara a avea o stocare persistenta pentru acea valoare (fara baza de date/ etc) playerul poate pur si simplu sa se reconecteze si sa foloseasca comanda la infinit
  8. https://github.com/pawn-lang/YSI-Includes/blob/5.x/YSI_Coding/y_hooks/quick-start.md#function Cu y_hooks poti face asta Edit: Presupun ca ai nevoie de YSI 5+
  9. Daca te consoleaza cu ceva nici mie nu imi functioneaza. Poate s-a jucat Vyorel la butoane. Edit: Vyorel Si Woopps au fost anuntati de problema, o sa rezolve curand
  10. Din ce ma pot gandi eu ar putea fi 2 posibilitati de a face acest lucru doar ca in ambele situatii jucatori sunt nevoiti sa descarce si sa instaleze in jocul lor. 1. Un plugin asemanator sampvoice (care este necesar sa fie atat instalat pe server cat si pe pc jucatorului) care va trimite informatii legate de acele fisiere pe care le doresti blocate si sa interzici conectarea playerului la server 2. Un launcher pe care playeri il pot folosi sa conecteze la serverul tau si in cazul acesta se poate bloca acesul jucatorului inainte sa apuce sa porneasca sa-mp Un exemplu de launcher pe care il poti folosi si configura Din pacate in ambele cazuri este ceva de munca si nu mai tine de sa-mp/pawn ci de alte technologi ,ca launcherul oferit exemplu, WinForms + C# sau C++ (daca e vorba de plugin) sau cu totul alte technologi
  11. Ok ne poti arata ce ai incercat sa faci si ce erori ai intampinat? Pentru ca din ce ai spus ai incercat si nu a mers ceea ce inseamna ca ca respectivul cod nu este complet functional. Daca comanda in sine doar iti trimite un query de update catre baza de date e posibil ca partea care iti incarca datele respective la login sa nu functioneze.
  12. Cel mai simplu lucru pe care il poti face este sa vezi ce este scris in serverlog.txt si sa vezi daca exista erori
  13. Nu sunt erori, sunt doar avertismente si iti semnaleaza faptul ca acele lini nu sunt "aranjate" cu restul linilor din jurul lor si cu contextul in care se afla. Din pacate e destul de greu de spus cum sa le aranjezi pentru ca formatarea textului fara a folosi functionalitatea de 'code' oferita de platofrma forumului e putin dificila. CMD:aduty(playerid, params[]) { if(IsPlayerAdmin(playerid)) { new type[25]; if(sscanf(params, "s[25]", type)) return SendClientMessage(playerid, -1,"Syntax: /aduty <on/off>"); if(strcmp(type, "off", true) == 0) { ResetPlayerWeapons(playerid); SetPlayerArmour(playerid, 0); SetPlayerHealth(playerid, 100); SetPlayerSkin(playerid, 25); SendClientMessageToAll(COLOR_RED, "((AdmBot: Unul dintre administratori este acum off duty.))"); } else if(strcmp(type, "on", true) == 0) { GivePlayerWeapon(playerid, 38, 9999); SetPlayerArmour(playerid, 9999999); SetPlayerHealth(playerid, 9999999); SetPlayerSkin(playerid, 217); SendClientMessageToAll(COLOR_GREEN, "((AdmBot: Unul dintre administratori este acum on duty.))"); } } else { SendClientMessage(playerid, COLOR_RED, "Eroare: Nu esti un Administrator."); } return 1; }
  14. Ti-as sugera sa studiezi putin acest tabel https://team.sa-mp.com/wiki/Control_Structures.html#Operators In codul tau din ce pot descifra ai folosit doar & inlocde && si = in loc de == pentru conditiile din if
  15. Cum am spus, acel #if defined este un un bloc (care nu are paranteze pentru limitare ceea ce poate crea putina confuzie ) si atat timp cat nu exista #define FILTERSCRIPT inaintea lui va ignora ce se afla pana la #else/#endif #if defined FILTERSCRIPT new ijswfsfwerf; // Sunt ignorate la compilare new iaofjwuiefsfs; // Orice cod care se afla aici // Va fi ignorat daca inainte de // #if defined FILTERSCRIPT nu exista #define FILTERSCRIPT #endif new Masina[2]; // Orice e pus dupa #endif va fi compilat si rulat Am oferit un simplu exemplu care nu cred ca este prea avansat cat sa nu poata fi reprodus (era mai usor daca codul oferit era in text si intr-o imagine dar nu asta e important) #include <a_samp> new TaxiCars[3]; new TaxiCP[MAX_PLAYERS]; main() { print("Infinity Gamemode"); } public OnGameModeInit() { TaxiCars[0] = CreateVehicle(vehicletype, Float:x, Float:y, Float:z, Float:rotation, color1, color2, respawn_delay, addsiren=0); TaxiCars[1] = CreateVehicle(vehicletype, Float:x, Float:y, Float:z, Float:rotation, color1, color2, respawn_delay, addsiren=0); TaxiCars[2] = CreateVehicle(vehicletype, Float:x, Float:y, Float:z, Float:rotation, color1, color2, respawn_delay, addsiren=0); SetGameModeText("Gamemode Infinity"); AddPlayerClass(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:z_angle, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo); } Nu este nevoie de altceva, acel #if defined FILTERSCRIPT OnFilterScriptInit()/OnFilterScriptExit() nu sunt necesare si pot sterse
  16. Iti da eroare pentru ca ai definit TaxiCars in interiorul #if defined FILTERSCRIPT si daca nu ai #define FILTERSCRIPT (ceea ce nu ai) acel new TaxiCars[3]; va fi ignorat #include <a_samp> new TaxiCars[3]; new TaxiCP[MAX_PLAYERS]; main() {} public OnGamemodeInit() { // TaxiCars[0] = .... }
  17. symbol already defined: "LoadMaps" Mai ai altundeva LoadMaps declarat in scriptul tau? error 010: invalid function or declaration Nu stiu care e linia 27, presupun ca e undeva la return 1 care nu vad sa aibe o problema Ma mir totusi ca nu ai zis nimic de eroarea referitoare la playerid ca nu exista
  18. public LoadMaps() { } Ai pus ; unde nu trebuie Edit: Acel RemoveBuildingForPlayer nu il prea vad bine pus. Eventual il pui direct la OnPlayerConnect ori faci o alta functie doar pentru asta si o chemi la OnPlayerConnect
  19. Banditul

    Erroare

    Sa inteleg ca functia getbank contine acel bigint? Pentru ca eroarea ta nu prea corespunde cu codul. Ce as putea presupune e faptul ca GetBigInt este de fapt un array iar in scriptul tau se invoca fara index. Ex: new GetBigInt[10]; new test = GetBigInt; // Incerci sa folosesti array fara a specifica un index Edit: Am incercat sa explorez putin scriptul pe telefon si comanda originala e putin diferita. Din ce pot vedea exista o functie de comparatie pe care o poti folosi, presupun ca nu poti compara cum ai facut tu. if(!CompareBigInt(pData[playerid][Bank2], pData[playerid][Bank], 0, params[0])) return sendError(playerid, "Nu detineti aceasta suma in banca");
  20. Esti sigur ca e aceiasi versiune? cache_get_value_name_int a fost introdusa odata cu r40 si nu e valabila in r33-r39 Functiile pentru r33-r39: https://team.sa-mp.com/wiki/MySQL_R33.html Functiile pentru r40+: https://team.sa-mp.com/wiki/MySQL_R40.html Deasemenea ca si sugestie foloseste oversiune mai noua de crashdetect pentru a avea mai multe informatii legate de erorile tale, 4.15.1 e de acum 7 ani
  21. Descarci de aici mysql pentru samp (de preferat sa te asiguri ca descarci versiunea pe care scriptul tau o folsoeste). Pui fisierul a_mysql.inc in folderul Pawno > Include si incerci sa dai compile.
  22. Si ce problema ar fi aceasta mai exact? Pentru ca poate sa fie vorba de weburl din server.cfg sau cu totul altceva. Ofera mai mutle detalii
  23. Problema este faptul ca ii spui sa ignore daca string este scris cu litere mari sau mici dar folosesti declaratia normala _H in loc de _I https://github.com/pawn-lang/YSI-Includes/blob/5.x/YSI_Coding/y_stringhash/features.md switch(YHash(option, false)) { case _I<health>: { SetPlayerHealth(user, value); } case _I<armour>: { SetPlayerArmour(user, value); }
  24. Exista posibilitatea ca baza ta de date sa fie corupta din ce am reusit sa gasesc pe stackoverflow. Eventual poti rula VERIFY TABLE factions (s.a.m.d) sa verifici daca intradevar e corupt si poti incerca REPAIR TABLE factions (s.a.m.d). In cel mai rau caz daca acest tool nu iti repara baza de date poti eventual sa iti scanezi hdd de erori din click dreapta pe partitie in My Computer > Properties > Tools > Error Checking . In ultima instanta eventual poti sterge baza si sa o refaci presupunand faptul ca ai fisierul sql.
  25. Eroarea depinde de versiunea folosita, daca este 5.5 sau mai veche vei intampina problema aceasta. Pentru informatia mai concreta https://stackoverflow.com/a/17498167 aceasta modificare a fost facuta mai precis in 5.6.5 deci daca hostul foloseste 5.6.4 sau mai veche probabil inca vei intampina problema. Nu stiu sigur daca in phpmyadmin apare versiunea (nu prea am folosit) dar poti rula SELECT VERSION(); in sectiunea query din phpmyadmin sau eventual acelasi query in ce client folosesti sa te conectezi la baza de date.
×
×
  • 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.