Jump to content

Baseball

Uživatel
  • Příspěvků

    64
  • Registrován

  • Aktivní

  • Vítězných dnů

    1

Příspěvky posted by Baseball

  1. Actory

    Obtížnost: 2/5

     

    Osnova

    1. Úvod
    2. K čemu jsou Actory užitečné?
    3. Veškeré funkce actorů se stručným popisem a parametry
    4. Vytvoření actoru (code)
    5. Závěr

    1. Úvod

    Zdravím, koukal jsem, že tu chybí návod na práci s Actory. Není to nic obtížného, ale pro nováčky určitě užitečná věc. Actor je z angličtiny, znamená to Herec.

    Tato funkce byla přidána až do SAMP 0.3.7

     

    2. K čemu jsou actory užitečné?

    Actor je postava, která se nijak nepohybuje, narozdíl o NPC. Vypadají jako normální postavy hráčů. Mají klasické skiny (ID skinů) a hlavně nezabírají slot pro hráče. Ale mají i svoji chybu, pokud je actor v interiéru a hráč ním projde tak propadne v zemi.

    K čemu je použiji?

    Jako první mě napadá nějaká nabídka úkolu hráči, kdy se hráči zobrazí dialog. Nebo nějaký Dm, kdy tohoto actora musí trefit..  

     

    3. Veškeré funkce actorů se stručným popisem a parametry

    • CreateActor - vytvoří actora
    • DestroyActor - zničí actora
    • IsActorStreamedIn - zjistí, zda-li je actor viditelný pro hráče
    • SetActorVirtualWorld - nastaví virtual world acotra
    • GetActorVirtualWorld - zjistí virtual world acotra
    • ApplyActorAnimation - nastaví animaci
    • ClearActorAnimations - ukončí animaci
    • SetActorPos - nastaví pozici actora
    • GetActorPos - zjistí pozici actora
    • SetActorFacingAngle - nastaví rotaci actora - projeví se až po novém zobrazení actora
    • GetActorFacingAngle - zjistí rotaci actora
    • SetActorHealth - nastaví životy actora
    • GetActorHealth - zjistí životy actora
    • SetActorInvulnerable - ztranitelnost / nezranitelnost actora
    • IsActorInvulnerable - zjistí zranitelnost actora
    • IsValidActor - zjistí platnost ID acotra
    • GetActorPoolSize - zjistí nejvyšší ID actora vytvořeného na serveru

    Při práci s actory využíváme hlavně následující paramery

    • actorid - ID actora
    • modelid - ID skinu actora (ID skinů)
    • Float:X/Y/Z/Rotation - souřadnice X, Y, Z & Rotace

     

    4. Vytvoření actoru (code)

    Nejprve musíme uložit souřadnice na serveru. Buďto pomoci /save nebo /rs

    Cesta k souborům: C:\Users\Uživatel\Documents\GTA San Andreas User Files\SAMP

    Pokud jste užili /save: savedpositions.txt

    Pokud /rs: rawpositions.txt

     

    Nyní se rozhodnete, kdy chcete vytvořit actora. Dejme tomu že OnGameModeInit.

    new Ukazka1, Ukazka2; //abychom věděli ID actora pro další použití
    
    (...)
    
    public OnGameModeInit()
    {
    	Ukazka1 = CreateActor(4, 1234.1541,4321.1054,41.0150,31.1753); //(skin, X,Y,Z, ROTACE)
    	Ukazka2 = CreateActor(5, 41.0150,1234.1541,4321.1054,74.0468 ); //(skin, X,Y,Z, ROTACE)
      	SetActorHealth(Ukazka1, 50); //ID actora, životy
      	SetActorVirtualWorld(Ukazka2, 452); //ID actora, virtual world
    }

     

    Nyní nám actory stojí. Jeden ve VW 0 (global) s 50 životy a druhý ve VW 452 se 100 životy.

     

    Nyní si s actory můžete hrát do haleluja. Animace jsou úplně stejné jako u hráčů, až na to, že zeměníte playerid za actor ID a funkce se jmenuje do názvu funkce dáte actor.

     

    5. Závěr

    Myslím, že na základní práci a actory toto bohatě stačí, pokud by někdo chtěl vědět něco víc, doporučuji použít oficiální téma na SA-MP fóru (KLIK) nebo si najít jednotlivé funkce na SAMP wiki, ovšem většina těch funkcí je celkem jasná..

     

    • Děkuji (+1) 1
    • Líbí se mi to! (+1) 1
  2.  

    Skôr určite by sa mal použiť format().

    new data[size];
    format(data, sizeof size, "Admin Level : %s\nBanka : %i\nCash : %i", Admin[playerid], Banka[playerid], GetPlayerMoney(playerid));
    ShowPlayerDialog(playerid, dialogid, style, head, data, button, button);

    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.

  3. Popis problému:

    Zdravím,

    po dlouhé době jsem otevřel svůj starý mód a řekl si že přidám info (ten mod je fakt celkem blbovina spíš 4fun, než na použití). Na serveru se zobrazí první dva řádky, bez hodnoty..

     

    Chyby/varování kompilátoru a při běhu:

    Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase

     

    //tedy bez chyb / varování

     

    Kód:

     

    [code=auto:954]
    if(dialogid == 2)
    	{
    	    new info[1000], string[1000], jmeno[MAX_PLAYER_NAME];
         	GetPlayerName(playerid, jmeno, sizeof(jmeno));
            if(listitem == 0)
            {
                strcat(string, "Peníze banka: %d\n",Banka[playerid]);
                strcat(string, "Peníze v ruce: %d\n",GetPlayerMoney(playerid));
                strcat(string, "Administrační úroveň: %d\n",Admin[playerid]);
                format(info,sizeof(info),string);
                ShowPlayerDialog(playerid, 3, DIALOG_STYLE_MSGBOX, jmeno, info,"OK","");
    			//https://pawno.cz/topic/48115-player-info/
            }
    [/code] 

     

     

     

    Dodatečné poznámky:

    Děkuji za pomoc.

  4. Port systém

    :1: 

    Obsah

    Uložíme pozici 

    Dostaneme na ní hráče

    Port ON / OFF

    Napíšeme hlášku

     

    Úvod

    Tento návod je pro nováčky kteří chtějí do svého GM nebo FS /setport a /port pro hráče. Použijeme pouze základní funkce pawna.

     

    Vysvětlení

    Velice jednoduché a rychlé, budeme pracovat v OnPlayerCommandText. Ale nejprve dáme někam nahoru new Float:px,Float:py,Float:pz; do kterého se budou ukládat souřadnice na port.

    Teď jdeme k samotnému příkazu.

    if (strcmp("/setport", cmdtext, true, 7) == 0) jako u každého příkazu v OnPlayerCommandText. nyní udělám klasickou závorku kterou začíná příkaz {.

    Aby jsme měli přehledné tak na další řádek dáme if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,0xFFFFFFFF,"Nedostatečné oprávnění!"); díky tomu bude tato možnost jen pro administrátory. Vysvětlíme si podmínku if(!IsPlayerAdmin(playerid))

     

    if = > Pokud (z angličtiny)

    (! = > je(kdyby jsme nedaly ! tak pokud není)

    IsPlayerAdmin(playerid)) = > je / není hráč admin (Pouze RCON)

    return = > Pokud nesplňuje podmínku 

    SendClientMessage = > Odešle hráči zprávu

    (playerid => hráči který zadal příkaz

    0xFFFFFFFF = > barva (hex)

    ,"Nedostatečné oprávnění"); = > text který se mu odešle

     

    Nyní dáme samotné uložení pozice použijeme GetPlayerPos(playerid, px,py,pz); a teď si to vysvětlíme

     

    GetPlayerPos = > zjistíme pozici hráče

    (playerid = > hráče který zadal příkaz

    px,py,pz); = > a uložíme jí na tento text

     

    Celé to vypadat takto

    	if (strcmp("/setport", cmdtext, true, 7) == 0)
    	{
     		if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,0xFFFFFFff,"Nemáš dostatečný administrační level!");
    		GetPlayerPos(playerid, px,py,pz);
    		return 1;
    	}
    

    Teď je uložená pozice pro port.

    Ale Teď port zapneme.

     

    if (strcmp("/setporton", cmdtext, true, 9) == 0) příkazem /Setporton zapneme port

    dáme tam zase { na začátek příkazu. vzhledem k tomu že chceme aby to mohl udělat pouze admin dáme znovu podmínku if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,0xFFFFFFff,"Nemáš dostatečný administrační level!"); a teď pod to nastavím pro všechny že je port zapnut aby to udělalo pro všechny musíme to udělat takto:

    for(new i = 0; i < MAX_PLAYERS; i++) všichni hráči (z počtu na serveru) pod to dáme a pod ní dáme SetPVarInt(i, "adminport", 1); nastavím adminport na 1 (jako že zapnut)

     

    Celý příkaz bude vypadat takto

    if (strcmp("/setportOn", cmdtext, true, 10) == 0)
    	{
    	    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,0xFFFFFFff,"Nemáš dostatečný administrační level!");
    		for(new i = 0; i < MAX_PLAYERS; i++)
    		{
    	    	SetPVarInt(i, "adminport", 1);
    	        }
    		return 1;
    	}
    

    SetPVarInt(i, "adminport", 1); 

    Vysvětlíme:

     

    SetPVarInt = > něco nastavím (nějakou podmínku)

    i = > všem (pokud by jste chtěli jen pro sebe tak dáte třeba playerid)

    "adminport" = > pojmenujeme si funkci dle sebe. je to jedno

    1 = >nastavíme funkci na 1 (1 = zapnuto 0 = vypnuto)

     

    Zase uděláme příkaz if (strcmp("/port", cmdtext, true, 10) == 0) a zase zahájíme příkaz { teď dáme podmínku pokud je adminport zapnutý if(GetPVarInt(playerid, "adminport") == 1) return SendClientMessage(playerid,cervena,"[ ! ] {FFFFFF}Port je vypnutý!");

    Vysvětlíme:

     

    if = > pokud

    (GetOvarInt = > pokud je podmínka

    (playerid = > u hráče

    "adminport" podmínka s názvem adminport 

    ) == 1) = > pokud se rovná podmínka 1 

    retrun = > když né

    SendClientMessage = > odešle hráči zprávu

     

    Teď dáme pod podmínku a nastavíme pozici hráče na px,py,pz pomoci SetPlayerPos(playerid, px,py,pz); 

    Vysvětlíme:

     

    SetPlayerPos = > nastavíme hráči pozici

    (playerid = > hráči který zadal příkaz

    px,py,pz = > na pozici px, py, pz

     

    Teď co když bude hráč ve vozidle?  Portneme ho i s vozidlem takže nejprve uložíme ID vozidla do nějakého textu. new vozidlo_Port = GetPlayerVehicleID(playerid); 

    Vysvětlíme:

     

    GetPlayerVehicleID = > zjistíme ID vozidla ve kterém je hráč

    (playerid) = > hráče který zadal příkaz

     

    Teď dáme vozidlo na polohu portu SetVehiclePos(vozidlo_Port,px,py,pz);

    Vysvětlíme:

     

    SetVehiclePos = > dáme auto na pozici

    vozidlo_Port = > do vozidla s Id ve kterém seděl předtím

    px,py,pz = > na uložené souřadnice

     

    Teď aby to hráče po portu dalo do vozidla pomocí PutPlayerInVehicle(playerid, vozidlo_Port, 0);

    Vysvětlíme:

     

    PutPlayerInVehicle = > dá hráče do vozidle

    (playerid = > po tolikáte už není třeba vysvětlit

    vozidlo_Port = > do vozidla s Id ve kterém seděl předtím

    0 = > na sedadlo 0 (0 = řidič, 1 = spolujezdec, 2 = zadní sedadlo za řidičem, 3 = zadní sedadlo za spolujezdcem)

    if (strcmp("/port", cmdtext, true, 4) == 0)
    	{
    		if(GetPVarInt(playerid, "adminport") == 1) return SendClientMessage(playerid,cervena,"[ ! ] {FFFFFF}Port je vypnutý!");
    		{
    		    SetPlayerPos(playerid, px,py,pz);
    		    new vozidlo_Port=GetPlayerVehicleID(playerid);
    	        SetVehiclePos(vozidlo_Port,px,py,pz);
    	        PutPlayerInVehicle(playerid, vozidlo_Port, 0);
                    }
    		return 1;
    	}
    

    Teď uděláme jaště port off 

    Je to to samé jako /SetPortOn až na to že v  SetPVarInt(i, "adminport", 0); musíme dát 0 protože ho chceme vypnout.

    if (strcmp("/setportOff", cmdtext, true, 11) == 0)
    	{
    	    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,0xFFFFFFff,"Nemáš dostatečný administrační level!");
    		for(new i = 0; i < MAX_PLAYERS; i++)
    		{
    	    	SetPVarInt(i, "adminport", 0);
    	        }
    		return 1;
    	} 

    Myslím že zde není třeba nic vysvětlovat

     

    Příklady

    Tak teď celý kód

    newy

    new Float:px,Float:py,Float:pz;
    

    v příkazech

    if (strcmp("/setport", cmdtext, true, 10) == 4)
        {
            if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,0xFFFFFFff,"Nemáš dostatečný administrační level!");
            GetPlayerPos(playerid, px,py,pz);
            return 1;
        }
        if (strcmp("/setportOn", cmdtext, true, 10) == 0)
        {
         if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,0xFFFFFFff,"Nemáš dostatečný administrační level!");
            for(new i = 0; i < MAX_PLAYERS; i++)
            {
             SetPVarInt(i, "adminport", 1);
            }
            return 1;
        }
        if (strcmp("/port", cmdtext, true, 4) == 0)
        {
            if(GetPVarInt(playerid, "adminport") == 1) return SCM(playerid,cervena,"[ ! ] {FFFFFF}Port je vypnutý!");
            {
             SetPlayerPos(playerid, px,py,pz);
             new vozidlo_Port=GetPlayerVehicleID(playerid);
         SetVehiclePos(vozidlo_Port,px,py,pz);
         PutPlayerInVehicle(playerid, vozidlo_Port, 0);
         }
            return 1;
    
        {
         if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,0xFFFFFFff,"Nemáš dostatečný administrační level!");
            for(new i = 0; i < MAX_PLAYERS; i++)
            {
             SetPVarInt(i, "adminport", 0);
            }
            return 1;
        }  

    Závěr

    Doufám že jsem vám pomohl. Pokud najdete chybu napište :)

    Také doufám že jste jen nezkopírovali kód  :v:   :wave:

  5. Dobrý večer,

    snažil jsem se dát peníze hráči avšak to hází error.

    code:

    dcmd_gm(playerid,params[])
    {
    	if(!IsPlayerAdmin(playerid)) return SCM(playerid,cervena,"[ ! ] {FFFFFF}Nemáš dostatečná administrační práva!");
    	{
    		new id,peniz[20],duvod[50],string[200], gmna[MAX_PLAYER_NAME],gmnb[MAX_PLAYER_NAME];
    	        if(sscanf(params,"uuz",id,peniz,duvod)) return SCM(playerid,cervena,"[ ! ] {FFFFFF} Použí /gm [id] [částka] [důvod]");
    		GetPlayerName(playerid,gmna,sizeof(gmna));
    	  	GetPlayerName(id,gmnb,sizeof(gmnb));
    		GivePlayerMoney(id,peniz);
    		format(string,sizeof(string),"Administrátor {FFFFFF}%s {FF0000} dal hráči {FFFFFF}%s %d$ {FF0000}[ {FFFFFF}%s {FF0000}]  ",gmna,gmnb,peniz,duvod);
    		SendClientMessageToAll(cervena,string);//odosle spravu
    	}
     	return 1;
    }
    

    Chyba -

    error 035: argument type mismatch (argument 2)
    

    řádek s errorem

    GivePlayerMoney(id,peniz);
    

    Děkuji vám  :wave:

  6. Dobrý den,

    dnes jsem sputil můj mód na hostingu a hned po připojení to crashlo a tak dokola. 

     

    Když jsem to testoval na W serveru tak vše šlo. 

     

    Nějaký speciální kód když to jde na hosting snad není ne? 

     

    Jediné co tam možná dělá blbosti je 

    #if !defined isnull 
    #define isnull(%1) \ 
    ((!(%1[0])) || (((%1[0]) == '\1') && (!(%1[1])))) 
    #endfi
    

    ale kdyžtak nějakou náhradu za to.

     

    Děkuji

×
×
  • Create New...