-
Příspěvků
64 -
Registrován
-
Aktivní
-
Vítězných dnů
1
Content Type
Profiles
Forums
Calendar
Gallery
SA-MP
Příspěvky posted by Baseball
-
-
Actory
Obtížnost: 2/5
Osnova
- Úvod
- K čemu jsou Actory užitečné?
- Veškeré funkce actorů se stručným popisem a parametry
- Vytvoření actoru (code)
- 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á..
- 1
- 1
-
Zdravím,
doporučuji udělat registraci podle tohohle tutorialu od ATomase
-
Okej dík. No já používám spíš TABLIST Headers, když už.
Každopádně moc děkuji!
-
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.
-
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.
-
Vím, že mi tu dal SpeedTest, ale myslel jsem konkrétní max. rychlost. Jinak těch 12MB/s se mi zamlouvá Momentálně mám max. 700kB/s
Hele ze steamu už jsem dlouho nic nestahoval. Až budu něco stahovat napíšu.
-
Fajn a co tenhle? Ten sem udělal dneska ráno, když mě napadlo jak by to mohlo vypadat.
Tenhle vypadá fakt luxusně
-
Ahoj,
jsem také z Prahy a mám poskytovatele CzNet. Když je plánovaná odstávka tak dají vědět spoustu dní dopředu, cena je přijatelná.
-
Ten dialog je až moc jednoduchý. Dobré jsou Radio systémy, které umožňují přepisování z souboru. Tohle není potřeba sem dávat, jelikož to dokáže skoro každý.
-
Fakaheda je ale celkem drahá, je dobrá hlavně na SA-Mp. Je tam dobrý ceník
-
Jejk, hned ho tam dám
Je to tam
-
Port systém
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
-
Jej, děkuji vám.
-
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
-
Toto se nedělá v C++ / C# ale v pawnu
-
Dej tam místo new string[30], str[256]; new string[10], str[256];. Je tam jen 10 písmen
-
Dobré dopoledne,
snažil jsem se najít text který by byl ve 2D. Např na billbord nebo na domy napsat. Nenašel jsem.
Pomůžete? Dík
-
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,0x00007777,"Tento príkaz je len pre RCON!");
Toto by mohlo šlapat
-
new name[MAX_PLAYER_NAME], file[256];
Nic víc nic míň
-
Já mám dini a nevidím tam jediný problém, mám to přes hosting
Podle mne Dof2 je zatěžující, mě to schazovalo server i když to bylo podle tut
-
Jestli chceš přes dini tak pro tebe něco mám, nechce se mi to sem dávat bez potřeby
-
Už to mám, ano ano složka s účty . Omlouvám se a dík
-
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
-
Zatím vypadá že šlape, po větším testu napíšu. Dík
Actory - nehybné postavy (0.3.7) [2/5]
v Herní (SA:MP, CS apod.)
Odesláno:
Díky, dodáno.