-
Příspěvků
111 -
Registrován
-
Aktivní
Content Type
Profiles
Forums
Calendar
Gallery
SA-MP
Příspěvky posted by ForestCZE
-
-
před 2 hodinami, IllidanS4 said:
Stáhnout, dát do složky plugins a přidat do plugins v server.cfg. Na Win "plugins crashdetect", na Linuxu "plugins crashdetect.so".
[13:48:17] [13:48:17] Server Plugins [13:48:17] -------------- [13:48:17] Loading plugin: crashdetect.dll [13:48:17] CrashDetect v4.18.1 is OK. [13:48:17] Loaded. [13:48:17] Loaded 1 plugins.
A nikde žádné zprávy o crash
EDIT: A ta rekurze mě taky děsí
Header size: 4508 bytes Code size: 125640 bytes Data size: 673772 bytes Stack/heap size: 262144 bytes; estimated max. usage: unknown, due to recursion Total requirements: 1066064 bytes
EDIT2: Rekurzi způsobuje include na registraci <dof2> .. je to normální?
-
On 15. 2. 2018 at 21:23, ATomas said:
Jinak plugin crashdetect rozhodne doporucuji. Hodne urychli hledani nekterych typu problemu
A poradíš prosím tě, jak na to?
-
před 23 minutami, GaRGoyLeS said:
Néééé, to rozhodně nemusíš. Stačí nějakým odhadem vydedukovat.. Někdy samozřejmě nemůžeš vědět a prostě si tipneš - radši více než méně, ale zrovna u názvů aut si to zjistit dokážeš. Určitě máš nějaké pole s názvy aut, stačí se porozhlédnout po nejdelším názvu, mě třeba až na druhý pohled přišel největší tento: "Luggage Trailer A", což má 17 znaků. Dejme tomu, že jsem nenašel ten největší tak si dám rezervu třeba 25 nebo 30. Tady vidíš, že jsi zrovna ušetřil zbytečných 100 znaků. U spousty věcí máš třeba už velikost pevně danou (zde). Například jméno hráče může nabýt maximálně 24 znaků, ale dává se jich 25 pro nulový znak (konečný znak - EOS). Takže třeba zde by bylo úplně zbytečně dělat pole znaků na jméno o velikosti 128 znaků... a divil by ses kolik lidí to dělá.
Samozřejmě s dnešní technikou už je to celkem zanedbatelný, když tvůj server nepoběží na bramboře.... ale není špatný se snažit pamětí šetřit.. pokud jednou budeš programovat, taky po tobě bude požadováno, aby tvůj program byl co nejúčinnější, ale zároveň nesebral spoustu výkonu (=optimalizovaný). Takže rozhodně není na škodu se naučit šetřit
Dobře, díky za vysvětlení. A teď zpět k tomu problému. Netuším, proč, ale mám to takto:
new slot1[128], slot2[128], allslots[128]; if(personalvehicle[playerid][0] != 0) { format(slot1, sizeof(slot1), "%s", vehName[personalvehicle[playerid][0]]); } else { format(slot1, sizeof(slot1), "Prázdný slot 1"); } if(personalvehicle[playerid][1] != 0) { format(slot2, sizeof(slot2), "%s", vehName[personalvehicle[playerid][1]]); } else { format(slot2, sizeof(slot2), "Prázdný slot 2"); } format(allslots, sizeof(allslots), "%s\n%s", slot1, slot2); ShowPlayerDialog(playerid, D_PERSONALVEHICLES, DIALOG_STYLE_LIST, "Osobní vozidla", allslots, "Potvrdit", "Zpět");
A dialog to vůbec nezobrazí...
EDIT: Zapomněl jsem odečíst 400
-
před 28 minutami, GaRGoyLeS said:
new result[128]; strcat(result, slot1, sizeof(result)); strcat(result, "\n", sizeof(result)); strcat(result, slot2, sizeof(result)); //v proměnné result teď budeš mít výsledný string
Nebo můžeš využít zkrácenější zápis a to přes fci format()
format(result, sizeof(result), "%s\n%s", slot1, slot2);
Více specikátorů máš zde:
http://wiki.sa-mp.com/wiki/Format
Dej si pozor na velikosti stringů... Máš dva o velikost 128 znaků a snažíš se je spojit též do stringu o 128 znacích. Chápu asi, že této velikost nenabývají, ale je zbytečné rezervovat tolik znaků, když je nepotřebuješ.. :/
Super A zeptám se všeobecně. Když je 128 moc, jak mám vědět, kolik nastavit? To mám jít a počítat znak po znaku? (bez sarkasmu, ironie a špatného mínění)
EDIT: Nevím, co je špatně, ale dialog se vůbec nezobrazí...
-
Zdravím ve spolek, mám tento kód:
new slot1[128], slot2[128], allslots[128]; if(personalvehicle[playerid][0] != 0) { format(slot1, sizeof(slot1), "%s", vehName[personalvehicle[playerid][0]]); } else { format(slot1, sizeof(slot1), "Prázdný slot 1"); } if(personalvehicle[playerid][1] != 0) { format(slot2, sizeof(slot2), "%s", vehName[personalvehicle[playerid][1]]); } else { format(slot2, sizeof(slot2), "Prázdný slot 2"); }
A potřeboval bych tyto dva stringy sečíst do jednoho. Nějak takto:
new result[128]; result = slot1."\n".slot2; ShowPlayerDialog(playerid, 0, "Menu", result, "Potvrdit", "");
Jsem zvyklý z PHP, ale v pawnu nevím, jak to bude. Našel jsem, že by to mělo být fcí strcat, ale nejde mi to. Díky předem za pomoc
-
před 10 minutami, RmT_Kjuba said:
Tak aspoň sis to sám vyřešil to se stává často že nato člověk přijde až když s tím chce pomoct Jeden den do toho koukáš a pak nato druhý den koukneš a hned vidíš chybu aspoň že sem ti dal vodítko kde je chyba
Jo, díky :-)
Podělím se teda ještě o řešení, snad dává smysl
public OnPlayerSpawn(playerid) { ... if(spawned[playerid] == false) { ... spawned[playerid] = true; } if(isskinset[playerid] == false) { skin[playerid] = GetPlayerSkin(playerid); isskinset[playerid] = true; } else { SetPlayerSkin(playerid, skin[playerid]); } return 1; }
-
před 9 hodinami, RmT_Kjuba said:
Ukaž ukládání proměnné skin[playerid] a public OnPlayerSpawn
Už to funguje, jsem vůl. Až jak jsi napsal, ať pošlu OnPlayerSpawn, tak jsem se na něj ještě jednou podíval. Ale když už jsem tu začal, tak vysvětlím, o co šlo.
Registrace:
DOF2_SetBool(file, "isskinset", false); DOF2_SetInt(file, "skin", 0);
Ukládání:
DOF2_SetBool(file, "isskinset", isskinset[playerid]); DOF2_SetInt(file, "skin", GetPlayerSkin(playerid));
Načítání:
isskinset[playerid] = DOF2_GetBool(file, "isskinset"); skin[playerid] = DOF2_GetInt(file, "skin");
OnPlayerSpawn:
public OnPlayerSpawn(playerid) { //různy fce if(spawned[playerid] == false) { //Vše, co hci, aby se stalo jen po prvním spawnu spawned[playerid] = true; //A pak jsem tady měl další podmínku if(isskinset[playerid] == false) //aby to poprvé nenačetlo skin, když je tam 0 po registraci { isskinset[playerid] = true; } else { SetPlayerSkin(playerid, skin[playerid]); } } return 1; }
No jenže pak mi došlo, že je to celé vložené v té podmínce if(spawned..., takže se to splní jen poprvé, respektive nikdy...
-
Zdravím, tak jsem tu zase a dost zoufalý. Když zapnu server a poprvé přijdu na server, tak po spawnutí crashne hra. Jakmile přijdu znovu a server zůstane zapnutý, po spawnutí normálně hraju a žádný crash. Absolutně to nechápu. Kdyby to crashovalo pořád, tak je asi chyba v módu, ale takhle?
Crash message:
SA-MP 0.3.7-R2 Exception At Address: 0x005E5815 Base: 0x06A70000 Registers: EAX: 0x00000000 EBX: 0x47C34F00 ECX: 0x00000000 EDX: 0x00003F80 ESI: 0x10BC6B60 EDI: 0x06100000 EBP: 0x00000100 ESP: 0x0177FC40 EFLAGS: 0x00210246 Stack: +0000: 0x14EF8F70 0x06100000 0x10BC6B60 0x47C34F00 +0010: 0x00000000 0x00000000 0x00000000 0x00000001 +0020: 0x00000000 0x00000000 0x6DB3C00B 0x307C13D6 +0030: 0x3037C782 0x3FEFFADB 0x10BC6B60 0x00829B97 +0040: 0xE0000000 0x3FEFFB19 0xE0000000 0x3FF0CCCC +0050: 0x00000100 0x0177FD7C 0x0083D978 0xFFFFFFFF +0060: 0x005E92CD 0x00001091 0x10BC6B60 0x0177FD8C +0070: 0x00000000 0x06101000 0x06B0ACB3 0x0177FCC0 +0080: 0xBF3C08A9 0x0060EB2B 0x0060EB72 0x10B9A460 +0090: 0x10BC6B60 0x0177FD8C 0x00000000 0x0177FD28 +00A0: 0x00000000 0x00000000 0x3F800000 0x10BC6B60 +00B0: 0x44FD6258 0xC4B1AC30 0x418A2D5D 0x10BC6B60 +00C0: 0x071E3DA0 0x0177FD7C 0x06B3E8EB 0xFFFFFFFF +00D0: 0x06B0E0B0 0x10B9A460 0x10BC6B60 0x0177FD8C +00E0: 0x0177FD34 0x00000800 0x082000A1 0x10BC6B60 +00F0: 0x0086D168 0x00568642 0x00000001 0xAE030D00 +0100: 0x00000099 0x0053C09A 0x0000001A 0xFFFFFFFF +0110: 0x00000000 0x27FC62DE 0x06AD4506 0xFFFFFFFF +0120: 0x06B0DBDE 0x0000001A 0xAE028AD0 0x00000000 +0130: 0x16494B80 0x0177FD64 0x0177F604 0x0177FF70 +0140: 0x06B25F34 0x06B4A688 0x00000002 0x7541DEE0 +0150: 0x0053E986 0x00000001 0x00000000 0x00000001 +0160: 0x0053ECC2 0x00000001 0x00619B71 0x0000001A +0170: 0x00000001 0x00000001 0x0000000A 0x00748DA0 +0180: 0x0000001A 0x00000001 0x74AF4FB0 0x00000000 +0190: 0x0177FF80 0x002EC000 0x01828CBE 0x4F2E0277 +01A0: 0x073F0330 0x00000008 0x00000100 0x00000008 +01B0: 0x00000102 0x43C80000 0x43960000 0x00000000 +01C0: 0x00000000 0x00000320 0x00000258 0x00000000 +01D0: 0x00000001 0x0010017C 0x00000200 0x00000000 +01E0: 0x012C0190 0x000B6183 0x00000190 0x0000012C +01F0: 0x0000002C 0x7451A8BF 0x00825EA4 0x0177FF70 +0200: 0x00825EA4 0x00000000 0x002EC000 0x00821D17 +0210: 0x00821D27 0xE195367C 0x0177FF80 0x008246F1 +0220: 0x00400000 0x00000000 0x03C76DEB 0x0000000A +0230: 0x00000094 0x00000004 0x0000000A 0x040A08AE +0240: 0x00000001 0x00000000 0x00000000 0x00000000 +0250: 0x00000000 0x00000000 0x00000000 0x00000000 +0260: 0x00000000 0x00000000 0x00000000 0x00000000 +0270: 0x00000000 0x00000000 0x00000000 0x00000000 SCM Op: 0x77E, lDbg: 0 LastRendObj: 1226 Game Version: US 1.0 State Information: Ped Context: 0
Zachrání mě někdo prosím? Díky
EDIT: Zakomentoval jsem vše v OnPlayerSpawn a hra necrashuje. Takže beru zpět a přece jen je asi chyba v módu...
EDIT2: Tak jo, už vím, jak to je. Při přihlášení si načítám skin z proměnné a v OnPlayerSpawn mám:
SetPlayerSkin(playerid, skin[playerid]);
Takže na začátku si vyberu třeba CJe ID 0 a po spawnu se mi načte například holka ID 193. Problém je v tom, že po smrti se mi načte zpět skin, který jsem si vybral na začátku, tedy CJ ID 0. Zajímavost na tom je ta, že když mi to vrátí toho CJe a nechám si vypsat aktuální skin, tak mám 193. Z toho plyne, že je to jako kdyby nějaký bug ve vykreslení nebo co. No a tak jsem na prasáka do OnPlayerSpawn dal:
SetPlayerSkin(plaayerid, GetPlayerSkin(playerid));
Abych si jakože jenom zaktualizoval postavu. A to mi crashuje hru... Netuším, jak z toho ven...
-
před 14 minutami, bigw3b. said:
new int[4]; for(new i = 0; i < count; i++) int[i] = strval(out[i]); new total = (int[0]*86400) + (int[1]*3600) + (int[2]*60) + int[3]);
Na konci závorka navíc, ale jinak bez errors. Díky
EDIT: Už to šlape, jak má
-
před 4 minutami, Tanga said:
ignorujme chybu čo ti to teraz vypisuje..
Máš v cykle strval(out), ale nikde tú hodnotu neukladáš.
Asi skôr do cyklu total += strval(out);Asi je to nesmysl tak, jak jsem to napsal. Jde o to, že to out je string a já to celé potřebuji přetypovat na integer :-) A potom jednotlivé hodnoty na indexech 0-3 sečíst.
-
Moc nechápu dotaz. Jede to normálně po sobě. Např:
new id[3]; new getnick[MAX_PLAYER_NAME], nick[16]; GetPlayerName(playerid, getnick, sizeof(getnick)); format(id, sizeof(id), "Tvoje id je: %i", playerid); SendClientMessage(playerid, C_WHITE, id); //Vypíše ID format(nick, sizeof(nick), "Tvůj nick je: %s", getnick); SendClientMessage(playerid, C_WHITE, nick); //Vypíše nick
-
před 13 minutami, MajorGames4 said:
C:\Users\NIC\Desktop\multiFS.pwn(80) : warning 217: loose indentation
C:\Users\NIC\Desktop\multiFS.pwn(91) : warning 202: number of arguments does not match definition
C:\Users\NIC\Desktop\multiFS.pwn(91) : warning 202: number of arguments does not match definition
C:\Users\NIC\Desktop\multiFS.pwn(93) : warning 217: loose indentation
C:\Users\NIC\Desktop\multiFS.pwn(111) : error 010: invalid function or declaration
C:\Users\NIC\Desktop\multiFS.pwn(111) : error 029: invalid expression, assumed zero
C:\Users\NIC\Desktop\multiFS.pwn(113) : error 010: invalid function or declaration
C:\Users\NIC\Desktop\multiFS.pwn(155) : error 002: only a single statement (or expression) can follow each "case"
C:\Users\NIC\Desktop\multiFS.pwn(155) : warning 215: expression has no effect
C:\Users\NIC\Desktop\multiFS.pwn(155) : error 001: expected token: ";", but found "return"
C:\Users\NIC\Desktop\multiFS.pwn(156) : warning 225: unreachable code
C:\Users\NIC\Desktop\multiFS.pwn(160) : warning 209: function "OnDialogResponse" should return a value
C:\Users\NIC\Desktop\multiFS.pwn(161) : error 010: invalid function or declarationA jak máme vědět, že řádek 80 je zrovna ten a ten a 91 ten atd.?
-
Zkusil jsem s tím pracovat dál nějak takto:
new out[4][4], count; count = strexplode(out, inputtext, " "); for(new i = 0; i < count; i++) strval(out[i]); new total = (out[0]*86400) + (out[1]*3600) + (out[2]*60) + out[3]); if(total > promenna) Tvuj aktualni cas je mensi nez zadany...
A errrors:
error 033: array must be indexed (variable "out") error 029: invalid expression, assumed zero warning 215: expression has no effect
Předpokládám, že ta proměnná total musí být také pole. Asi?
-
On 8. 2. 2018 at 20:45, ATomas said:
new pass[MAX_PLAYERS]; pass[playerid] = inputtext;
Tato kontrukce je sice myslena dobře, ovšem lze použít jen u pole, kde je při kompilaci známá veikost. Což není tento případ.
Doporučuji použít
pass[playerid][0] = 0;//Pokud vis ze to bude prazdne, neni treba pouzit strcat(pass[playerid],inputtext);
Super, díky
-
Zdravím, existuje v pawn stejná funkce jako explode(); v PHP?
Mám dialog (viz příloha) a potřeboval bych dle mezer vyexplodovat do pole:
new pole[128] = explode(" ", inputtext); strval(pole[0]); strval(pole[1]); strval(pole[2]); strval(pole[3]);
Nějak tak, abych s těmi čísly mohl pracovat dál. Jak na to? Díky předem za pomoc.
-
Zdravím, potřeboval bych poradit. Mám tento kód v OnDialogResponse:
new test[128]; format(test, sizeof(test), "Heslo: %s", inputtext); SendClientMessage(playerid, C_RED, test);
Všechno funguje v pořádku, to heslo mi to vypíše. Já si to heslo potřebuji uložit, abych s ním mohl pracovat dál mimo funkci, takže mám něco jako:
new pass[MAX_PLAYERS]; pass[playerid] = inputtext;
To mi ale hází, že to musí být pole.
error 006: must be assigned to an array
Dokázal by mi někdo poradit? Díky
-
5 minutes ago, Ewwe said:
DOF2_CreateFile má jako druhý parametr heslo a mám pocit že používá klasický udb hash v základu ale lze to přepnou na bernstaina záleží kde jsi ten includ stáhl
Podle toho includu by to mělo být:
DOF2::num_hash(password)
Je to možné?
EDIT: Include mám odtud
-
Zdravím, po dlouhé době se vracím k pawnu a zjistil jsem, že je plno nových funkcí a možností. Narazil jsem na DOF2 systém.
Když vytvořím soubor
DOF2_CreateFile("soubor.txt", "mojeheslo");
Tak to uloží něco jako:
password = 218956422
O jaký systém hashování se jedná? Když si to vytáhnu pomocí:
DOF2_GetInt("soubor.txt", "password");
Tak to pak porovnám se zadaným stringem. Jak zadaný string zahashovat, aby to sedělo s tím, který je v souboru? Děkuji předem za pomoc
-
Dobře, díky moc všem za objasnění
-
To bude asi ta, kterou časuješ (SetTimer), u tohoto nepotřebuješ návratovou hodnotu – půjde to tak, jak to máš.
Tak kdy je tedy potřeba?
Třeba tady je TuT na Fuel System a je tam public timer_fuel_lower() a public timer_refuel(playerid)
Ten první má return a druhý ne, tak jako já to nechápu
-
Je to funkce, public ti akorát určuje, že je to funkce veřejná. To jen pro upřesnění (má to své vlastnosti, ale o tom jindy).
Teď k tomu tvému returnu. Jak řekl HighPrint, návratovou hodnotu to mít nemusí (je to funkce ꜛ), je to jen čistě na tobě. Nativní SA:MP publicy/callbacky (říkej si tomu, jak chceš) mohou mít u konkrétního returnu specifickou funkci. U tebou definovaných to ale záleží jen na tobě, na tom, jak to budeš používat. Klidně nám ukaž příklad, kde to potřebuješ vědět, my ti řekneme. Každopádně tohle všechno bude fungovat a nehodí ti to chybu:
forward Neco(); public Neco() //verze bez returnu { print("Bla bla."); } public Neco() //verze s returnem, ale bez návratové hodnoty { print("Bla bla."); return; } public Neco() //verze s returnem i návratovou hodnotou { print("Bla bla."); return 1; }
Jo, pravda je to funkce
A ten příklad třeba:
public UkazPenize() { for(new all; all < MAX_PLAYERS; all++){ if(IsPlayerConnected(all)){ SetPlayerScore(all, GetPlayerMoney(all)); } } }
-
return je jenom návratová hodnota. Teoreticky když vytváříš funkce tak nemusíš mít u žádných. Většina callbacků ale v SAMP má význam v návratové hodnotě (např OnPlayerCommandText). Ve většině případů je 1 jako success a 0 jako fail. Jedná se v podstatě o výsledek té funkce.
Neptám se na funkce, ale na publicy a každý public daný od SA-MP má return 1 popřípadě 0, tak proto se ptám, jestli i můj vytvořený public musí mít return a kdy.
-
Zdravím, chtěl bych objasnit jednu věc. Když si vytvořím libovolný public - Kdy v něm dát return 1; a kdy ne?
Vždycky jsem měl za to, že pokud je obsah publicu vyvolán SetTimerem, tak tam return být nemá a pokud je zavolán třeba v příkazu, tak tam return patří.
Koukám na nějaké návody a všímám si, že je to asi obráceně, než jsem si celou dobu myslel Tak jak to tedy je? Díky moc za objasnění
-
Snížil jsem vykreslovanou vzdálenost a vypnul frame limiter s antialisingem. Od té chvíle už to necrashuje.
Záhadný crash
v Herní (SA:MP, CS apod.)
Odesláno:
Zdravím, vůbec netuším, od kdy to začalo, ani co to způsobuje. Vyvíjím mód a jednou za čas smažu všechny účty. Když se zaregistruju a přihlásím, vyberu postavu a spawnu se, tak spadne hra.
Pawno mi ukazuje rekurzi:
A ta rekurze se objeví, jakmile naincluduju dof2. Crashdetect mi v serverlogu nic neukáže. Jak to odhalit? Díky