Jump to content

The hidden face

Uživatel
  • Příspěvků

    810
  • Registrován

  • Aktivní

  • Vítězných dnů

    22

Příspěvky posted by The hidden face

  1. Podstatný bude asi to, že bez jakýkoliv podmínek naformátuješ zprávu a odešleš ji nehledě na to jestli použil '-'. Po té co zprávu odešleš, tak se teprve dostáváme k tvé podmínce, která když se splní, tak odešle znova zprávu do admin chatu. Takže buď ti stačí přidat podmínku text[0] != '-' a nebo to jednoduše prohodit. ;)

     

     

     

    public OnPlayerText(playerid,text[])
    {
    	new chatMes[144];//stačí ti jedna proměnná, buď se vykoná podmínka a vloží se do ní text z A chatu a nebo se nevykoná a naformátuje se do normal chatu
    	
    	if(text[0] == '-')
    	{
     		if(Alvl[playerid] >= 1)
    		{
    			for(new i=0;i<MAX_PLAYERS;i++)
       			{
    		    	if(Alvl[i] >= 1)
           			{
    		        	format(chatMes,sizeof(chatMes),"{CCFF00}[AdminChat] %s(%i): %s",hmeno(playerid),playerid,text[1]);
    		        	SCM(i,-1,chatMes);
          			}
       			}
       		}
      	}
    	else
    	{
    		if(!mute[playerid])
     		{
    	 		format(chatMes,sizeof(chatMes),"%s{FFFFFF}(%i): {FFFFFF}%s",hmeno(playerid),playerid,text);
    	    	        SCMTA(GetPlayerColor(playerid),chatMes);
      		}
    		else if(mute[playerid])
     		{
      			SCM(playerid,-1,"{FF0000}[Server] {FFFFFF}Si umlčaný! Nemôžeš písať do chatu!");
        	        }
      	}
    	return false; //nemusís všude vracet false, stačí ti to nakonci, ovšem záleži to pouze na tobě, kdyby jsi měl delší kód a při splnění nějaký podmínky by si už zbytek kódu nechtěl projet, tak bys mohl
    } 

     

     

  2. No máš máš stejnou patici, takže máš jistotu, že to nebudeš cpát do jiný a něco tam nezničíš. Při nejhorším to nepůjde, vyměníš procáky zpět a zase by to mělo chodit. ;)

  3. No vypadá to, že ti nezbývá nic jiného než to vyzkoušet. Patice je stejná, tak by snad žádné problémy být neměly. Každopádně na netu nic moc o tý desce není ani o výrobci se nic moc extra nedozvíš. :d

  4. socket rPGA989B = socket G2. Najdi si přesně tu základní desku, kterou máš v tom Aceru a najdi si o ní jestli podporuje tu i3 2330M. ;) Když na tom listu, co MB podporuje nebude, tak to nemusí na 100% znamenat, že nebude fungovat... ;) Takže bez zkoušky stejně nic nezjištíš. Hlavní je, že mají stejný sockety :d

  5. Pokud chceš opravdu něco jednoduchého, tak určitě Python. Já v něm sice nedělám, moc ho nemusím, ale ve škole jsme o něm měli přednášku a dokonce jsme v něm i programovali hru. Je opravdu jednoduchý na všechno, dá se říct, že jednoduchou hru máš za pár minut hotovou. Nestaráš se tam o žádný složitý vykreslování obrázku, ani si nemusíš nijak hrát se zvukem, stačí zadat cestu a vše bez problému funguje. ;)

  6. Jo to se taky stávalo, někde tam máš víckrát stejně pojmenovanou proměnnou. ;) Stačí jednu z nich přejmenovat, samozřejmě na všech místech, kde se využívá ;)

    +heslo jsem asi zapomněl zrušit. ;)

     

    //Edit: U toho kódu, co jsem dal nahoře si přejmenuj proměnnou lights na lightss a stejně tak to i přejmenuj v tom cyklu, kde ji využíváš. ;)

  7. Řešení jsem ti už poslal do zprávy, pošlu ho ještě jsem jelikož jsi už 3. případ s kterým to řeším.

    + jak jsem psal i do zprávy carobjects.pwn jsou opravdu jen auta, ale nejspíš to sem zveřejním taky.

     

    Takže na opravu výše zmíněných errorů stačí deklarovat pár polí (někam nahoru do módu k ostatním):

    new spoiler[20][0] = {
        {1000},
        {1001},
        {1002},
        {1003},
        {1014},
        {1015},
        {1016},
        {1023},
        {1058},
        {1060},
        {1049},
        {1050},
        {1138},
        {1139},
        {1146},
        {1147},
        {1158},
        {1162},
        {1163},
        {1164}
    };
    
    new nitro[3][0] = {
    {1008},
    {1009},
    {1010}
    };
    
    new fbumper[23][0] = {
    {1117},
    {1152},
    {1153},
    {1155},
    {1157},
    {1160},
    {1165},
    {1167},
    {1169},
    {1170},
    {1171},
    {1172},
    {1173},
    {1174},
    {1175},
    {1179},
    {1181},
    {1182},
    {1185},
    {1188},
    {1189},
    {1192},
    {1193}
    };
    
    new rbumper[22][0] = {
    {1140},
    {1141},
    {1148},
    {1149},
    {1150},
    {1151},
    {1154},
    {1156},
    {1159},
    {1161},
    {1166},
    {1168},
    {1176},
    {1177},
    {1178},
    {1180},
    {1183},
    {1184},
    {1186},
    {1187},
    {1190},
    {1191}
    };
    
    new exhaust[28][0] = {
    {1018},
    {1019},
    {1020},
    {1021},
    {1022},
    {1028},
    {1029},
    {1037},
    {1043},
    {1044},
    {1045},
    {1046},
    {1059},
    {1064},
    {1065},
    {1066},
    {1089},
    {1092},
    {1104},
    {1105},
    {1113},
    {1114},
    {1126},
    {1127},
    {1129},
    {1132},
    {1135},
    {1136}
    };
    
    new bventr[2][0] = {
    {1142},
    {1144}
    };
    
    new bventl[2][0] = {
    {1143},
    {1145}
    };
    
    new bscoop[4][0] = {
        {1004},
        {1005},
        {1011},
        {1012}
    };
    
    new rscoop[17][0] = {
    {1006},
    {1032},
    {1033},
    {1035},
    {1038},
    {1053},
    {1054},
    {1055},
    {1061},
    {1067},
    {1068},
    {1088},
    {1091},
    {1103},
    {1128},
    {1130},
    {1131}
    };
    
    new lskirt[21][0] = {
    {1007},
    {1026},
    {1031},
    {1036},
    {1039},
    {1042},
    {1047},
    {1048},
    {1056},
    {1057},
    {1069},
    {1070},
    {1090},
    {1093},
    {1106},
    {1108},
    {1118},
    {1119},
    {1133},
    {1122},
    {1134}
    };
    
    new rskirt[21][0] = {
    {1017},
    {1027},
    {1030},
    {1040},
    {1041},
    {1051},
    {1052},
    {1062},
    {1063},
    {1071},
    {1072},
    {1094},
    {1095},
    {1099},
    {1101},
    {1102},
    {1107},
    {1120},
    {1121},
    {1124},
    {1137}
    };
    
    new hydraulics[1][0] = {
    {1087}
    };
    
    new base[1][0] = {
    {1086}
    };
    
    new rbbars[4][0] = {
    {1109},
    {1110},
    {1123},
    {1125}
    };
    
    new fbbars[2][0] = {
    {1115},
    {1116}
    };
    
    new wheels[17][0] = {
    {1025},
    {1073},
    {1074},
    {1075},
    {1076},
    {1077},
    {1078},
    {1079},
    {1080},
    {1081},
    {1082},
    {1083},
    {1084},
    {1085},
    {1096},
    {1097},
    {1098}
    };
    
    new lights[2][0] = {
        {1013},
        {1024}
    }; 

     

     

     

    Nejdříve jsem sem chtěl vložit obsah carobjects.pwn, ale kvůli jeho délce se sem nevešel, tak zde je odkaz.

  8. Udělal bych to samé, co radí kolega, akorát bych ještě použil hromadnou korespondenci - štítky. Rozhodně to ulehčí práci, každopádně jako .png ti to neuloží, ale seřadí pěkně za sebe k vytisknutí. ;)

    Pokud si nebudeš vědět rady, rád pomůžu, stačí když si v excelu uděláš 2 sloupce cislo_prukazu a platnost, nacvakáš si tam data a poukaz s excelovým souborem mi pošleš (ještě by nebylo špatné, kdyby jste si určil font a jeho velikost). Já ti odešlu zpět vygenerovaný word dokument se seřazenými kupóny. ;)

     

    Jinak poslat mi to můžeš do zpráv s odkazem třeba na ulož.to! ;)

  9. Def. obor jsem měl dříve u erroru, stejně tak jsem si dal i intervaly, ovšem u erroru to blblo tím, že mohl dosáhnout toho intrvalu, kdy měl jet rovně klidně i v zatáčce, protože error pouze vrací vzdálenost od čáry, ale když o tom přemýšlím tak s turnem by to jít mohlo. ;)

  10. Zdravím, 

     

    hledám nějakou matematickou funkci nebo vychytávku, která by mi pomohla, při zdolání čáry při vyšší rychlosti.

    Pro pohyb po čáře používáme PID regulátor. Který při správném nastavení konstant jede pěkně, ale bohužel pomalu a při zvýšení rychlosti se robot klepe jak osika.

     

    Vysvětlení:

    Celé to spočívá v tom, že zprvu přes senzor zjistíme hodnotu bílé a černé a to zprůměrujem (white+black/2) a vznikne nám "šedá", kterou by robot měl sledovat, takže jezdí po kraji čáry. Dále se počítá error (P), tj. vzdálenost od čáry (může být více na bíle, nebo více na černé --> tím se mění error), pak se počítá Integral, což je sečtení všech errorů dohromady, čímž robot ví, jaký tvar měla čára za ním a dokáže si odvodit, jak by měl pokračovat. A jako poslední se počítá Derivative. Který sečte vždy předchozí error s aktuálním, takže by měl dokázat předpovědět budoucí trasu. Z toho všeho se vypočítá zatáčka (turn), což je menšitel rychlosti jednoho z motoru, druhý jede vždy na 100%.

    turn = ((Kp * error) + (Ki * integral) + (Kd * derivative));
    

    Kp, Ki a Kd jsou konstanty, které je potřeba zkoušením nastavit na optimální hodnotu, vlastně říkají, jak velký zřetel se má na jednotlivé části z PID regulátoru brát. ;)

     

    Náš problém je v tom, že potřebujeme, aby turn házel jak malé hodnoty, tak velké. Ale jakmile se vzdálí od čáry, tak to skočí ihned z 0 na 22, což je strašně moc, takže okamžitě se sníží rychlost z jednoho motoru o 22, což samozřejmě přejede zase moc na černou a to má za následek klepání tam a zpět. Při zatáčkách by se nám zase hodily větší hodnoty, aby to při nejlepším dokázalo snížit i na nulu. (Ano, šlo by to jednoduchou podmínkou, ale pak už tam dáváte hodnoty "na pevno" a né vždy to jede tak jak má, nebo se to pořád klepe.)

     

    Takže ve zkratce potřebuji nějakou vychytávku nebo matematickou funkci, která dokáže malé hodnoty buď ještě zmenšit nebo neměnit a větší naopak ještě zvětšit. Bohužel nemám ještě tak vypracované myšlení, takže mě zatím nic nenapadlo. Pokud víte jak na to a je to složitější postup, uvítal bych kdyby jste mi to vysvětlili, jelikož nejsem nějaký genius v matematice, nebo mě alespoň navedli na správný směr. Za případné rady děkuji! :d;)

  11. Z offika topicu na samp fóru:

    new dir:dHandle = dir_open("./");//akorát si tu změníš cestu
    new item[40], type;
    	
    while(dir_list(dHandle, item, type))
    {
        if(type == FM_FILE) printf("%s is a file", item);
        else if(type == FM_DIR) printf("%s is a directory", item);
    }
    		
    dir_close(dHandle);
    
  12. Pravděpodobně je to nějakej malware. Tyhle blbůstky se straně těžko odstraňují, ale je tu jedna dobrá pomůcka, která slouží přesně na to, jmenuje se Adwcleaner. Mě snad vždycky pomohl, většinou jsem teda musel prohlížeče vrátit do továrního nastavení.

     

    Někdy ovšem stačí jen změnit domovskou stránku, odinstalovat z PC software, kterého jsi nejsi vědom, že sis ho nainstaloval, apod. ;)

  13. Počkal bych s tím do doby, než zprovozníš ten D jazyk pro sa-mp. Mohl by jsi to dělat v něm a my se z toho učit, popřípadě pak přidávat svoje kódy. Bylo by to alespoň užitečnější. Rekordy v návštěvnosti to sice nebude mít tak jako tak, ale aspoň to bude k něčemu dobrý... :d;)

  14. Jinak bych tě rád upozornil, že toto je dnes tvé druhé téma, které jsi pojmenoval "Help". Vůbec to nevystihuje tvůj problém, takže případní další uživatelé, kteří můžou mít identický problém, ho díky tvému názvu nemusí najít a zbytečně založí další téma, i když se tu daný problém již několikrát řešil. ;)

  15. Nemyslím si že dlouholetí uživatelé by měli zrovna s tímto problém. Zakládání témat ve špatné sekci se týká hlavně nováčků, kteří i když by měli, neznají pravidla. Pro mě osobně bylo pawno.cz první fórum, na kterém jsem kdy byl a o žádných pravidlech jsem neměl vůbec žádné tušení. ;) Vím, že to děláte zcela dobrovolně, zadarmo a ve svém volném čase, ale nemyslím si, že je tu takový provoz, aby tu bylo zakládání témat ve špatných sekcí na každodenním pořádku. Jak jsem řekl týká se to hlavně nováčků a připadá mi zbytečné je trestat za neznalost pravidel (i když by je samozřejmě znát měli), zvlášť když to tu novými lidmi tak nehýří jako dříve a proto navrhuji, aby při zakládání témat měli nováčci varování (třeba podle počtu příspěvků) na přečtení si pravidel. Pokud i tak poruší některé z nich,tak pak je teprve potrestat. ;)

     

     

    post-11610-0-03176900-1473791656_thumb.png

    • Líbí se mi to! (+1) 4
  16. Tady jsem ti napsal stock na dlouhé zprávy, původně byl od Miki. Ale jelikož, tam měl spoustu zbytečností a zprávu to rozdělilo natvrdo nehledě na to jestli byl konec slova nebo ne... takže se dá říct, že jsem ho komplet předělal. ;)

    #define MAX_CHARS_PER_LINE 80 //někam nahoru do módu
    stock SendLongMessage( playerid , color , message[] ) //kamkoliv mimo v módu (do do callbacků  )
    {
    	new len = strlen(message),
    	loop = len / MAX_CHARS_PER_LINE;
    
    	if( ( len % MAX_CHARS_PER_LINE ) ) loop++;
    	new _Line[MAX_CHARS_PER_LINE + 10];
    	new gap, end start = 0;
    	for(new index = 0; index < loop; index++)
    	{
    		gap = strfind(message, " ", true, (MAX_CHARS_PER_LINE - 10) * (index + 1));
    		end = (gap != -1) ? (gap + 1) : (len);
    		strmid( _Line, message, start, end);
    		start = end;
    		SendClientMessage( playerid, color, _Line );
    	}
    	return 1;
    }
    
    

    //Edit: Co se týče té pointy ProxDetectoru, tak tím nemyslím, že to máš špatně umístěné či co, ALE zpráva se ti vypíše nejspíše všem hráčům na server (neviděl jsem tu fci proxdetextor, takže nevím) a zároveň se podruhé vypíše všem členům z tvé frakce (včetně tebe), sice trochu jinak naformátovaná, ale bude sdělovat stejnou zprávu. ;) Ale chyba to není, co já vím, třeba to tak chceš. ;)

  17. Trošku jsem ti poupravil kód, co se týče dlouhých zpráv, tak budeš muset najít nějakou fci. Pokud nenajdeš, tak napiš SZ. Jinak pokud najdu čas, tak bych ti něco s těma autama mohl načrtnout.

     

     

    CMD:v(playerid, params[]) return cmd_vysilacka(playerid, params);
    CMD:vysilacka(playerid, params[])
    {
        new text[128];
        if(sscanf(params, "s", text)) return SendClientMessage(playerid, -1, "(( Použití: /(v)ysilacka [TEXT] ))");
    	if(PlayerInfo[playerid][pFrakce] == 0 || PlayerInfo[playerid][pFrakce] == 500 )return SendClientMessage(playerid, -1, "(( Tento příkaz nemůžete používat! ))"); //pomocí operátoru || (nebo) udělám z tvých dvou rozvynutých podmínek dohromady na 10 řádků takhle krátkou
     	if(PlayerInfo[playerid][pFrakce] == 1 || PlayerInfo[playerid][pFrakce] == 2)//nevím jestli náhodou nemáš víc frakcí, pokud ne, tak můžeš tuhle podmínku úplně smazat (Tady jinak stačilo zase použít operátor || a změnit podmínku v cyklu - určitě sis všiml, že se ty dva kódy až moc podobají)
      	{
       		new str[100+1], str1[100+1];
       		format(str, sizeof(str), "%s říká do vysílačky: %s", JmenoHrace(playerid), text);//Výpočet: 144(max, co se může odeslat) - 24 (max. délka jména) - 20 (použítý text) = takže můžeš využít cca 100 znaků pro zprávu. 
       		format(str1, sizeof(str1), "[VYSÍLAČKA]: %s (( %s ))", text, JmenoHrace(playerid));//nechápu pointu toho využití ProxDetectoru, když beztak zprávu (sice trochu jinou, každopádně někomu se pošle 2x) potom pošleš všem ze stejné frakce ať jsou nebo nejsou v okruhu 20 m...
       		ProxDetector(20.0, playerid, str, 0xFFFFFFFF, 0xD4D4D4FF, 0xAAAAAAFF, 0x7F7F7FFF, 0x555555FF);
    
    		for(new i =0, j = GetPlayerPoolSize(); i < j; i++)//použijeme GetPlayerPoolSize() - méně to vytěžuje tvůj server
    		{
    			if(IsPlayerConnected(i))
    			{
    				if(PlayerInfo[i][pFrakce] == PlayerInfo[playerid][pFrakce])//pokud se shoduje frakce se hráčem, který použil tu vysílačku
    				{
    					SendClientMessage(i, 0xA3C2F8FF, str1);
    				}
    			}
    		}
    	}
        return 1;
    } 

     

     

×
×
  • Create New...