GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => A témát indította: inhofd2002 - 2014. November 21. - 18:13:00

Cím: /skin [1-299] {Publikálom}
Írta: inhofd2002 - 2014. November 21. - 18:13:00
Sziasztok!Elkészítettem ezt az alap kis skin választót!

Használat:/skin [1-299]


Kicsit a filterscriptről:


-Includék:a_samp, ../include/gl_common.inc


-Sorok száma:1559


-Készítési idő:8 perc

Pwn: http://www.solidfiles.com/d/b2674ea54d/skin.pwn
Amx: http://www.solidfiles.com/d/fa6d55096a/skin.amx
Jó skinváltást!!
Cím: /skin [1-299] {Publikálom}
Írta: Flash - 2014. November 21. - 18:16:29
[gmod]Bővítést kérek. 24ó + data.hu helyett máshova töltsd fel a scriptet[/gmod]
nem akarlak megbántani de amit te 1560 sorba megoldottál azt meglehet 10 sorral is.
Cím: /skin [1-299] {Publikálom}
Írta: inhofd2002 - 2014. November 21. - 18:17:44
Bővítés alatt mit értesz?
Csak a link?
Cím: /skin [1-299] {Publikálom}
Írta: citromhun - 2014. November 21. - 18:18:49
Idézetet írta: inhofd2002 date=1416589980\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"51441\" data-ipsquote-contentclass=\"forums_Topic
-Sorok száma:1559
-Készítési idő:8 perc[/b]
 
Ez számomra egy kicsit gyanús, azért 1559 sort nem 8 perc alatt ír meg egy ember.
Cím: /skin [1-299] {Publikálom}
Írta: inhofd2002 - 2014. November 21. - 18:19:41
Copy,past és csak a számokat kellett cserélgetni :)
Cím: /skin [1-299] {Publikálom}
Írta: Flash - 2014. November 21. - 18:22:07
Olvasd el a szabályzatot!
Egyébként én így oldanám meg:
 
CMD:skin(playerid, params[]) {
if(!(-1 < strval(params) < 301)) return SendClientMessage(playerid, -1, \"Skin ID-k 0 - 300 között vannak.\");
if(isnull(params)) return SendClientMessage(playerid, -1, \"Csak szmáoakt írhatsz be.\");
SetPlayerSkin(playerid, strval(params));
return 1;
}

 
Vagy ilyesmi
Cím: /skin [1-299] {Publikálom}
Írta: inhofd2002 - 2014. November 21. - 18:24:35
Csak nem olyan régóta scriptelek.
Én így tudtam megoldani. :)
Cím: /skin [1-299] {Publikálom}
Írta: blackdog476 - 2014. November 21. - 18:40:13
Te atya úr isten..
Teljesen felesleges 1500 sort gyakorlatilag egyetlen egy parancsra használni.
A felesleges definiálásokról, és az OnGameModeInit használatáról nem is beszélve.
Az sscanf plugin képes szétválasztani a begépelt parancsot.
Így a paramétert lementheted egy változóba, és tulajdonképpen azzal dolgozhatsz. Ellenőrizheted hogy mit írt be, stb
De mivel csak egyetlen egy feldolgozandó paraméter van, nem szükséges az SSCANF használata, hanem simán ellenőrizhetjük az egész paramétersort amit begépelt a parancs után.
Ehhez pedig a ZCMD include segít, ami rettentő egyszerűvé teszi a paraméterfeldolgozást. A parancsnak szükséges megadni egy playerid változót amiben a parancsot begépelő játékos ID-jét fogja eltárolni, csakúgy mint az OnPlayerCommandText eljárás. Ez mellé még társulhat egy másik is, méghozzá a params[] amire szükség van jelen esetben - de ez nem kötelező - ebben pedig a parancs után beírtakat tárolja el, amit aztán majd az sscanf feldolgozna, de mint írtam, most nem kell.
Ez látható Flash scriptjében.
A te scriptedben egy parancsnak 4 sort is használsz. Mivel ha nem használsz nyitó- és záró tageket ( { } ) akkor a program alapból az azt követő egyetlen egy funkciót fogja végrehajtani, a többit nem.
Tehát még így is rövidebb, és működő lenne a scripted (példa):
 
    if(strcmp(cmdtext, \"/skin 0\", true) == 0) return SetPlayerSkin(playerid, 0);

 
Remélem nem hagytam ki semmit. :D
Cím: /skin [1-299] {Publikálom}
Írta: Flash - 2014. November 21. - 19:09:46
[gmod]Elfogadom.[/gmod]
Cím: /skin [1-299] {Publikálom}
Írta: Dani99 - 2014. December 30. - 13:02:37
Én ezt a megoldást egy kicsit egyszerűbbnek találom
 
#include <a_samp>
#define narancs 0xFF9933AA
#define piros 0xAA3333AA
#include <zcmd>
#include <sscanf>
new nev[MAX_PLAYER_NAME];
CMD:skin(playerid,params[])
{
if(IsPlayerConnected(playerid))
{
new skinid;
if(sscanf(params,\"i\",skinid)) return SendClientMessage(playerid,narancs,\"Így használd: /skin [itt add meg a skin ID-ét 0-tól 299-ig]\");
{
if(skinid < 300 && skinid >= 0)
{
GetPlayerName(playerid,nev,sizeof(nev));
SetPlayerSkin(playerid,skinid);
SendClientMessage(playerid,narancs,\"A skined sikeresen megváltozott!\");
}
else SendClientMessage(playerid,narancs,\"Skin ID-k csak 0-tól 299-ig vannak\");
}
}
else SendClientMessage(playerid,piros,\"Hiba a kapcsolatban!\");
return 1;
}

 
1500 sor? Felesleges pazarlás!
Cím: /skin [1-299] {Publikálom}
Írta: Zharko - 2014. December 30. - 15:03:40
Aztán most le kell ugatni szegény gyereket, mert próbál szkriptelni tanulni, illetve az első ilyen szkriptjét felrakta. :nuke:
A lényeg az lenne hogy elkészítette, és működik (már ha valóban működik). Aki nem akarja, szimpatikusabb neki a 10 soros, az azt használja, aki pl tanulni szeretne, gyakorolni elágazásokat, stb, az meg átnézi ezt.


Viszont igaza van a srácoknak abban, hogy ezekkel sokkal könnyebben boldogulsz, de ezeket el lehetne mondani normálisan is. Ajánlom az sscanf2-zcmd plugin párost, sokat fog segíteni, illetve munkád megkönnyíted vele. Példa szkript (most írtam gyorsan, nincs tesztelve):
 

// Ezt a módba/szkriptbe akárhova, a függvénykönyvtár-beágyazásokat (include) érdemes a többi mellé
#include <zcmd>
#include <sscanf2>
CMD:skin(playerid,params[])
{
    new Skin;
    if(sscanf(params, \"u\", Skin)) SendClientMessage(playerid, -1, \"Használat: /skin <0-299>\");
    else
    {
        if(Skin < 300 && Skin >= 0) SetPlayerSkin(playerid, Skin);
        else return 0;
    }
    return 1;
}

 


Up: Most olvastam végig Blackdog476 kommentjét, igaza van neki. Ő legalább képes volt normálisan elmagyarázni :)
Cím: /skin [1-299] {Publikálom}
Írta: Dani99 - 2014. December 31. - 20:46:02
Én is kezdő vagyok és tudom használni a zcmd-t és az sscanf-t. És egy 20 soros scriptet nem 1500 sorba oldom meg!