-
Příspěvků
827 -
Registrován
-
Aktivní
-
Vítězných dnů
32
Content Type
Profiles
Forums
Calendar
Gallery
SA-MP
Příspěvky posted by Quiter
-
-
if(response) { new Slot = 0; for(new i=0;i<MAX_WEAPON;i++) { if(AllowWeap[i]) { Slot++; if(listitem == Slot-1) // Porovná, či sa listitem rovná vybranému slotu (zníženému o 1 pretože listitem začína na 0) { GivePlayerWeapon(playerid, i, WeapData[1]); // pridá hráčovi zbraň break; // Ukončí cyklus } } } }
Tu máš ešte ako administratívne upraviť cenu a náboje
WeapData[31][0] = 1368; // Nastavím zbrani č.31 cenu 1368 WeapData[31][1] = 250; // Nastavím zbrani č.31 250 nábojov
-
V priloženom pwn súbore môžeš pozrieť ako som to myslel ja Máš to ovela jednoduchšie a funkcie si môžeš dorobiť WeapData - prvý parameter je cena a druhý počet nábojov, alebo ak si to prepíšeš ináč, to je na tebe Ak by si niečomu nerozumel alebo nevedel, napíš buď sem alebo mne do správy
PS: máš tam aj príklad ako spraviť, aby ti do dialogu vypísalo len zbrane ktoré "povolíš"
-
Ja ti neviem, mne príde že ideš na to príliš komplikovane :/
Sprav si tak, že budeš mať kompletný zoznam zbraní podla ich ID, a admin bude iba povolovať/zakazovať jej zobrazenie v dialogu... Následne cyklom for prejdi všetky zbrane, a pokial má zbraň nastavené zobrazenie tak mu ju zobraz
Budeš na to potrebovať 2 premenné...
new WeapName[][] =
{
"Zbraň1", "Zbraň2", // atď, nepamätám si v akom idú poradí
};
new bool:AllowWeapon[MAX_WEAPON_ID]; // nezabudni nadefinovať max weapon id
PS:
format(sString, sizeof(sString), "%s%s\n", sString);
Toto ti nikdy v živote nebude fungovať... :/ máš tam 2x %s ale len 1 parameter...
-
před 1 hodinou, rEf said:
Dle všeho koupil bednu bez předinstalovaných win. a nemůže je nainstalovat :-D Bud je hdd v háji či ssd jestli má nebo špatně zapojené a nebo to prostě neumí udělat a nikdo mu nedokáže poradit. Osobně doporučuji jestli máš nějaký hdd jiný zkus ten nebo opačně napoj ten s toho nového na starý pc a uvidíš jestli půjde pokud víš jak to zjistit
Bolo by dobré čítať celý príspevok - nemôže odskúšať či má dobrý HDD pretože nemôže otvoriť bedňu kvôli záruke...
Autorovi: Čo riešiš? Bedňa je v záruke, predpokladám že si si to dal nejakému servisu poskladať a aj nakúpiť diely tak sa tam vráť, povedz im že ti bios nerozoznal ten disk a nech ti to spravia... nakoľko je to ich chyba, mali by ti to spraviť na počkanie... samozrejme záleží na servise...
Do budúcna - nedávaj si PC skladať v servise, radšej popros schopného kamaráta
-
před 4 hodinami, MajorGames4 said:
Definícia je: #define scmta SendClientMessageToAll
Ešte dodám:
V tomto FS kde som dal ten TIP system mám viacej príkazov. Môže to byť aj tým že jdnoduche ten FS "je moc ťažký a server ho jednoducho nenačíta celý"?
Pochybujem...
Skôr si myslím že ti koliduje názov timeru s nejakým timerom v móde... spravil si si tie printy? Ak nie, na čo čakáš?
-
No zásadný problém tam nevidím... Pošli definíciu scmta.
Taktiež keď dáš random(7) tak máš hodnoty 0..6, takže case 7 sa ti nikdy nevykoná
PS: sprav si kontrolu či sa ti volá public (daj tam print, aj do OnFSInit), taktiež môžeš pri settimer kontrolovať hodnotu ktorú vracia - či ti náhodou nevráti 0, ale to nepredpokladám
-
Nech kukám ako kukám na ten tvoj kód tak mu stále nechápem... Načo tam je ten cyklus - ano viem už si to písal, stále tomu však nerozumiem...
Uvediem príklad dialogu:
1) Rádio 1
2) Rádio 2
3) Rádio 3
...
7) Rádio 7
8) Nové rádio
9) Edituj meno
10) Edituj link
Tak logicky listitem 0 až 6 prehrajú zvuk a 7,8,9 spustia druhý dialog
Tak mi vysvetli načo tam máš cyklus, ale zmysluplne
-
před 5 hodinami, rEf said:
Proč nepoužít new? Např.
new Language[2][2][] = { // [0 = Čeština, 1 = Angličtina][počet řádků] { "Vítej %s", "Auto" }, { "Welcome %s", "Car" // nebo do includu např. #include <languages/en.pwn> s obsahem "Welcome %s", "Car" } };
Použití např. nastavíme Jazyk:
new lang[MAX_PLAYERS];
default bude 0 tudíž Čeština
nastavíme Jazyklang[playerid] = 0; // nebo 1 což je Angličtina
a použití bude
Language[lang[playerid]][0] // pochopitelně 0 je řádek Vítej, Welcome Language[lang[playerid]][1] // 1 je řádek Auto, Car
např.
format(cesta, sizeof(cesta), Language[lang[playerid]][0], PlayerName(playerid));
Zkouška:
Ano, pri 10 textových reťazcoch o dĺžke 25 znakov možno...
Ale čo keď bude v móde 100 000 textov o dĺžke 500-10000 znakov (hovorím teraz o dialogoch) nemyslím že by to bolo lepšie
-
- Popular Post
- Popular Post
Multi jazyk pre GM
Obtížnost: 2/5
Osnova/obsah:
1. Úvod
2. Čo je multi jazyk (multilanguage) a načo sa dá použiť?
3. Vytváranie vlastných funkcií a ich použitie
4. Záver
1. Úvod
Tento návod som sa rozhodol vytvoriť, pretože v dnešnej dobe už GM s jedným jazykom nemá veľkú popularitu, a mladší hráči ktorý neovládajú veľmi angličtinu nehrávajú na serveroch písaných po anglicky.
Upozorňujem, že tento návod nie je copy + paste. Pre tvorbu svojích funkcií je nutné kódu rozumieť.
2. Čo je multi jazyk a načo sa dá použiť?
Multi jazyk je implementácia dvoch a viacerých jazykov do GM. V tomto návode sa Vám posnažím čo najjednoduchšie vysvetliť, ako si vytvoriť svoje funkcie na multijazyčnosť a ako ich použiť.
Multijazyčnosť je vhodná pre servery, ktoré plánujú expandovať na zahraničný "trh" a tým rozšíriť svoju klientelu (hráčov).
3. Vytvárania vlastných funkcií a ich použitie
Celý systém funguje na princípe #define.
Pre pochopenie kódu je nutné poznať:
#include, #define, cyklus for, SendClientMessage/ToAll, format(...)
V prvom rade, budeme potrebovať definície naších textov (textových reťazcov/stringov). Pre lepší prehľad som ich vložil do zložky INCLUDE s názvom lang_SK.inc a lang_CZ.inc. !!! POZOR !!! Je nutné nastaviť formátovanie textu na ANSI.
Načítame naše includy:
#include "../include/lang_SK" #include "../include/lang_CZ"
Takto nejako by mal vyzerať váš include:
// Uvítacia správa pre hráča #define msgCONN_SK "Vitaj na servery. Použi /lang pre zmenu jazyka." // Informácia o príchode hráča #define msgCONNAll_SK "Na server prišiel nový hráč." // Informácia o zmene jazyka #define msgLangCHG_SK "Tvoj jazyk bol zmenený na slovenčinu." // Formátovaná správa - slúži na test #define formMSG_SK "Tvoje herné ID %d:%d" // Počet znakov formátovanej správy formMSG #define formMSG_size_SK 22
#define msgCONN_CZ "Vitaj na servery. Použi /lang pre zmenu jazyka." #define msgCONNAll_CZ "Na server prišiel nový hráč." #define msgLangCHG_CZ "Tvoj jazyk bol zmenený na češtinu." #define formMSG_CZ "Tvoje herné ID %d:%d" #define formMSG_size_CZ 22
Týmto vložíme do nášho GM texty vo všetkých jazykoch. Platí, že pre každý jazyk bude zvlášť *.inc súbor kvôli prehladnosti.
Ako ďalší bod by sme si mali zadefinovať maximálny počet jazykov a taktiež zoradenie jazykov.
#define MAX_LANG 2 // Maximálny počet jazykov #define LANG_SK 0 // slúži len pre nastavenie jazyka a nie je nutné ho definovať #define LANG_CZ 1 // slúži len pre nastavenie jazyka a nie je nutné ho definovať
Takže teraz už mám v našom GM textové reťazce a máme definované koľko jazykov náš GM má. Ďalším krokom je tvorba vlastných funkcií. Názorne predvediem funkcie SendClientMessage, SendClientMessageToAll a formátovanie textu.
#define SCM(%0,%1,%2); \ if(GetPlayerLang(%0) == 0) SendClientMessage(%0, %1, %2_SK); \ else if(GetPlayerLang(%0) == 1) SendClientMessage(%0, %1, %2_CZ); //#define SCM(%0,%1,%2); - zadefinujeme ako má funkcia vyzerať a aké má mať parametre // \ - znamená že definícia pokračuje na novom riadku //if(GetPlayerLang(%0) == 0) skontroluje či je hráčov jazyk 0,1,2 atď... //SendClientMessage(%0, %1, %2_CZ); //%0 je ID hráča, %1 je farba správy a %2 je názov definície textovej správy // Príklad použitia SCM(playerid, 0x00BB00AA, msgCONN); // msgCONN je definícia z INC hore bez prípony _CZ / _SK
Namiesto SendClientMessage použijete SCM a namiesto textu použijete definíciu z includov lang_SK a lang_CZ bez prípony _SK / _CZ - tak ako je uvedené v príklade
Ako ďalšie si ukážeme SendClientMessageToAll. Je to veľmi primitívna funkcia, pretože spočíva len v tom, že spustíme cyklus pre každého hráča a využijeme už definovanú funkciu SCM.
#define SCMTA(%0,%1); \ for(new i=0;i<=GetPlayerPoolSize();i++) { if(IsPlayerConnected(i)) { SCM(i, %0, %1); } }
SCMTA(0x00BB00AA, msgCONNAll); // Použitie rovnaké ako pri SCM, len nám odpadá parameter playerid
Ďalšia zaujímavá funkcia je formSCM - takže formátovaná správa. Upozorním že v includoch lang_SK a CZ je nutné definovať aj počet znakov!
#define formSCM(%0,%1,%2,%3); \ if(GetPlayerLang(%0) == 0) {new str[%2_size_SK]; format(str, sizeof(str), %2_SK, %3); SendClientMessage(%0,%1,str);} \ else if(GetPlayerLang(%0) == 1) {new str[%2_size_CZ]; format(str, sizeof(str), %2_CZ, %3); SendClientMessage(%0,%1,str);} #define formSCMTA(%0,%1,%2); \ for(new i=0;i<=GetPlayerPoolSize();i++) { if(IsPlayerConnected(i)) { formSCM(i,%0,%1,%2); } } // táto funkcia funguje na princípe klasického formátovania a odslania správy //%0 - playerid, %1 farba, %2 definícia textu, %3 parametre - môžete zadať aj viac parametrov // new str - vytvorí textový reťazec ktorý budeme formátovať // %2_size_SK - definícia počtu znakov, tz. ak máme definiciu textu formMSG_SK tak definícia počtu znakov bude formMSG_size_SK // následne sa naformátuje text podľa zadaných parametrov // potom sa už len odošle správa // fungovanie je veĺmi podobné SCM len s tým rozdielom, že sa text pred odoslaním naformátuje // formSCMTA funguje rovnako ako SCMTA
formSCMTA(0x00BB00AA, formMSG, playerid, playerid); formSCM(playerid, 0x00BB00AA, formMSG, playerid, playerid); // Tu je príklad použitia // Použitie je veľmi podobné ako pri SCM a SCMTA, len s tým rozdielom, že pribudli parametre formátovania
Úplne na záver Vám sem pridám príkaz na zmenu jazyka.
if (strcmp("/lang", cmdtext, true, 4) == 0) { SetPlayerLang(playerid, GetPlayerLang(playerid)+1); if(GetPlayerLang(playerid) == MAX_LANG) SetPlayerLang(playerid, 0); SCM(playerid, 0x00BB00AA, msgLangCHG); return true; }
4. Záver
Na záver by som chcel poďakovať za prečítanie môjho návodu a dúfam že pomôže novým pawnerom s ich módmi. Dúfam že som všetko napísal zrozumiteľne a pochopiteľne. V prípade otázok alebo kritiky neváhajte zanechať komentár.
- 1
- 4
-
Tých pár na kraji? Som myslel že to je defaultne v GTA nevadí, myslel som to tak že pokryť celú tu plochu parkoviska
-
Myslím tým čiary, prípadne ohraničenie každého parkovacieho miesta + rezervované miesta ale aj tak to vyzerá dobre
-
Pekné vytknem ti že si nespravil parkovacie miesta
Taktiež je škoda že tie rámy okien sú rozmazané, ale s tým už nič asi nespravíš keďže je to textura GTA
-
new value1[5] = dialogid == 7;
new value2[5] = dialogid == 8;
new idhraca = strval(value1);
new ciastka = strval(value2);Úplna volovina...
V dialogu 7 si sprav
SetPVarInt(id, "IDHraca", strval(inputtext));
V dialogu 8 si sprav
GivePlayerMoney(GetPVarInt(id, "IDHraca"), strval(inputtext));
To je celé
PS: nezabudni si to ošetriť (napr. aby nezadal ID neexistujúceho hráča a pod.
SetPVarInt(playerid, "nazov", hodnota) - teoreticky ti vytvorí premennú typu integer s názvom "nazov" a hodnotou "hodnota"
playerid je ID hráča na ktorého sa premenná vzťahuje... táto premenná sa automaticky vymaže keď sa hráč odpojí zo servera alebo sa reštartuje/vypne server
GetPVarInt(playerid, "nazov") - podobné ako SetPVarInt len s tým rozdielom, že chýba parameter hodnota a funguje na to, aby si tú hodnotu vyčítal - vráti ti uchovanú hodnotu
Veľký !!POZOR!! na malé a velké písmena... je rozdiel medzi "Názov" a "názov" a "Nazov" !!!
-
před 2 hodinami, MajorGames4 said:
Dobré ráno, mám problém so svojim FS. Robím si svoj FS, a keď v hre dám /môjpríkaz tak sa mi žiadne menu nezobrazí. Neviete mi prosím napísať script, ako sa robí základné menu? Napr. v menu bude: Výber zbraní, Výber skinu atď...
Načo ti to máme písať keď to už máš vo svojom FS? Daj sem kód a mi ti ho možno opravíme
-
Je síce pekné že chceš pomôcť začiatočníkom, ale mám pár výhrad:
1) gramatika - doplný hráčovy
2) Predpokladám že publicy už poznáte - nemôžeš predpokladať pri návode, hlavne ak má návod označenie #1... tz. nemôžeš použiť niečo čo si im nevysvetlil
3) playerid => Zistí VAŠE ID.- nezistí, je to parameter s ID hráča ale nič nezisťuje iba uchováva hodnotu ID hráča ktorému sa public volá (neviem presne ako by som to vysvetlil)
4) -1 => Farba správy (uvádzajte v "0xXXX" príklad si ukážeme a konci návodu) - píšeš že majú dávať ako 0xXXX ale ty použiješ -1? Prečo? Čo znamená -1... Začiatočník to nevie
5)
- Nechce sa vám stále písať "SetPlayerHealth", "SendClientMessage" atď?? Uľahčime si to definíciou!
- Definíciu píšeme vždy pod #include (vysvetlíme si v budúcom návode). Ukážka:
Prečo ich učíš deiníciu keď ju nevysvetlíš?
6) Nemyslíš že by bolo najjednoduchšie začať vysvetlením premenných, aby si s nimi mohol pracovať v ďalšom návode?
Páči sa mi ale štýl toho návodu, máš tam legendu a aj praktickú ukážku
- 2
-
if(IsPlayerVip(playerid)) return SendClientMessage(playerid, -1, "Niesi Admin!");
Čo by si na tom chcel jednoduchšie? Best stocku?
if(VIP[playerid] == 1) return SendClientMessage(playerid, -1, "Niesi Admin");
Inak vôbec nechápem čo jednoduchšie na tom chceš
Ešte ma napadá:
#define VIPKontrola if(VIP[playerid] == 1) return SendClientMessage(playerid, -1, "Niesi Admin")
a potom použiješ:
VIPKontrola;
BTW: Nerozumiem tej podmienke, kontroluješ či má VIP a ak áno, tak mu napíšeš že nie je admin? wtF?
-
A ešte jeden drobný detail: keď zakladáš help, označ nám ktorý riadok hlási chybu
-
CMD:afk(playerid,params[])
{
dcmd(afk,3, cmdtext);
return 0;
}čo robí toto?
A kde tam berieš cmdtext?
-
number of arguments does not match definition - stačí obyčajne preložiť a hneď vieš v čom je problém
počet parametrov nesúhlasí s definíciou
tj. chýba ti tam parameter virtualworld
- 1
- 1
-
Ja jsem narozdíl od jeho scriptů, ty své vždy dokončil a to bez bugů. Pointa? Ten člověk vytvoří mód a vzápětí s tím konci a nic z toho neni. Je tu pro smích.
Ale stále je to len a len jeho vec By ma zaujímalo čím ťa tak vytočil že si sa rozhodol ho takto konfrontovať
-
A pointa tohto "prínosného" príspevku? Naviac trochu silné slová od niekoho kto vytvoril
Všehoscript 1.0a chváli sa tým v podpise
Hold niektoré veci sa udejú z ničoho nič... Ja si napr. tiež nerobím zálohu svojich vecí, takže ak sa mi pokazí disk tak poviem iba zbohom A tiež som začal vela projektov ktoré skončili po menej ako týždni, lebo sa mi nechcelo nespravíš nič no
-
Nejaké FS používaš - môže to byť v nich? Ohľadom nemocnice ti poradil kolega nado mnou
-
Nemáš niekde ďalej v kóde pridanú túto classu? Alebo napríklad vo FS?
-
Ja neviem prečo tu všetci riešite nejakú klávesu, keď to mu už dáááávno funguje... Viď citáciu nižšie.
A ta funkcia je..? lebo objekt mi vytvorí ale nedeje sa sním nič
No nemalo to byť MoveObject ale MoveDynamicObject a funguje mi to a teraz ako odstranim toto ked mi to v MTA neukazuje ale v sa-mp ano
Ale samozrejme, to by niekto musel najprv čítať všetky príspevky a nie len prvý a posledný...
BTW už si zistil či ten objekt vidíš len ty, alebo ho vidia všetci hráči?
PW_OnPlayerPickUpPickup
v Herní (SA:MP, CS apod.)
Odesláno:
Odkial my máme vedieť čo znamená PW_OnPlayerPickUpPickup? Je tvoja vec čo za includy alebo vlastné funkcie si tam nahádžaš...
Podľa znenia usudzujem že je to klasický OnPlayerPickUpPickup ale pre streamer