Kubko
-
Příspěvků
257 -
Registrován
-
Aktivní
-
Vítězných dnů
3
Content Type
Profiles
Forums
Calendar
Gallery
SA-MP
Příspěvky posted by Kubko
-
-
Správne, tebe sa zobrazí dialóg správnej kasy, ale pri response v dialógu to s ňou nepočíta.
-
V dialógu, kde vyberáš peniaze z kasy daného businessu nemáš urobenú žiadnu kontrolu, z ktorej kasy sa vlastne tá čiastka má odčítať. Tvoj cyklus sa navyše po odčítaní ani neukončí, takže to je pravdepodobne dôvodom, prečo to na jednom serveri fungovať môže (ale nesprávne) a druhom nie.
Čo sa týka toho pripočítavania do kasy, do súboru nezapisuješ nový stav kasy, ale iba tú hodnotu, o ktorú má narásť. V podstate by to za behu serveru nemalo mať vplyv, ale printf() ti určite prezradí, kde je problém.
-
Ahoj všetci! Poslednou novinkou na našom serveri je nový systém mobilu. Dúfam, že sa vám bude páčiť.
- 4
-
Pokiaľ teda ten iterátor nehodláš využívať, tie dva riadky môžeš vymazať.
-
- Popular Post
- Popular Post
História:
Pôvodný herný mód San Francisco Bay bol vytvorený v roku 2009 ex-pawnerom vystupujúcim pod prezývkou _BuLLeT_. Od počiatku server náležal a bol sprostredkovaný portálom CrewZone. V roku 2012 však mód začal upadať a tak sa rozhodovalo o tom, či bude mód ďalej pokračovať ako TDM, alebo roleplay. Komunita nakoniec rozhodla o roleplayi a tak sa začal vyvíjať prvý československý roleplay gamemód, ktorým bolo SFB-RP v1.2. Mód obsahoval mnoho chýb a nedostatkov, tie sa ale počas tých rokov podarilo obmedziť na ich minimum.
Po vydaní verzie 1.3 sa _BuLLeT_ rozhodol ukončiť svoje pôsobenie na vývoji SFB-RP a začal vyvíjať nový mód, Tales of War. Vývoja módu sa následne ujal _NosiK_, pretože vtedajšia komunita nechcela dopustiť, aby mód s jeho odchodom zanikol. SFB-RP si prešlo ráznymi zmenami v pravidlách a hlavne v systémoch, ktoré na SFB boli. V roku 2017 sa SFB-RP oddelilo od portálu Crew Zone a teraz funguje samostatne ako sfb-rp.cz. O momentálný vývoj módu sa stará Kubko, ktorý sa snaží script neustále zveľaďovať zavádzaním nových systémov na úrovni novodobých kvalít a rovnako optimalizovať, aby zabezpečil terajšej komunite len ten najlepší pôžitok z hrania.
Čo server ponúka?
Aktuálna verzia San Francisco Bay Roleplay v1.3.2 Build 5a ponúka tieto možnosti:
Dynamický systém postáv prepojený s používateľským účtom na webe
- pre pripojenie na server je potrebné mať registrovaný účet na webe, jedná sa o rýchly proces, po ktorom získate plný prístup do hry, UCP a fóra
- po úspešnom prihlásení do hry pod zvoleným menom si môžete v grafickom prostredí do slotu vytvoriť postavu voľbou pohlavia, skinu a mena postavy
- kliknutím na náhľad postavy a následným kliknutím na tlačítko "Spawn" bude vaša postava prenesená do herného roleplay sveta
- medzi jednotlivými postavami je možné prepínať priamo v hre, bez nutnosti akéhokoľvek reštartu herného klienta
Obr. 1 - Náhľad na výber postavyLegálne frakcie a povolania
- v hre sa môžete pridať k štátnym frakciám ako je San Francisco Government, San Francisco Police Department, San Francisco Fire Department, Emergency Medical Services a San Francisco One News
- medzi ostatné povolania patrí napríklad mechanik, vodič taxi, autobusu, kamiónu, čistič chodníkov, smetiar, natierač mostu, vodič prepravnej služby, rozvázač pizze, donutov...
- každá frakcia má svoju hodnosťnú štruktúru, od ktorej sa pri výplate odvíja finančné ohodnotenie zamestnanca
- výplata prichádza v intervale jednej hodiny a jej výška sa odvíja od viacerých faktorov (prac. doba, dodržanie prac. náplne...)
- v šatni niektorých štátnych zložiek je k dispozícii niekoľko novo pridaných pracovných skinov (0.3.8)
- frakcie ako je SFG a SFON dokážu vplývať na ekonomiku celého mesta (nastavenie DPH, mýta, poplatok za podanie inzerátu...)
- okrem povolaní, je možnosť si privyrobiť brigádou nosenia bední, alebo chytaním rýb na mori
- v prípade, že by vás práca prestala baviť, bude vám na úrad chodiť menšia podpora - dávky
Obr. 2 - Zamestnanci EMS s novým objektom medicbagu a pracovným skinom
Obr. 3 - Brigáda nosenia bedienDynamický systém nelegálnych skupín
- hráč si môže svoju nelegálnu skupinu nechať "zoficiálniť", čím obdrží ako leader svojej skupiny zaujímavé možnosti
- nelegálna skupina si môže vybrať spôsob zisku zbraní, jednou je dovoz (rýchlejšia a drahšia možnosť) a druhou je výroba zbraní v sklade
- spomínaný leader môže nastaviť sídlo svojej ilegálnej skupiny, spravovať členov, prideliť im akýkoľvek názov hodnosti, permisie...
- každá skupina má v svojom sídle kasu, do ktorej môžu členovia prispievať a oprávnený aj vyberať peniaze či kontrolovať pohyby
Obr. 4 - Prehľad základných informácii o skupine
Obr. 5 - Zobrazenie všetkých členov skupiny
Obr. 6 - Transakcie v kase
Dynamický systém vozidiel
- v meste sa nachádza niekoľko predajných miest, kde si môžete zakúpiť motorové vozidlo, loď, helikoptéru, bicykel...
- súčasťou systému vozidiel je palivo (benzín, alebo nafta) a kufor, do ktorého je možné ukladať zbrane, alebo drogy
- všetky vozidlá sú kupované za hernú menu, výnimku tvorí pár prémiových vozidiel, ktoré je možné kúpiť len za coiny
- s kúpenými vozidlami je možné obchodovať s hráčmi, alebo ho predať okamžite za polovicu pôvodnej kúpnej ceny
- udeliť permisiu na kúpené vozidlo (zamykanie, štartovanie) je inému hráčovi možné odovzdaním kľúčov
- opraviť poškodené časti vozidla dokáže mechanik v dielni, okrem toho vie vozidlo upravovať; montovanie komponentov či tuningu
- v dielni môže mechanik taktiež namontovať, alebo odmontovať bezpečnostný zámok či poistkovú skriňu niekoľkých stupňov
- v prípade fatálneho poškodenia vám vozidlo dokáže odtiahnuť do dielni mechanik
- s páčidlom sa môžete pokúsiť o prelomenie zámku vozidla a ukradnúť tak vozidlo naštartovaním cez "drátky"
Obr. 7 - Dielňa
Obr. 8 - Vlastné emergency lights
Dynamický house systém
- na serveri sa nachádza niečo cez 600 obývateľných domov, ktoré je možné zakúpiť
- domy sa delia na: rodinné domy, byty, luxusné byty, vily a karavany
- sú rozdelené podľa častí mesta; cena sa odvíja od koeficientu lukratívnosti danej štvrti
- v domoch je použitých približne 22 vlastných nezariadených interiérov
- interiér domu je možné zariadiť podľa svojich predstáv
- položený nábytok sa dá tiež pretextúrovať na ľubovolnú textúru z hry
- majiteľ domu môže nastaviť permisie na dom aj iným hráčom
Garáže
- ku každému domu je možnosť nechať si vytvoriť garáž
- garáž je uzamykateľná a obsahuje dve parkovacie miesta
Obr. 9 - Pickup domu
Obr 10 - Jeden z interiérov
Obr 11 - Garáž
Damage systém
- pokiaľ bude postava postrelená do ruky, začne sa vám pri mierení zbraňou kolísať obrazovka
- v prípade postrelenia do nohy, vaša postava nebude môcť šprintovať a ani skákať
- akonáhle zdravie vašej postavy klesne pod 20 percent, postava prejde do "wounded" fáze
- v tomto štádiu bude vaša postava ležať nehybne na zemi, pokiaľ jej nikto nepomôže, zomrie
- okolitý hráči si vedia príkazom zobraziť podrobnosti s informáciami o zraneniach
Obr. 12 - Mŕtva postava
MDC pre policajné zložky
- príslušníci SFPD majú v každom služobnom vozidle a na stanici dostupnú policajnú databázu
- momentálne obsahuje rôzne informácie z činnosti oddelenia a možnosť vyhľadávania osôb či vozidiel
- v časti spravovania osoby je prezatiaľ možné len spravovať licencie a prezrieť si adresy bydliska
Obr. 13 - Hlavná obrazovka
Obr. 14 - Dopyt po vyhľadanej osobe
Obr. 15 - Zoznam adries osoby
Obr. 16 - Dopyt po vozidle
Nový drug systém (už čoskoro na serveri)
- drogy sú zobrazované vo vlastnom interaktívnom inventári
- každá droga má po užití svoj okamžitý pozitívny efekt
- čím väčšia je kvalita danej drogy, tým je efekt výraznejší (napr. nárast HP)
- niektoré drogy je možné vyrobiť za pomoci kombinovania rôznych ingrediencii
- užívanie návykových drog môže mať však aj negatívny efekt (závislosť)
- zmierniť negatívne účinky dokáže EMS predpísaním vhodných liekov
Obr. 13 - Inventár drog
Obr. 14 - Drogy položené na zem
A mnoho ďalších... (priebežne budem aktualizovať veci, ktoré som neuviedol)
Ako sa pripojím?
Domovskou adresou našich webových stránok je sfb-rp.cz/main, kde máte k dispozícii registráciu, či cestu na fórum, alebo UCP.
Na fóre (board.sfb-rp.cz) nájdete všetky pravidlá serveru a zvyšné potrebné informácie k hraniu. Ak ste nováčik a nikdy ste nehrali roleplay nie je to absolútne žiadny problém, od toho máme náš ochotný Admin Team, ktorý vás s radosťou všetkému zaučí, tešíme sa na vás!
IP serveru: samp.sfb-rp.cz:7777
TS3 server: ts3.sfb-rp.cz- 3
- 3
-
Ukáž mi DOF2_File a DOF2_FileExists funkcie z includu, možno to crashuje niečo z toho.
-
Tvoj timer sa opakuje každú sekundu, nie minútu.
if(!(++NahratyCas[playerid] % 3600))
- 1
-
public OnPlayerConnect(playerid)
{
gTime[playerid] = 0; // Vyresetujeme hodnotu našej glob. premennej
// Predpokladám, že budeš mať v pláne nahratý čas aj ukladať a načítať (aby nestratil nahratý čas po odpojení)
return 1;
}
public OnGameModeInit()
{
SetTimer("Minute", 60000, true); // Opakujúci sa timer, ktorý sa bude vyvolávať v jedno minútovom intervale
return 1;
}
forward Minute();
public Minute()
{
for(new i, j = GetPlayerPoolSize(); i <= j; i++)
{
if(IsPlayerConnected(i) && !(++gTime[i] % 60)) //ID je pripojené a práve nahralo (ďalších) 60 minút
{// Ak máš nejaký login, tak by som k podmienkam vyššie pridal ešte kontrolu na prihláseného hráča
SendClientMessage(i, -1, "* Práve si nahral hodinu.");
}
}
} -
new
Text3D:label[MAX_PLAYERS] = {Text3D:INVALID_3DTEXT_ID, ...}
;
public OnPlayerDisconnect(playerid, reason)
{
if(label[playerid] != Text3D:INVALID_3DTEXT_ID)
{
Delete3DTextLabel(label[playerid]);
label[playerid] = Text3D:INVALID_3DTEXT_ID;
}
return 1;
}
CMD:label(playerid, params[])
{
if(params[0])
{//Podľa wiki môže okolitým hráčom spadnúť hra ak by bol text prázdny
if(label[playerid] != Text3D:INVALID_3DTEXT_ID)
{
Delete3DTextLabel(label[playerid]);
}
label[playerid] = Create3DTextLabel(params, -1, 0, 0, 0, 50.0, 0);
}
return 1;
}- 1
-
Či tabuľka existuje je väčšinou kontrolované na strane SQL, takže zakomentovanie by nemalo veľmi zmysel .
Ale môžeš vyskúšať vyhľadať cez editor text "CREATE TABLE" a možno niečo nájdeš, za pokus to stojí.
-
Áno, aj cez gamemód je možné pred pripraviť tabuľku do databáze cez SQL query, tvoj skript však tak neučinil, vzhľadom k erroru z priloženého logu.
Pokiaľ nemáš žiadnu zálohu aspoň štruktúry, v tomto prípade tabuľky jmeno-db.acc budeš ju musieť prvo vytvoriť.
-
Nájdi si riadok, v ktorom definuješ COA_UCP. Môžeš ho vymazať, alebo zakomentovať. Podľa toho kódu by ťa to potom malo pustiť do registrácie.
-
Jméno neveřejné funkce jsi v .amx rozhodně neviděl
Máš pravdu , moja chyba, je to public. Inak pre autora:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { if(newkeys & KEY_WALK) { if(!brigada[playerid]) { brigada[playerid] = 1; CallRemoteFunction("GivePlayerWeaponEx", "iii", playerid, 6, 1)); } else { SendClientMessage(playerid, -1, "Uz delas brigadu"); } return 1; } return 1; }
-
-
Skúšala si stiahnuť static verziu MySQL pluginu?
Avšak pokiaľ ten script využíva starší MySQL includ, budeš musieť skompilovať s tým novým, inak je dosť pravdepodobné, že ti to bude hádzať chyby.
-
V podstate sa to dá nazvať tou zvedavosťou. Ale mňa to maximálne znepokojuje, pretože sa snažím prísť na príčinu, prečo to tam nefunguje ako inde.
Teraz som to vyskúšal ešte cez switch a funguje to tiež normálne.
-
Práve, že plánujem, ale ma to dosť zaujalo , pretože keď som skúsil rovnakú vec vyvolať inde, napríklad OnPlayerSpawn, či dokonca main, funguje to normálne.
Zaujímavé, že keď si tú hodnotu vyprintujem pred tou podmienkou, tak to funguje tiež správne - else sa nevyvolá.else if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][39]) { printf("%i", MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_CACHE]); //Vyprintuje 1, čo je rovné MDC_LOOK_UP_CACHE_ESSENTIAL if(MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_CACHE] == MDC_LOOK_UP_CACHE_ESSENTIAL) { } else {//Toto je ten else MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_WIPE_CONTENT, _, MDC_ITEM_LOOK_UP, MDC_CONTENT_LICENSE); } return 1; }
-
Popis problému:
Mám podmienku if a hneď pod ňou else a problém nastáva v tom, že sa mi vyvolá vnútro else aj cez to, že je podmienka nad ním splnená. Akonáhle pridám do toho if bloku nejaký kód, funguje to normálne.
Chyby/varování kompilátoru a při běhu:
-
Kód:
[code=:0] public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid) { if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][6]) { MDC_Close(playerid, true); return 1; } else if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][8]) { MDC_Close(playerid); return 1; } else { for(new i; i < MDC_ITEM_SIZE; i++) { if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][i * 2 + 10]) { MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_WIPE_CONTENT, _, i, MDC_g_sPlayer[playerid][E_MDC_CONTENT][i]); return 1; } } switch(MDC_g_sPlayer[playerid][E_MDC_ITEM]) { case MDC_ITEM_LOOK_UP: { switch(MDC_g_sPlayer[playerid][E_MDC_CONTENT][MDC_g_sPlayer[playerid][E_MDC_ITEM]]) { case MDC_CONTENT_SEARCH: { if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][21] || playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][23]) { MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_METHOD] = MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_METHOD] == MDC_LOOK_UP_METHOD_PERSON ? MDC_LOOK_UP_METHOD_VEHICLE : MDC_LOOK_UP_METHOD_PERSON; MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_KEEP_CONTENT, _, MDC_ITEM_LOOK_UP, MDC_CONTENT_SEARCH, 29, 52); return 1; } else if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][24]) { if((MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_INPUT][0] == EOS && !MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_DATA_LOADED]) || (MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_INPUT][0] != EOS && MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_DATA_LOADED]) || (MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_CACHE] < MDC_LOOK_UP_CACHE_SYNTAX_ERROR)) { MDC_g_sPlayer[playerid][E_MDC_STATE] = MDC_STATE_SUSPENDED; CancelSelectTextDraw(playerid); if(MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_METHOD] == MDC_LOOK_UP_METHOD_PERSON) { ShowPlayerDialog(playerid, MDC_DIALOG_LOOK_UP_INPUT, DIALOG_STYLE_INPUT, "Insert data", "Who are you looking for?", "Search", "Close"); } else { ShowPlayerDialog(playerid, MDC_DIALOG_LOOK_UP_INPUT, DIALOG_STYLE_INPUT, "Insert data", "What plate are you looking for?\n\nFor plate, enter the plate number.\nFor vehicle ID, enter 'id:IDHERE', e.g. 'id:552'", "Search", "Close"); } } return 1; } else if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][28] && MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_CACHE] != MDC_LOOK_UP_CACHE_NONE && MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_CACHE] != MDC_LOOK_UP_CACHE_SYNTAX_ERROR) { new bool:refresh_possible ; if(MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_METHOD] == MDC_LOOK_UP_METHOD_PERSON) { if(MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_CACHE] == MDC_LOOK_UP_CACHE_VEHICLE) { refresh_possible = true; } } else { if(MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_CACHE] >= MDC_LOOK_UP_CACHE_ESSENTIAL && MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_CACHE] <= MDC_LOOK_UP_CACHE_ADRESS) { refresh_possible = true; } } if(refresh_possible) { MDC_LookUp(playerid, MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_METHOD], MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_INPUT]); } return 1; } else if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][35]) { MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_WIPE_CONTENT, _, MDC_ITEM_LOOK_UP, MDC_CONTENT_ADRESS); return 1; } else if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][37]) { if(MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_CACHE] == MDC_LOOK_UP_CACHE_ESSENTIAL) { MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_WIPE_CONTENT, _, MDC_ITEM_LOOK_UP, MDC_CONTENT_LICENSE); } else if(MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_CACHE] == MDC_LOOK_UP_CACHE_ADRESS) { MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_WIPE_CONTENT, _, MDC_ITEM_LOOK_UP, MDC_CONTENT_ADRESS); } return 1; } else if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][39]) { if(MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_CACHE] == MDC_LOOK_UP_CACHE_ESSENTIAL) { } else {//Toto je ten else printf("%i", MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_CACHE]); //Vyprintuje 1, čo je rovné MDC_LOOK_UP_CACHE_ESSENTIAL MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_WIPE_CONTENT, _, MDC_ITEM_LOOK_UP, MDC_CONTENT_LICENSE); } return 1; } else if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][48] || playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][54]) { if(!MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_RECORD_CHARGE_NUM]) { MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_RECORD_CHARGE_NUM] = MDC_LOOK_UP_RECORD_PER_PAGE_COUNT; } else { MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_RECORD_CHARGE_NUM] = MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_RECORD_CHARGE_NUM] - MDC_LOOK_UP_RECORD_PER_PAGE_COUNT - (MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_RECORD_CHARGE_NUM] % MDC_LOOK_UP_RECORD_PER_PAGE_COUNT); } MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_KEEP_CONTENT, _, MDC_ITEM_LOOK_UP, MDC_CONTENT_SEARCH, 29); return 1; } else if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][49] || playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][55]) { MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_RECORD_CHARGE_NUM] += MDC_LOOK_UP_RECORD_PER_PAGE_COUNT; MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_KEEP_CONTENT, _, MDC_ITEM_LOOK_UP, MDC_CONTENT_SEARCH, 29); return 1; } } case MDC_CONTENT_ADRESS: { if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][20]) { MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_WIPE_CONTENT, _, MDC_ITEM_LOOK_UP, MDC_CONTENT_SEARCH); return 1; } else if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][30]) { if(!MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_ADRESS_NUM]) { MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_ADRESS_NUM] = MDC_LOOK_UP_ADRESS_PER_PAGE_COUNT; } else { MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_ADRESS_NUM] = MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_ADRESS_NUM] - MDC_LOOK_UP_ADRESS_PER_PAGE_COUNT - (MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_ADRESS_NUM] % MDC_LOOK_UP_ADRESS_PER_PAGE_COUNT); } MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_KEEP_CONTENT, _, MDC_ITEM_LOOK_UP, MDC_CONTENT_ADRESS, 32, 33, 34); return 1; } else if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][31]) { MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_ADRESS_NUM] += MDC_LOOK_UP_ADRESS_PER_PAGE_COUNT; MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_KEEP_CONTENT, _, MDC_ITEM_LOOK_UP, MDC_CONTENT_ADRESS, 32, 33, 34); return 1; } for(new i; i < 3; i++) { if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][i * 2 + 25]) { MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_ADRESS_SELECTED] = MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_ADRESS_NUM] + i; if((MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_ADRESS_POS_X][MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_ADRESS_SELECTED]] >= 132.0 && MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_ADRESS_MAP]) || (MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_ADRESS_POS_X][MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_ADRESS_SELECTED]] < 132.0 && !MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_ADRESS_MAP])) { MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_KEEP_CONTENT, _, MDC_ITEM_LOOK_UP, MDC_CONTENT_ADRESS, 32, 33); } else { MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_KEEP_CONTENT, _, MDC_ITEM_LOOK_UP, MDC_CONTENT_ADRESS); } return 1; } } } case MDC_CONTENT_LICENSE: { if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][20]) { MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_WIPE_CONTENT, _, MDC_ITEM_LOOK_UP, MDC_CONTENT_SEARCH); return 1; } else if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][30]) { MDC_g_sPlayer[playerid][E_MDC_STATE] = MDC_STATE_SUSPENDED; CancelSelectTextDraw(playerid); strcpy(MDC_g_sPlayer[playerid][E_MDC_STRING_SECONDARY], "How many hours should 's license be suspended for?", MDC_STRING_SECONDARY_SIZE); strins(MDC_g_sPlayer[playerid][E_MDC_STRING_SECONDARY], MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_INPUT], 22, MDC_STRING_SECONDARY_SIZE); ShowPlayerDialog(playerid, MDC_DIALOG_LOOK_UP_LICENSE_SUSPEND, DIALOG_STYLE_INPUT, "Suspension", MDC_g_sPlayer[playerid][E_MDC_STRING_SECONDARY], "Suspend", "Cancel"); return 1; } else if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][32]) { if(MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_LICENSE_STATE][0] == 2) { MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_LICENSE_STATE][0] = 1; MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_KEEP_CONTENT, _, MDC_ITEM_LOOK_UP, MDC_CONTENT_LICENSE); } else { MDC_g_sPlayer[playerid][E_MDC_STATE] = MDC_STATE_SUSPENDED; CancelSelectTextDraw(playerid); strcpy(MDC_g_sPlayer[playerid][E_MDC_STRING_SECONDARY], "Are you sure you want to write a warning on 's driving license?", MDC_STRING_SECONDARY_SIZE); strins(MDC_g_sPlayer[playerid][E_MDC_STRING_SECONDARY], MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_INPUT], 44, MDC_STRING_SECONDARY_SIZE); ShowPlayerDialog(playerid, MDC_DIALOG_LOOK_UP_LICENSE_WARN, DIALOG_STYLE_MSGBOX, "Confirmation", MDC_g_sPlayer[playerid][E_MDC_STRING_SECONDARY], "Yes", "No"); } return 1; } } } } } } return 0; }[/code]
Dodatečné poznámky:
- Ten else je označený komentárom
-
Ak som pochopil správne, nebude jednoduchšie, keď si uložíš pozíciu toho miesta úplne naľavo, a keďže majú byť "vedľa seba", tak proste pripočítaš/odpočítaš k X Y o nejakú hodnotu podľa potreby aby bola medzi nimi medzera.
Napr.
new const Float:gRaceStart[3] = {X, Y, Z}, gRacersCount, gCurrentQueue ; //Keď sa pripojí na závod (spawneš ho) SetVehiclePos(jeho auto, gRaceStart[0] + (2.0 * gRacersCount), gRaceStart[1] + (1.5 * gCurrentQueue), gRaceStart[2]); gRacersCount++; if(!gRacersCount % 3) { gCurrentQueue++; //Keď sú traja vedľa seba, pripočítame aby sme vedeli, v ktorej sme rade. gRacersCount = 0; //Musíme vyresetovať, lebo inakšie by to nehádzalo spawn za prvé auto v rade pred }
A potom, si môžeš pridať nejakú kontrolu, aby sa začali radiť za sebou, keď napr budú 3 vedľa seba. //Tak som ti ju tam hodil
Celé si to však musíš prerobiť podľa potreby súradníc, pretože osi X, Y môže byť obrátene + možno musíš od osí odčitovať a nie pričitovať ako som to spravil (záleží ako máš orientovaný ten štart závodu).
-
V tom prípade:
new bool:g_bGatesOpened = true //True nastavené preto, lebo po načítaní módu chceš aby boli brány otvorené ; public OnGameModeInit() { //Tu si brány otvor manuálne SetTimer("GatesControl", 4 * 60 * 1000, false); return 1; } forward GatesControl(); public GatesControl() { if(g_bGatesOpened) { //Zvyšok kódu pre zatvorenie brán g_bGatesOpened = false; SetTimer("GatesControl", 5 * 60 * 1000, false); //O 5 minút sa otvoria } else { //Zvyšok kódu pre otvorenie brán g_bGatesOpened = true; SetTimer("GatesControl", 4 * 60 * 1000, false); //O 4 minúty sa zatvoria } }
- 1
-
Načo to robiť komplikovane? Ak chceš aby sa po každých 5 minútach zatvorili/otvorili brány, môžeš to urobiť aj takto.
Stačí ti jeden globálny timer so zapnutým opakovaním:
new bool:g_bGatesOpened ; SetTimer("GatesControl", 5 * 60 * 1000, true); forward GatesControl(); public GatesControl() { if(g_bGatesOpened) { g_bGatesOpened = false; //Zvyšok kódu pre zatvorenie brán } else { g_bGatesOpened = true; //Zvyšok kódu pre otvorenie brán } }
-
Nedá sa to len tak preformovať , y_ini má svoj kód napísaný a všetky svoje funkcie sú urobené tak aby vedeli prečítať/zapisovať podľa toho INI formátu súboru pomocou includu File.
Jediný spôsob, ako môžeš zistiť ako to funguje, pozri návod na SA:MP fóre:
-
Všimni si ako je upravený ten SetTimerEx a tiež deklarovanie tej funkcie (forward), ktorú timer vyvolá.
SetTimerEx vyvolá public "TeleportaceNaWarp" a parsne do neho (odošle) dva argumenty typu INT (i), playerid a warpid.
-
SetTimerEx("TeleportaceNaWarp", 5000, false, "ii", playerid, 0); //V príkaze /sf
SetTimerEx("TeleportaceNaWarp", 5000, false, "ii", playerid, 1); //V príkaze /lv
//Pre lepší prehľad si ich aj môžeš zadefinovať, napr #define PORT_SF (0)
forward TeleportaceNaWarp(playerid, warpid);
public TeleportaceNaWarp(playerid, warpid)
{
new
Float:pPosition[4]
;
GetPlayerPos(playerid, pPosition[0], pPosition[1], pPosition[2]);
if((Player_Pos[playerid][0] == pPosition[0]) && (Player_Pos[playerid][1] == pPosition[1]) && (Player_Pos[playerid][2] == pPosition[2]))
{
switch(warpid)
{
case 0: //Port do SF
{
SetPlayerPos(playerid, -381.1938, -1438.9968, 25.7266);
SendClientMessage(playerid, -1, "Byl jsi teleportovan do SF!");
}
case 1: //Port do LV
{
SetPlayerPos(playerid, XXX, XXX, XXX);
SendClientMessage(playerid, -1, "Byl jsi teleportovan do LV!");
}
}
}
else
{
SendClientMessage(playerid, -1, "Musíš stát na místě!");
}
}
kickovani ze serveru - "CONNECTION REJECTED": Unaccepted Nickname
v Herní (SA:MP, CS apod.)
Odesláno:
Podarilo sa ti reprodukovať chybu aj na základnom balíku SA:MP serveru bez cudzích úprav? Takto vylúčiš, že sa bude jednať o problém na úrovni scriptu.