Gta San Andreas MultiPlayer (samp) HUN
Navigation
     
Account
Felhasználónév:

Jelszó:
SúgóSúgó
Regisztráció
Elfelejtettem a jelszót
     
Kép
Szerver
Legyen ennek a weboldalnak saját samp szervere?

Igen
Nem
Szavazás állása
Lezárt szavazások
     
Friss

Utolsó módosítás
2013 máj. 19.
12:17

 

     
Más weblapok
 SA:MP Fórum
SA:MP Wiki
Google

     

PAWN Eszközök
     
Paraméterek(sscanf és dcmd)

Hali
Most leírom nektek hogyan kell paraméteres parancsokat készíteni. (Pl.: /parancs [playerid] vagy /parancs [szöveg] stb.)

Ezeket a parancsokat strtokkal vagy sscanf-al lehet megoldani
Én az sscanfot és dcmd-t ajánlom mert pofon egyszerű

Először is a pawnoba be kell ezt illesztenünk
És ezt is (kb a mod elejére):

#define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1

Majd ezután egy új sorba írjuk

dcmd_heal(playerid, params[])
{
new giveplayerid; //ez lesz a másik játékos
if (sscanf(params, "u", giveplayerid)) SendClientMessage(playerid, 0xFF0000AA, "Használat: /heal [playerid]");
else if (giveplayerid == INVALID_PLAYER_ID) SendClientMessage(playerid, 0xFF0000AA, "Hiba: Nincs ilyen játékos!");
else{
new name[MAX_PLAYER_NAME],string[200];
GetPlayerName(playerid, name, sizeof(name));
format(string, sizeof string, "%s feltöltötte valakinek az életét", name);
   SendClientMessageToAll(0xFF0000AA,string);
                SetPlayerHealth(playerid, 100);
}
return 1;
}
 
Magyarázat: 
if (sscanf(params, "u", giveplayerid)) - A giveplayerid-t rátesszük az U betűre azaz egy játékosid-re
else if (giveplayerid == INVALID_PLAYER_ID) - Hogyha a másik játékos azaz a giveplayerid nem létezik

Ilyenkor most a giveplayerid lesz mindig a másik játékos és a playerid pedig az aki beírta a /heal parancsot

pl.: SendClientMessage(giveplayerid, szín, "Cső"); - Ilyenkor annak a játékosnak küldi el akinek beírtad a parancs után az id-jét
SendClientMessage(playerid, szin, "Küldtél valakinek egy Csá üzenetet"); - Ezt pedig annak a játékosnak írja ki aki beírta a parancsot

Pirossal kijelöltem az U betűt mert azt át lehet írni másra ha nem pont játékos id-t akarsz, hanem pélául egy számot vagy szöveget

Betűk/karakterek Adat típus Példa
d Egész szám Pénz
i Egész szám Pénz
c Karakter Egy karakter
u Játékos ID / Név Játékos
s Szöveg / karakterlánc  Bármilyen hosszúságú szöveg pl.: /elad [Üzenet]
h Hexa szám Szín
x Hexa szám Szín
f Float Koordináta
z Indok Például egy /ban vagy /kick parancsnál az indok
 

Ha megvagy akkor ezután az OnPlayerCommandText-hez rakd a return 0; -val egyvonalba rakjuk ezt

dcmd(heal, 4, cmdtext);

Az a piros négyes azt jelzi hogy a parancs 4 betűből áll
Tehát mondjuk egy REPORT parancssnál így nézne ki: dcmd(report, 6, cmdtext);
Mivel a "report" szó 6 betűből áll


És itt a végeredmény: KATT


Például egy PM-nél ([playerid] [üzenet])

dcmd_pm(playerid, params[])
{
new giveplayerid, mess[200]; //ez lesz a másik játékos
if (sscanf(params, "us", giveplayerid, mess)) SendClientMessage(playerid, 0xFF0000AA, "Használat: /pm [playerid] [üzenet]");
else if (giveplayerid == INVALID_PLAYER_ID) SendClientMessage(playerid, 0xFF0000AA, "Hiba: Nincs ilyen játékos!");
else{
new name[MAX_PLAYER_NAME],string[200];
GetPlayerName(playerid, name, sizeof(name));
format(string, sizeof string, "[PM]%s:%s", name, mess);
   SendClientMessage(giveplayerid, 0xFF0000AA,string);
   SendClientMessage(playerid, 0xFF0000AA, "PM elküldve!");
}
return 1;
}

És persze le ne felejtsük az onplayercommandtext-nél a:    dcmd(pm, 2, cmdtext);  -et
Magyarázat: 
 

US - Az U a játékos id, az S pedig a szöveg

Remélem segítettem ;)

Töltsd le a nagy példát itt

 

4 hozzászólás
Idézet
2011.03.16. 13:55
Maffia

Hello..Azt meglehet oldani hogy kiirja hogy kit healeztél fel???Előre is kösz

 

Idézet
2010.08.24. 21:53
ELEM

 Köszi a választ :D

Idézet
2010.08.24. 18:22
maarkmaki

 Rcon admin:

dcmd_heal(playerid, params[])

