Jump to content

Franta95

Uživatel
  • Příspěvků

    6
  • Registrován

  • Aktivní

Reputace

0 Na nule
  1. Problém neni při vchodu do šipky, ale při použití příkazu pro port, když už hráč v interiéru je. Každopádně všem děkuji za rady a problém jsem vyřešil hned díky prvnímu příspěvku. Port jsem dal do timeru a funguje to jak má, ještě jednou díky a problém považujte za vyřešený.
  2. Příkaz je funkční, pokud hráč není v interiéru. Navíc tady nejde o to jestli je ve vozidle... Až dneska přijdu, zkusím to nějak s tím timerem, děkuji za radu.
  3. Zdravím, mám menší problém s pozicí při změně interiéru, nejsem v pawnu ještě tak pokročilý, ale zarazilo mě chování kodu při změně interiéru. Takže k věci, v příkazu na port do města mám řádek, aby se hráči nastavil interiér na 0, pro případ, že by v nějakém byl. V publicu On Interior Change se mi při přechodu do interiéru 0 nastaví pozice hráče před budovu do které vešel. Ale při portu tu pozici znovu měním na pozici místa portu, ale hráč se mi stejně přesune před budovu. Nejdřív mi tedy proběhne warp a až potom změna interiéru, přitom v kodu mám jako první změnu interiéru a když jsem si přidal pomocné výpisy, výsledek funkce mi to vrátí hned, ale výpis z publicu, takže i public proběhne až na konci příkazu. Přijde mi to trochu nelogické a v jiných jazycích se mi tohle nikdy nestalo, přikládám kod a obrázek s výpisem, snad je jasné o co mi jde. Provizorní příkaz warpu: if (strcmp("/lv", cmd, true) == 0){ new result = SetPlayerInterior(playerid, 0); ///////// ////////////////výpis z obrázku, mám výsledek funkce, ale proběhne až na konci příkazu format(infoText, sizeof(infoText), "result = %i", result); SendClientMessage(playerid, CH_GREEN, infoText); new Float: x = 2179.9055; new Float: y = 1988.3667; new Float: z = 10.5474; if (IsPlayerInAnyVehicle(playerid)){ SetVehiclePos(GetPlayerVehicleID(playerid), x, y, z); }else{ SetPlayerPos(playerid, x, y, z); } format(infoText, sizeof(infoText), "Hráč "CE_PORT_TEXT_H"%s "CE_PORT_TEXT"se právě portnul do města "CE_PORT_TEXT_H"Las Venturas", players[playerid][playerName]); SendClientMessageToAll(CH_PORT_TEXT, infoText); return 1; } Co proběhne v Interior Change: public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid) { if (oldinteriorid == 0){ GetPlayerPos(playerid, players[playerid][lastX], players[playerid][lastY], players[playerid][lastZ]); GetPlayerFacingAngle(playerid, players[playerid][lastAng]); } if (oldinteriorid != 0 && players[playerid][lastPickup] != -1){ new enterid = players[playerid][lastPickup]; new exitid = pickups[enterid][pcpModel]; pickups[enterid][pcpType] --; if (pickups[enterid][pcpType] <= 0){ DestroyPickup(exitid); pickups[enterid][pcpModel] = -1; } players[playerid][lastPickup] = -1; ///////// /////////////////////// ////////////////// červený výpis z obrázku SendClientMessageToAll(CH_RED, "Info Exit:"); format(infoText, sizeof(infoText), "exitid = %i", pickups[enterid][pcpModel]); SendClientMessageToAll(CH_RED, infoText); format(infoText, sizeof(infoText), "players = %i", pickups[enterid][pcpType]); SendClientMessageToAll(CH_RED, infoText); format(infoText, sizeof(infoText), "last Pickup(%i) = %i", playerid, players[playerid][lastPickup]); SendClientMessageToAll(CH_RED, infoText); } if (newinteriorid == 0){ ////////nastavení pozice před budovu SetPlayerVirtualWorld(playerid, 0); players[playerid][lastX] -= 2 * floatsin(-players[playerid][lastAng], degrees); players[playerid][lastY] -= 2 * floatcos(-players[playerid][lastAng], degrees); SetPlayerFacingAngle(playerid, players[playerid][lastAng] + 180); SetPlayerPos(playerid, players[playerid][lastX], players[playerid][lastY], players[playerid][lastZ]); } return 1; } Obrázek s výpisem: červený výpis by měl podle kodu proběhnout nad řádkem result = 1(proběhne funkce - výpis uvnitř a až potom by měl být znám výsledek funkce...) a warp proběhnout až potom (není důležitý obsah výpisu, ale pořadí vzhledem k zapsanému kodu)
  4. Logy nemám zatím moc dlouhý. Udělal jsem to teda tak, že to normálně přidávám na konec souboru, pak přečtu a zobrazim obráceně. Kdybych se v tom už neorientoval, zkusil bych tu databázi, ale to se mi tam zatím nechce patlat. Každopádně moc děkuju za rady a prozatím to je vyřešené.
  5. O tom jsem taky přemýšlel, ale co když bude ten log dlouhej a nevejde se mi to do toho stringu. To pak budu muset hledat poslední řádek a když to bude mít třeba 5000 řádků. To pak ten soubor budu muset přečíst 2x - jednou abych našel poslední řádek a potom znova, abych si přečetl posledních 256 řádků(do dialogu). No a načíst to celý třeba do pole mi přijde jako šílenost, kdybych si dal třeba string[10][2048].
  6. Zdravím, potřeboval bych zjistit způsob jak zapisovat na začátek souboru. Napadlo mě si celý soubor přečíst, uložit do řetězce, na začátek přidal to, co potřebuji a potom znovu zapsat. Ale to je na nic, protože se jedná o logy. Našel jsem funkci fseek, která by měla posunout kurzor v souboru na určitý znak, ale to mi nějak blbne. Jedná se tedy o ukládání logu, když použiju io_append, vše funguje, akorát je to obráceně. Zkoušel jsem to fseek dávat i do cyklu, ale nemělo to žádný vliv. savePlayerLog(playerid){ format(infoText, sizeof(infoText), "playerLogs/%s.log", players[playerid][playerName]); new File: f = fopen(infoText, io_readwrite); fseek(f, 0, seek_start); //tenhle řádek by měl posunout kurzor na začátek souboru for (new i = (players[playerid][myLogline] - 1); i >= 0; i --){ fwrite(f, playerLogs[playerid][i]); } fclose(f); players[playerid][myLogline] = 0; } Pro testování se mi log ukládá po každých 2 řádcích, co hráč napíše a tohle se zapíše do souboru při prvním uložení(vše v pořádku): [27:10:2015 | 20:47:49] 1 [27:10:2015 | 20:47:36] LOGIN - IP: 127.0.0.1 Druhé uložení(měli by být 4 řádky): [27:10:2015 | 20:49:8] 2 [27:10:2015 | 20:47:59] /playerlog Franta95 .1 Celkově by to mělo vypadat takhle: [27:10:2015 | 20:49:8] 2 [27:10:2015 | 20:47:59] /playerlog Franta95 [27:10:2015 | 20:47:49] 1 [27:10:2015 | 20:47:36] LOGIN - IP: 127.0.0.1 Řádky ze serveru jsou správně, protože v modu append vše funguje, akorát se to zapisuje v opačném pořadí(nejnovější řádek je na konci).
×
×
  • Create New...