Jump to content

ATomas

Uživatel
  • Příspěvků

    2927
  • Registrován

  • Aktivní

  • Vítězných dnů

    80

Příspěvky posted by ATomas

  1. Asi jsi to zvetsil malo.

    Naco updatovat udaje, ktere se nezmenily

    format(query,sizeof(query),"UPDATE konta SET Penize=%d WHERE Vlastnik='%s'",InfoHrace[playerid][BANKA_PENIZE],PlayerName(playerid));
    print(query);//skontroluj si spravnost prikazu

    Jinak bych rozhodne pro druhou tabulku pouzil cizi klic k tabulce prvni. Uchovavat stejnou hodnotu na dve mista. To smrdi nekonzistentnosti dat.

    • Líbí se mi to! (+1) 1
  2. pokial viem stringy v pawn nemozes takto priradzovat ( "meno=x")

    musis pouzit memcpy, format, strcpy, ..., alebo zadeklarovat to tak ze new meno[] = "abcd"

    Pokud prirazujes konstantni string tak muzes. Muzes takto nastavovat i array (string je array) u kterych v pri compile-time znamy rozmer. Muzes je takto priradit s podminkou ze vyraz v levo nesmi byt delsi nez v pravo (dimension)

     

    Jinak schazuje ti to SCM. Do SCM nesmis poslat %s,%d,%f... jinak to ti crashne server. Pouzij to takto:

    format(menoje, sizeof(menoje), "{FF0000}[ ! ] {FFFFFF}Premenná testmeno bola nastavená na %I (%s)",cislo,VratMiMeno(cislo)); 
    SendClientMessage(playerid, -1,menoje);

     

  3. Ahoj,

    VW a interier je neco jineho.

    VW (VirtualWorld) je server-side.

    Interior je client-side

     

    Interior pouzivali rockstari jako prepinani mezi zobrazovani objektu. Jak vis interiery jsou zobrazene ve vzduchu a ne tam kde je do nich vstupuje z mapy. Takto je vyreseno nekolik interieru do kterych se da dostat z vice mist (napr pizzerie atp...).

     

    Takze si vzdy musis nejak zapsat v jakym /interior jsi a ve kterem to vidis a pak krome SetPlayerPos na ty souradky je interior je pouzit i SetPlayerInterior s tim cislem ktere ti /interior ukazalo.

     

    Tedy je nekolik interieru ktere jsou ruzne rozmisteny po /interior.

    • Líbí se mi to! (+1) 3
  4. protoze parametr barvy je ocekavan jako integer (hex) a ty mu predavas string

    format(string, sizeof(string), "FF%06X", c_color_1[vehicleid]);//%06X znamena ze to chces v hex a na 6 mist (doplnit nulama)
    SetDynamicObjectMaterial(c_object1, 0, -1, "none", "none", HexToInt(string));
    

    You MUST use ARGB color format, not RGBA like used in client messages etc

    http://wiki.sa-mp.com/wiki/SetObjectMaterial

    stock HexToInt(text[])
    {
    	new num;
    	for(new i;text[i];i++)
    	{
    		switch(text[i])
    		{
    			case 'x','X': num = 0;
    			case '0' .. '9': num = (num << 4) | (text[i] - '0');
    			case 'a' .. 'f': num = (num << 4) | (text[i] - ('a' - 10));
    			case 'A' .. 'F': num = (num << 4) | (text[i] - ('A' - 10));
    		}
    	}
    	return num;
    }
    
  5. ATomas to som skúšal ono hráča pripojí hrá tam a po čase ho odpojí 
    

    Takto to nevypina (nepada) server. Ale jen odpojuje hrace ze serveru? Ten nadpis me zmatl tam je psano server totiz :d Tak je to jednoznacne chyba na strane hostingu a v nastaveni jejich firewallu (iptables ?)

  6. Hezké, aspoň už to nebude muset nikdo hledat a pochybovat, zda jde o správný algoritmus výpočtu, tady je to jasné. Ale prosím, řekni mi, že jsi to nepsal vše ručně, prosím, jen mě ujisti. icon_e_biggrin.gif

    To bych se nato radeji vykaslal. At zije excel :)

  7. Ale nieco podobne som tu už videl, akurat mu to všetci ohejtovali kvoli casovym pasmam, nedostatočnej "exaktnosti" a neviem čomu

    Edit: tak nie, funguje to inak, ale myslel som toto

    Nedelal jsem rychlosti test, ale kdyz jsem videl zdrojak tak uz je jasne ze muj zpusob je rychlejsi icon_e_biggrin.gif Ma tam spoustu vypoctu zato muj zpusob ma jen jeden vypocet a pak pristup k indexu v poli kde je vysledek.

  8. rofl

    icon_e_biggrin.gificon_e_biggrin.gif ale nice

    Videl som rozne algoritmy co drzali 300 prvkove polia kvoli rychlosti.. ale toto ma prekvapilo xD

    Vim ze se to zda hloupe. Ale podle rychlostnich testu je toho fakt nejvic fast icon_e_biggrin.gif At to vypada jakkoliv hloupe icon_e_biggrin.gif

  9. Zdravím,

    přináším Vám nový způsob převádění timestamp (časového razítka = počet sekund od 1.1.970) na lidčtější způsob.

     

    Sice je tento způsob paměťově (RAM) náročnější. Zato CPU nejrychlejší. Ovšem RAM paměti je pro sa-mp server všude dost. Zato CPU ne.

     

    Existuje mnoho způsobů např. vložit timestamp do databáze a nechat si vrátit string výsledek. Ovšem můj způsob vykazuje rychlejší výsledky. Další a asi nejhloupější zpusobje samotné počítání data.

     

    Protože tu není povoleno vlozit tak dlouhý kód, dávám sem odkaz:

     

    https://pastebin.com/6BN6kc1L

     

    Použíti:

    new time = gettime();//random(cellmax);
    printf("dnes je %s",GetDate(time));
    

    Pokud chcete k tomu přidat i čas tak to lze lehce pomocí:

    new time = gettime();//random(cellmax);
    time = time%(24*60*60);
    printf("hodin=%d minut=%d vterin=%d",time/(60*60)/*pozor na časové pásmo !!!*/,(time/60)%60,time%60);
    

    Enjoy

    • Líbí se mi to! (+1) 3
  10. Mozna to neni co hledas, ale pokud jde jen o testovani, tak bych doporucil spice localhost propojene s hamachi (tjn odpada uploadnuti modu nekam, kde ti muze byt ukraden). Ciste staci jen F5 a resetnout .exe proces a mas zmen nahozene.

  11. Autor príspevku chcel "odborné" vysvetlenie ako tie dražby spraviť. Pán House poradil nejaký postup ako by to mohlo byť cez sql a pán ATomas mohol napísať vlastný spôsob ak mal záujem. Autor príspevku by si z toho niečo odniesol prípadne by sa pýtal prečo je toto tak a prečo toto hentak, ale teraz má z týchto dohadov akurát tak to, čo mal doteraz. Myšlienku.

    Souhlasim s tebou ze kdyz si prect ty odpovedi nedozvi se zhola nic. Ovsem cekam az upresni jeho pozdavky. Protoze predpokladam ze je zacatecnik a pokud mu tu budu psat nejake teorie o tom jak by to slo udelat, tak to vyusti akorat v zalozeni x helpu co mu nefunguje a jak to opravit. Proto vidim ucinnejsi kdyz zdeli presnejsi pozadavky (co chce drazit a v jakych promenychto ma). A postavit mu ten priklad na konkretni danou vec.

    • Líbí se mi to! (+1) 1
  12. Ako som povedal, urcite bude mat jednoduchsie sa naucit SQL, ako sa snazit nejak rucne robit algoritmy na zoradovanie, filtrovanie, vymyslet ako to vsetko ukladat a podobne. Uz len ako bude ukladat aukcie, ked sa hrac odpoji? Co bude mat nejake obrovske pole, v nom nejake nulove aukcie? Potom cyklit cez vsetko? Urcite ma lepsie spravit SQL.

    Nevim proc sem michas neco o razeni a filrovani. On chce drazby nic vic. Drazba se muze s podpojenim hrace zrusit. Jednoduche elegantni a ucinne

  13. Kdo ty lidi uci tyhle prasarny ? icon_e_biggrin.gif

    format(str,sizeof(str),"%.1f%",AR);
    	format(string,sizeof(string),"%.1f%",HP);
    	format(str2,sizeof(str2),"%s",GetWeaponNameByID(GetPlayerWeapon(playerid)));
    	format(str3,sizeof(str3),"%i",GetPlayerAmmo(playerid));
    	format(str4,sizeof(str4),"%02d:%02d:%02d",hodiny,minuty,sekundy);
    	format(str5,sizeof(str5),"%02d.%02d.%02d",dni,mesiace,roky);
    	format(str6,sizeof(str6),"%.2f",Peniaze[playerid]);
    	PlayerTextDrawSetString(playerid,TDEditor_PTD[playerid][2],string);
    	PlayerTextDrawSetString(playerid,TDEditor_PTD[playerid][4],str);
    	PlayerTextDrawSetString(playerid,TDEditor_PTD[playerid][18],str2);
    	PlayerTextDrawSetString(playerid,TDEditor_PTD[playerid][20],str3);
    	PlayerTextDrawSetString(playerid,TDEditor_PTD[playerid][24],str4);
    	PlayerTextDrawSetString(playerid,TDEditor_PTD[playerid][25],str5);
    	PlayerTextDrawSetString(playerid,TDEditor_PTD[playerid][21],str6);
    

    Jinak bych doporucil si to oprintovat, aby jsi videl jak se ten kod chova

    public TextdrawTimer(playerid)
    {
    	//kdyz to mas v globalni promene urcite je potreba to hracum zobrazit do jejich vlastniho TD, nebyl by lepsi jeden td pro vsechny ?
            //kdyz to zobrazujes vzdy do jednoho a toho sameho td, neslo by to vymyslet cele nejak lepe? tj to mit v jedne promene?
    	if(--noc > 0) PlayerTextDrawSetString(playerid,TDEditor_PTD[playerid][26],TimeConvert(noc));
    	if(--sprcha > 0) PlayerTextDrawSetString(playerid,TDEditor_PTD[playerid][26],TimeConvert(sprcha));
    	if(--volnycas2 > 0) PlayerTextDrawSetString(playerid,TDEditor_PTD[playerid][26],TimeConvert(volnycas2));
    	if(--Obed2 > 0) PlayerTextDrawSetString(playerid,TDEditor_PTD[playerid][26],TimeConvert(Obed2));
    	if(--Praca > 0) PlayerTextDrawSetString(playerid,TDEditor_PTD[playerid][26],TimeConvert(Praca));
    	if(--volnycas > 0) PlayerTextDrawSetString(playerid,TDEditor_PTD[playerid][26],TimeConvert(volnycas));
    	if(--Obed > 0) PlayerTextDrawSetString(playerid,TDEditor_PTD[playerid][26],TimeConvert(Obed));
    
    	printf("playerid=%d nahratycas=%d",playerid,NahratyCas[playerid]);
    
    	if(!(++NahratyCas[playerid] % 60*60))
    	{
    		  Peniaze[playerid] += 10.00;
    		  SendClientMessage(playerid,COLOR_RED,"YAYYYY");
    	}
    	
    	new string[42],minuty,sekundy,hodiny,dni,roky,mesiace,Float:HP,Float:AR;
    	GetPlayerHealth(playerid,HP);
    	GetPlayerArmour(playerid,AR);
    	gettime(hodiny,minuty,sekundy);
    	getdate(roky,mesiace,dni);
    	format(string,sizeof(string),"%.1f%",HP);
    	PlayerTextDrawSetString(playerid,TDEditor_PTD[playerid][2],string);
    	format(string,sizeof(string),"%.1f%",AR);
    	PlayerTextDrawSetString(playerid,TDEditor_PTD[playerid][4],string);
    	format(string,sizeof(string),"%s",GetWeaponNameByID(GetPlayerWeapon(playerid)));
    	PlayerTextDrawSetString(playerid,TDEditor_PTD[playerid][18],string);
    	format(string,sizeof(string),"%i",GetPlayerAmmo(playerid));
    	PlayerTextDrawSetString(playerid,TDEditor_PTD[playerid][20],string);
    	format(string,sizeof(string),"%02d:%02d:%02d",hodiny,minuty,sekundy);
    	PlayerTextDrawSetString(playerid,TDEditor_PTD[playerid][24],string);
    	format(string,sizeof(string),"%02d.%02d.%02d",dni,mesiace,roky);
    	PlayerTextDrawSetString(playerid,TDEditor_PTD[playerid][25],string);
    	format(string,sizeof(string),"%.2f",Peniaze[playerid]);
    	PlayerTextDrawSetString(playerid,TDEditor_PTD[playerid][21],string);
    	PlayerTextDrawSetPreviewModel(playerid,TDEditor_PTD[playerid][23],GetPlayerSkin(playerid));
    	return 1;
    }
    
    • Líbí se mi to! (+1) 1
  14. Čo ti poradil Atomas je síce pekné, ale takmer zbytočné, nakoľko zmena textu v TD sa prejavuje až po jeho opätovnom prekreslení/zobrazení.

     

    Pošli sem ešte raz celý kód a snáď ti poradím..

     

    PS: spravi si to tak ako si to mal na začiatku, následne pridaj && GetPlayerVehicleSeat(playerid) == 0) a potom ešte TextDrawShowForPlayer - potom to skús a ak to nepojde, postni celý kod

    TextDrawSetString aplikuje zmeni i bez prekresleni (hidnuti a shownuti). Proto je potreba aby pro kazdeho hrace byl samostatny textdraw

  15. Ja tu spis vidim problem v tom ze ma nastaveny jeden textdraw ktery zobrazuje vsem hracum. Spravne by mel mit kazdy hrac svuj textdraw pro zobrazovani udaju aby si to navzajem "nekradli"

    //v OnGameModeInit
    
    for(new i;i<MAX_PLAYERS;i++)
    {
    	Textdraw0[i] = CreateTextDraw(...
    	//a sem to das
    }
    
    if(IsPlayerInAnyVehicle(playerid))
    {
    	new str[128],Float:hp,vehicleid = GetPlayerVehicleID(playerid);
    	GetVehicleHealth(vehicleid,hp);
    	format(str,sizeof(str),"~p~Vozidlo ~w~: %s",VehName[GetVehicleModel(vehicleid)-400]);
    	TextDrawSetString(Textdraw0[playerid],str);
    	format(str,sizeof(str),"~p~Benzin ~w~: %d",Benzin[vehicleid]);
    	TextDrawSetString(Textdraw1[playerid],str);
    	format(str,sizeof(str),"~p~Stav ~w~: %.1f %%",hp/10.0);
    	TextDrawSetString(Textdraw2[playerid],str);
    	format(str,sizeof(str),"~p~KM / H ~w~: %d",GetVehicleSpeed(playerid,true));
    	TextDrawSetString(Textdraw3[playerid],str);
    }
    
  16.  

    (porovnávací kód sa nenachádza v skompilovanom súbore).

    S tímto bych nesouhlasil. V kompilovanem kodu je vsechno. Ale pri spusteni se cely nahraje do pameti (Tj muzes po spusteni mod smazat ze slozky gamemodes a furt svr pojede (do resetu)). Taky jeden z duvodu proc nema moc smysl resit jestli vytvorit pole o 50 nebo 100 znacich kdyz ma cely kompilovany kod 10MB :d

×
×
  • Create New...