ForestCZE 2 Odesláno: 14. Únor, 2018 Share Odesláno: 14. Únor, 2018 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 Link to comment Share on other sites More sharing options...
4 The hidden face 77 Odesláno: 14. Únor, 2018 Share Odesláno: 14. Únor, 2018 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š.. :/ Link to comment Share on other sites More sharing options...
2 DuFF 79 Odesláno: 14. Únor, 2018 Share Odesláno: 14. Únor, 2018 před 9 minutami, ForestCZE said: 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í... Tipujem, že to padá kvôli tomuto: vehName[personalvehicle[playerid][0]].. Ak tvoje vehName vyzerá nejak takto: new vehName[][] = {"Landstalker", ..., "Utility Trailer"}, treba si dať pozor na to, že sa indexuje od 0 do 211 a nie od 400 do 611 (ako pri ID modelov áut). Navyše ak v personalvehicle nie je uložený model ale ID vozidla, bude potrebné použiť http://wiki.sa-mp.com/wiki/GetVehicleModel Link to comment Share on other sites More sharing options...
1 ForestCZE 2 Odesláno: 14. Únor, 2018 Author Share Odesláno: 14. Únor, 2018 (upraveno) 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í... Edited 14. Únor, 2018 by ForestCZE Bez chyb, ale nefunkční Link to comment Share on other sites More sharing options...
1 The hidden face 77 Odesláno: 14. Únor, 2018 Share Odesláno: 14. Únor, 2018 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 Link to comment Share on other sites More sharing options...
1 ForestCZE 2 Odesláno: 14. Únor, 2018 Author Share Odesláno: 14. Únor, 2018 (upraveno) 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 Edited 14. Únor, 2018 by ForestCZE Už to frčííí Link to comment Share on other sites More sharing options...
0 IllidanS4 65 Odesláno: 14. Únor, 2018 Share Odesláno: 14. Únor, 2018 Doporučuji nasadit crashdetect. Ten by ti měl v takovýchto situacích oznámit chybu přetečení pole (většinou se mu to daří). Link to comment Share on other sites More sharing options...
0 ATomas 286 Odesláno: 15. Únor, 2018 Share Odesláno: 15. Únor, 2018 (upraveno) Pokud je obsah dialogu prazdny (allstlost je null) tak se dialog nezobrazi. Takze doporucuji pouzit neco v tomto duchu: if(strlen(allslots) > 0) ShowPlayerDialog(playerid, D_PERSONALVEHICLES, DIALOG_STYLE_LIST, "Osobní vozidla", allslots, "Potvrdit", "Zpět"); else SendClientMessage(playerid,-1,"Někde se stala chyba"); Jinak na nejaky odhadovani velikosti pole se vykasli. RAM pameti je vsude dost. A hlavne ta promena existuje jen kdyz je v dane urovni te funkce/podminky a pak se smaze. Tam jde o to ze jen zabira procesorovy cas jeji vytvoreni, ale to je tak mizive ze nestoji za to se tim vubec zabyvat. Takze na velikost promenych muzes s klidnout dusi kaslat (tedy na jeji velkou velikost, pokud das veliksot moc malou tak samozrejme ne ) Jinak plugin crashdetect rozhodne doporucuji. Hodne urychli hledani nekterych typu problemu Edited 15. Únor, 2018 by ATomas Link to comment Share on other sites More sharing options...
0 ForestCZE 2 Odesláno: 18. Únor, 2018 Author Share Odesláno: 18. Únor, 2018 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? Link to comment Share on other sites More sharing options...
0 IllidanS4 65 Odesláno: 18. Únor, 2018 Share Odesláno: 18. Únor, 2018 před 10 hodinami, ForestCZE said: A poradíš prosím tě, jak na to? 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". Link to comment Share on other sites More sharing options...
0 ForestCZE 2 Odesláno: 18. Únor, 2018 Author Share Odesláno: 18. Únor, 2018 (upraveno) 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í? Edited 18. Únor, 2018 by ForestCZE Doplňující info Link to comment Share on other sites More sharing options...
0 rEf 53 Odesláno: 18. Únor, 2018 Share Odesláno: 18. Únor, 2018 (upraveno) CMD:vehicles(playerid, params[]){ new row[24], str[MAX_PLAYER_VEHICLES*24]; for(new i = 0; i < MAX_PLAYER_VEHICLES; i++){ if(VehicleID[playerid][i] != -1){ format(row, sizeof(row), "%s\n", VehicleName[GetVehicleModel(VehicleID[playerid][i])-400]); } else format(row, sizeof(row), "- Volný slot -\n"); strcat(str, row); } ShowPlayerDialog(playerid, dialog_vehicle, DIALOG_STYLE_LIST, "Vlastněná vozidla", str, "Spravovat", "Zavřít"); return true; } Takhle to mám já no to sečtení jsem moc nepochopil (asi jsem to vůbec nepochopil). Edited 18. Únor, 2018 by rEf Nepochopil jsem to Link to comment Share on other sites More sharing options...
0 ForestCZE 2 Odesláno: 23. Únor, 2018 Author Share Odesláno: 23. Únor, 2018 Narazil jsem ještě na jeden problém Mám: new radiolist[500]; //mám těch rádií víc, ale nechci tu psát moc dlouhý text, princip pak bude stejný strcat(radiolist, "Stanice\tPosluchačů\n"); strcat(radiolist, "Vypnout rádio\n"); strcat(radiolist, "Evropa 2\t%i\n", listeners[0]); strcat(radiolist, "Rádio Express\t%i\n", listeners[1]); strcat(radiolist, "Dance Rádio\t%i", listeners[2]); new radiostring[500]; format(radiostring, sizeof(radiostring), "%s", radiolist); ShowPlayerDialogEx(playerid, D_RADIO, DIALOG_STYLE_TABLIST_HEADERS, "Rádio", radiostring, "Zvolit", "Zavřít"); Jak do toho strcat zakomponovat format, aby mi to vzalo ty integery? Díky Link to comment Share on other sites More sharing options...
0 DuFF 79 Odesláno: 24. Únor, 2018 Share Odesláno: 24. Únor, 2018 (upraveno) před 16 hodinami, ForestCZE said: Narazil jsem ještě na jeden problém Mám: new radiolist[500]; //mám těch rádií víc, ale nechci tu psát moc dlouhý text, princip pak bude stejný strcat(radiolist, "Stanice\tPosluchačů\n"); strcat(radiolist, "Vypnout rádio\n"); strcat(radiolist, "Evropa 2\t%i\n", listeners[0]); strcat(radiolist, "Rádio Express\t%i\n", listeners[1]); strcat(radiolist, "Dance Rádio\t%i", listeners[2]); new radiostring[500]; format(radiostring, sizeof(radiostring), "%s", radiolist); ShowPlayerDialogEx(playerid, D_RADIO, DIALOG_STYLE_TABLIST_HEADERS, "Rádio", radiostring, "Zvolit", "Zavřít"); Jak do toho strcat zakomponovat format, aby mi to vzalo ty integery? Díky Možno niečo na tento spôsob: new radiolist[500]; strcat(radiolist, "Stanice\tPosluchačů\n"); format(radiolist, sizeof(radiolist), "%sEvropa2\t%i\n", radiolist, listeners[0]); format(radiolist, sizeof(radiolist), "%sRádio Express\t%i\n", radiolist, listeners[1]); ... Nie som si ale istý, či nebude rýchlejšie naformátovať si nejaký kratší buffer a ten potom pripojiť cez strcat k radiolistu, ktorý bude fungovať ako akumulátor (nikdy som to netestoval): new radiolist[500]; new buff[32]; format(buff, sizeof(buff), "Evropa 2\t%i\n", listeners[0]); strcat(radiolist, buff); format(buff, sizeof(buff), "Rádio Express\t%i\n", listeners[1]); strcat(radiolist, buff); ... Možno ešte jedna vec, neviem, či si vynechal nejaký kus kódu, kde využívaš radiostring, ale momentálne mi tá premenná príde zbytočná. Podľa mňa môžeš do ShowPlayerDialogEx dať priamo radiolist a nepotrebuješ si vyrábať jeho kópiu (radiostring). Edited 24. Únor, 2018 by DuFF Link to comment Share on other sites More sharing options...
0 ForestCZE 2 Odesláno: 24. Únor, 2018 Author Share Odesláno: 24. Únor, 2018 (upraveno) Nakonec to mám takto: new radiolist[500]; strcat(radiolist, "Stanice\tPosluchačů\n"); strcat(radiolist, "Vypnout rádio\n"); format(radiolist, sizeof(radiolist), "%sEvropa 2\t%i\n", radiolist, listeners[0]); format(radiolist, sizeof(radiolist), "%sRádio Express\t%i\n", radiolist, listeners[1]); format(radiolist, sizeof(radiolist), "%sDance Rádio\t%i\n", radiolist, listeners[2]); ShowPlayerDialogEx(playerid, D_RADIO, DIALOG_STYLE_TABLIST_HEADERS, "Rádio", radiolist, "Zvolit", "Zavřít"); Edited 24. Únor, 2018 by ForestCZE Link to comment Share on other sites More sharing options...
Dotaz
ForestCZE 2
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
Link to comment
Share on other sites
14 odpovědí na tuto otázku
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now