-
Příspěvků
872 -
Registrován
-
Aktivní
-
Vítězných dnů
83
Content Type
Profiles
Forums
Calendar
Gallery
SA-MP
Příspěvky posted by Scydo
-
-
Díky a našel by jsi nějaký trik aby se nemuselo vše psát do jednoho dlouhého řádku? Protože se to přepíše, když dám dva pod sebe.
format(data, sizeof size, "Admin Level : %s\nBanka : %i\nCash : %i", Admin[playerid], Banka[playerid], GetPlayerMoney(playerid));
-
Dobrý,hezká práce... Akorát nejde vytvořit gang,Jinak 10/10 + Respect
Pak jedině přemýšlet o streameru a nebo děláš něco špatně.
-
Záleží, co je to za AS. Může to být cokoliv. Například zadals špatné parametry do příkazu(dat. typ) nebo jich nemá dostatek...
-
else if(strcmp(INI_String(File, "Password"), udb_hash(inputtext),false)) return ShowPlayerDialog(playerid,Dialog_Info2,DIALOG_STYLE_INPUT,"Zmena Hesla","{ff0000}Špatné heslo ! {ffffff}Zadej své staré heslo:","Dále","Cancel");
I kdybys dokázal dosadit správně všechny arg. tak ti to nepůjde, protože y_ini nedokáže načítat údaje jen tak mimo bez základně důležitých parametrů, z callbacku, name[] a value[]. Buď načítej údaje pomocí 2 načítacích callbacků(1.[zda samozřejmě existuje soubor] po připojení, co bude obsahovat potřebné údaje, a 2. který po zadaní hesla donačte zbytek údajů. Takže, dokud nezadá heslo, nic důležitého se nenačte), nebo to načti pomocí jednoho všechno, a bez zadání správného přihlašovacího hesla ho vyhazovat.
-
-
Je vidět, že kdokoliv dělal na tomhle HS, tak znalosti YSI má extrémně malé. Kromě teoretických chyb(navíc závorka, chybějící středník), je tam využití knihovny srovnatelné asi s použitím návratových hodnot...
(plus hádám, že autor to načítá z alternativní cesty. Lepší je to načítat z přímé, tak kdybys neměl...)
#include <YSI_Storage\y_ini> #include <YSI_Data\y_iterate>
+#include <sprintf>
Jestli ti můžu něco doporučit, tak můj ověřený způsob s tagy a iterátory(funkční ovšem) a k tomu sprintf(). Pokud budeš dělat desítky souboru a cyklovat je, tak stačí drobná chyba v zápisu a celý systém se ti začne hroutit.Navíc je to mnohem jednodušší. Takže, začneš přidáním iterátoru pro své domy. Tak můžeš rovnou cyklit domy a ne vlastní cykly a proměnné(makro na maximum domů můžeš zachovat) :
new Interator: Houses<MAX_HOUSES>;
Taky nezapomeň a další proměnné(informace) o domě jako pozice, jméno majitele, cena apod.Pak samozřejmě vyčistíme iterátor. Nechceme, aby nám tam lítali nežádoucí informace:
public OnFilterScriptExit() { Iter_Clear(Houses);
Teď přichází ta dokonalost . Stačí jenom nalézt volný iterátor a začlenit do něj náš další dům. Číslo nalezeného volného iterátoru můžeš použít i jako id domu!new house_id = Iter_Free(Houses); Iter_Add(Houses, Iter_Free(Houses));
protože máš id volného baráku, můžeš mu rovnou přiřazovat údaje jaké jméno majitele, cena apod.PS: jestli chceš zjistit počet přidaných domů, nemusíš nic cyklit, deklarovat proměnnou, nic takového, stačí jenom zjistit počet vložených interátorů:
if (Iter_Count(Houses) == MAX_HOUSES) ...
Vybereš si nějaký(jeden), kam budeš všechno ukládat:new INI:Soubor = INI_Open("Baraky.sav");
A nakonec ukládání údajů. K tomu ještě použiješ tag. Tag ti zajistí, aby se všechny údaje ukládali pod daný barák do seznamu. A abys ses nezdržoval s formátováním, použiješ sprintf(je to i nakonec kratší):INI_SetTag(Soubor, sprintf("House%i", house_id)); INI_WriteString(Soubor, ...); INI_WriteInt(Soubor, ...); INI_WriteString(Soubor, ...); INI_WriteInt(Soubor, ...); INI_WriteInt(Soubor, ...); INI_WriteInt(Soubor, ...); INI_Close(Soubor);
Načítání není o nic těžší. Stačí při načítání všech údaju přidat i načítání tagů. V samotném callbacku pak při načítání hledat jejich tag nejdříve. To stačí hledat jenom slovo House a číslo. Poté přidávat i dané iterátory(protože to jsou jejich id):Zjištěný id pak můžeš používat i rovnou do proměnných.
INI_ParseFile("Baraky.sav" , "NahratData", .bPassTag = true); public NahratData(tag[], name[], value[]) { new sstr[14]; strmid(sstr, tag, 5, strlen(tag)); new i = strval(sstr); INI_String(...); INI_Int(...); INI_String(...); Iter_Add(Admins, i); INI_Int(...) return (false); }
POZOR Nepřidávat iterátor jako poslední. Návr. hodnoty načítání ti to znemoží -
Prakticky každý se to učí jinak. Někdo tu sázel jeden help za druhým, někdo zase se jenom zeptal v chatě a ihned věděl(i když tam viděl jenom nepatrný rozdíl a myslel si, že je to zcela něco jiného)... Tudíž je nejlepší si najít takový způsob, co ti vyhovuje a držet se ho.
Například já postupoval style, že když jsem nevěděl co dělá jaká fce, dopsal jsem jí v prohlížeči za odkaz http://wiki.sa-mp.com/wiki/, a když měl problémem s chybou, tak jsem jí zkopíroval, napsal do Google a díval se, jak něco podobného řeší jiní...
Nejvíc se na tom podepíše ten zájem. Pokud se ho chceš naučit a tvořit s ním, určitě radši prozkoumáš všechno, co to umí a dokáže, popřípadě si vyslechneš jakoukoliv pomoc, než, kdybys ses učil pouze to, co potřebuješ, abys měl to samé, co vidíš na nějakém cizím serveru a zalíbilo se ti to.
-
Špatný odkaz nebo ten formát nepodporuje.
-
if (!strcmp("/zapnout", cmdtext)) {
//Sample code
return 1;
}
if (!strcmp("/vypnout", cmdtext)) {
//Sample code
return 1;
} -
public OnPlayerCommandText(playerid,cmdtext[]) { if(!strcmp(cmdtext, "/stuntpark", true)) { SetPlayerPos(playerid, 2452.7988,16.5131,3.1842); return 1; SendClientMessage(playerid, FIALOVA, "{FFFFFF} Byl jsi {FF0000}Teleportován{FFFFFF} na {00FF00}StuntPark {FFFFFF}by {00FFFFF}.db[G].{FFFFFF} | Pro port na {FF0000}Tunely {FFFFFF}+ {FF0000}Parkour {FFFFFF}dej {00FF00}/tunely{FFFFFF}."); } return 0; }
Problém je, že vracíš a po té máš další fce. Jakmile vrátíš následné fce se nevykonají.
if (!strcmp("/stuntpark", cmdtext)) { SetPlayerPos(playerid, 2452.7988, 16.5131, 3.1842); SendClientMessage(playerid, FIALOVA, "{FFFFFF} Byl jsi {FF0000}Teleportován{FFFFFF} na {00FF00}StuntPark {FFFFFF}by {00FFFFF}.db[G].{FFFFFF}"); SendClientMessageToAll(FIALOVA, "| Pro port na {FF0000}Tunely {FFFFFF}+ {FF0000}Parkour {FFFFFF}dej {00FF00}/tunely{FFFFFF}."); return 1; }
A pokud jde o text s jménem hráče, tak stačí ten jeho nick zjistit a formátovat text. Buď si na to můžeš vytvořit tu fci PlayerName(), abys to při dalších použitích měl jednodušší, nebo to zjišťovat lokálně:if (!strcmp("/stuntpark", cmdtext)) { new String[72 + 1], Name[MAX_PLAYER_NAME + 1]; GetPlayerName(playerid, Name, sizeof Name); format(String, sizeof String, "Hráč %s se odwarpoval na StuntPark by .db[G].", Name); SetPlayerPos(playerid, 2452.7988, 16.5131, 3.1842) , SendClientMessageToAll(FIALOVA, String); return 1; }
-
Než se někdo z vás stane prezidentem tak já opět zemřu...
-
-
Prepare yourself we attack at dawn!
-
Hm... Popis stavu, co obsahuje ten GM, je novinka... Většinou to jsou pomlčky, nikoliv závorky s mezerami uvnitř.
-
-
- Popular Post
- Popular Post
- 5
-
You're wrong, anything can happen here.
Měl jsi nás zastavit, dokud to šlo... Teď už je příliš pozdě...
-
Zrušit ho může pouze vůdce klanu.
- 3
-
Ten error přichází z fixes.inc. A k INC souboru máš dozajista přístup.
-
Je to uživatelský error, to znamená, že někdo ti tam hodil
#error
v případě, že například uděláš někde chybu. Podívej se, kde to makro s tímhle upozorněním je. Třeba tam budou poznámky. Nebo přijdeš na způsob, kde je přesně chyba. -
//:edit ups
-
Přeji příjemnou nudu:
Pawno 2.0
v Návrhy na zlepšení a hlášení chyb
Odesláno:
Úžas v PAWN byl právě, protože byl celkem prostý, jednoduchý na naučení ale především výsledek programátor VIDĚL! Chtěl magorské auto, co mění barvu každou milisekundou, bum měl a viděl. Chtěl si vytvořit vozidlo, které střílí objekty v podobě raket, bum udělal a viděl. Ne jako programátoři C++ nebo Pythonu, kdy bouchali do klávesnice, rudý vzteky a častým nepochopením proč to (ne)funguje a po tom všem, výsledkem je 5 slov a 4 operace v konzoli .
Takže, za mě, nápad se zaměřit na jazyky, které mají "vizuální výsledky" jako je PAWN (i když koukám, že víceméně stejný nápad už padl v podobě Unity nebo UE )