{
new giveplayerid; //ez lesz a másik játékos
if (sscanf(params, "u", giveplayerid)) SendClientMessage(playerid, 0xFF0000AA, "Használat: /heal [playerid]");
else if (giveplayerid == INVALID_PLAYER_ID) SendClientMessage(playerid, 0xFF0000AA, "Hiba: Nincs ilyen játékos!");
else{
                if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFF0000AA, "Nem vagy admin!");
new name[MAX_PLAYER_NAME],string[200];
GetPlayerName(playerid, name, sizeof(name));
format(string, sizeof string, "%s feltöltötte valakinek az életét", name);
   SendClientMessageToAll(0xFF0000AA,string);
}
return 1;
}
if(!IsPlayerAdmin(playerid)) - Ha NEM admin (Felkiáltójelet ne feledjétek)

Csak egy bizonyos gteam (Pl.: Van 2 csapat tegyük fel, TEAM_EGY, TEAM_KETTO)
És ezt akkor csak a TEAM_EGY használhatja

dcmd_heal(playerid, params[])
{
new giveplayerid; //ez lesz a másik játékos
if (sscanf(params, "u", giveplayerid)) SendClientMessage(playerid, 0xFF0000AA, "Használat: /heal [playerid]");
else if (giveplayerid == INVALID_PLAYER_ID) SendClientMessage(playerid, 0xFF0000AA, "Hiba: Nincs ilyen játékos!");
else{
                if(gTeam[playerid] != TEAM_EGY) return SendClientMessage(playerid, 0xFF0000AA, "Nem vagy a TEAM_EGY csapatban!");
new name[MAX_PLAYER_NAME],string[200];
GetPlayerName(playerid, name, sizeof(name));
format(string, sizeof string, "%s feltöltötte valakinek az életét", name);
   SendClientMessageToAll(0xFF0000AA,string);
}
return 1;
}

if(gTeam[playerid] != TEAM_EGY) - Hogy ha a játékos NEM a TEAM_EGY csapatban van

if(gTeam[playerid] == TEAM_EGY) - Hogy ha a jáékos a TeAM_EGY csapatban van
if(gTeam[playerid] == TEAM_EGY || gTeam[playerid] == TEAM_KETTO) - Hogyha a játékos a TEAM_EGY vagy a TEAM_KETTO csapatban van

Idézet
2010.08.24. 16:17
ELEM

 És olyat hogy lehet, hogy egy parancsot csak admin/gTeam tudja használni, pl a health...

     
Nézettség
Indulás: 2010-02-26
     
PAWN/Szkriptek
     
Tutorialok
     
Óra
     
Chat
Kérlek, felesleges dolgokat ne írj a chatbe!
Név:

Üzenet:
:)) :) :@ :? :(( :o :D ;) 8o 8p 8) 8| :( :'( ;D :$
     

Dryvit, hõszigetelés! Vállaljuk családi házak, nyaralók és egyéb épületek homlokzati szigetelését! 0630/583-3168 Hívjon!    *****    A legfrissebb hírek a Super Mario világából és a legteljesebb adatbázis a Mario játékokról.Folyamatosan bõvülõ tartalom.    *****    Gigágá! Márton napján is gyertek a Mesetárba! Nemcsak libát, de kacsát is kaptok! Játsszatok velünk!    *****    A Nintendo a Nintendo Music-kal megint valami kiváló dolgot hozott létre! Alaposan nagyító alá vettem, az eredmény itt.    *****    Leanderek, Parfümök, Olajok, és Szépségápolási termékek! Használd a LEVI10 kupont és kapj 10% kedvezményt!Megnyitottunk    *****    Megjelent a Nintendo saját gyártású órája, a Nintendo Sound Clock Alarmo! Ha kíváncsi vagy, mit tud, itt olvashatsz róla    *****    Megnyílt a webáruházunk! Parfümök, Szépségápolási termékek, Olajok mind egy helyen! Nyitási akciók, siess mert limitált!    *****    Az általam legjobbnak vélt sportanimék listája itt olvasható. Top 10 Sportanime az Anime Odyssey-n!    *****    Pont ITT Pont MOST! Pont NEKED! Már fejlesztés alatt is szebbnél szebb képek! Ha gondolod gyere less be!    *****    Megnyílt a webáruházunk! NYITÁSI AKCIÓK! Tusfürdõ+Fogkrém+Sampon+Izzadásgátló+multifunkcionális balzsam most csak 4.490!    *****    Új mese a Mesetárban! Téged is vár, gyere bátran!    *****    Veterán anime rajongók egyik kedvence a Vadmacska kommandó. Retrospektív cikket olvashatsz róla az Anime Odyssey blogban    *****    Parfümök, Olajok, Párologtatók mind egy weboldalon! Siess mert nyitási AKCIÓNK nem sokáig tart! Nagy kedvezmények várnak    *****    Dryvit, hõszigetelés! Vállaljuk családi házak, nyaralók és egyéb épületek homlokzati szigetelését! 0630/583-3168 Hívjon!    *****    Aki érdeklõdik a horoszkópja után, az nem kíváncsi, hanem intelligens. Rendeld meg most és én segítek az értelmezésben!    *****    A Múzsa, egy gruppi élményei a színfalak mögött + napi agymenések és bölcseletek    *****    KARATE OKTATÁS *** kicsiknek és nagyoknak *** Budapest I. II. XII.kerületekben +36 70 779-55-77    *****    Augusztus 26-án Kutyák Világnapja! Gyertek a Mesetárba, és ünnepeljétek kutyás színezõkkel! Vau-vau!    *****    A horoszkóp elemzésed utáni érdeklõdés, nem kíváncsiság hanem intelligencia. Rendeld meg és nem fogod megbánni. Katt!!!    *****    Cikksorozatba kezdtem a PlayStation történelmérõl. Miért indult nehezen a Sony karrierje a konzoliparban?