[Savjet] Početak skriptanja

Započeo xSpirit, Avgust 17, 2012, 02:36:05 PRE PODNE

prethodna tema - sledeća tema

0 članova i 3 gostiju pregledaju ovu temu.

Evo ovo je moj prvi tut, ne budite oštri :D

Znači svi smo mi bili jednom prvi puta na SAMPu i htjeli otvoriti svoj server, ali kada ste skinuli onaj "samp server" sa sa-mp stranice niste znali ništa. Uglavnom sada ću ovim drugim početnicima to probati što jednostavnije objasniti. Samo da vam na početku napomenem, ukoliko ne znate engleski, nemojte se niti truditi učiti skriptati...


Znači trebate skinuti sa official sa-mp stranice SA-MP 0.3e Windows Server. Kada extractate tu datoteku, dobiti ćete neke mape te još neke stvari. Otvorite server.cfg sa notepadom i dobiti ćete podatke koje morate promjeniti da biste naštimali svoj server:


echo Executing Server Config...
lanmode 0
rcon_password changeme
maxplayers 32
port 7777
hostname SA-MP 0.3 Server
gamemode0 grandlarc 1
filterscripts baseaf gl_actions gl_property gl_realtime gl_mapicon ls_elevator
announce 0
query 1
weburl www.sa-mp.com
onfoot_rate 40
incar_rate 40
weapon_rate 40
stream_distance 300.0
stream_rate 1000
maxnpc 0


Za početak promjenite Rcon_password u željenu rcon lozinku (više kasnije), hostname u željeno ime servera te gamemode u ime gamemoda kojeg ćete koristiti. To bi trebalo ispasti ovako:


echo Executing Server Config...
lanmode 0
rcon_password balkansamp
maxplayers 32
port 7777
hostname Moj Server
gamemode0 MyServer
filterscripts baseaf gl_actions gl_property gl_realtime gl_mapicon ls_elevator
announce 0
query 1
weburl www.sa-mp.com
onfoot_rate 40
incar_rate 40
weapon_rate 40
stream_distance 300.0
stream_rate 1000
maxnpc 0


Ostale stvari će te skužiti sami kasnije. Dakle idemo dalje... OtiÄ'ite u pawno folder te na aplikaciju pawno kliknite desnim klikom te run as administrator. Kliknite ctrl + n te će vam se otvoriti nova skripta. Izgledati će ovako:

// This is a comment
// uncomment the line below if you want to write a filterscript
//#define FILTERSCRIPT

#include <a_samp>

#if defined FILTERSCRIPT

public OnFilterScriptInit()
{
    print("\n--------------------------------------");
    print(" Blank Filterscript by your name here");
    print("--------------------------------------\n");
    return 1;
}

public OnFilterScriptExit()
{
    return 1;
}

#else

main()
{
    print("\n----------------------------------");
    print(" Blank Gamemode by your name here");
    print("----------------------------------\n");
}

#endif

public OnGameModeInit()
{
    // Don't use these lines if it's a filterscript
    SetGameModeText("Blank Script");
    AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
    return 1;
}

public OnGameModeExit()
{
    return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
    SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
    return 1;
}

public OnPlayerConnect(playerid)
{
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    return 1;
}

public OnPlayerSpawn(playerid)
{
    return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
    return 1;
}

public OnVehicleSpawn(vehicleid)
{
    return 1;
}

public OnVehicleDeath(vehicleid, killerid)
{
    return 1;
}

public OnPlayerText(playerid, text[])
{
    return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
    if (strcmp("/mycommand", cmdtext, true, 10) == 0)
    {
        // Do something here
        return 1;
    }
    return 0;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
    return 1;
}

public OnPlayerExitVehicle(playerid, vehicleid)
{
    return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
    return 1;
}

public OnPlayerEnterCheckpoint(playerid)
{
    return 1;
}

public OnPlayerLeaveCheckpoint(playerid)
{
    return 1;
}

public OnPlayerEnterRaceCheckpoint(playerid)
{
    return 1;
}

public OnPlayerLeaveRaceCheckpoint(playerid)
{
    return 1;
}

public OnRconCommand(cmd[])
{
    return 1;
}

public OnPlayerRequestSpawn(playerid)
{
    return 1;
}

public OnObjectMoved(objectid)
{
    return 1;
}

public OnPlayerObjectMoved(playerid, objectid)
{
    return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
    return 1;
}

public OnVehicleMod(playerid, vehicleid, componentid)
{
    return 1;
}

public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
    return 1;
}

public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
    return 1;
}

public OnPlayerSelectedMenuRow(playerid, row)
{
    return 1;
}

public OnPlayerExitedMenu(playerid)
{
    return 1;
}

public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
    return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    return 1;
}

public OnRconLoginAttempt(ip[], password[], success)
{
    return 1;
}

public OnPlayerUpdate(playerid)
{
    return 1;
}

public OnPlayerStreamIn(playerid, forplayerid)
{
    return 1;
}

public OnPlayerStreamOut(playerid, forplayerid)
{
    return 1;
}

public OnVehicleStreamIn(vehicleid, forplayerid)
{
    return 1;
}

public OnVehicleStreamOut(vehicleid, forplayerid)
{
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    return 1;


UpiÅ¡ite F5 i odaberite ime gamemoda koje ste predhodno upisali. Klikom na F5 compilate mod u .amx file koji vam je potreban za pokretanje servera (ne treba uopće .pwn file kao Å¡to mnogi misle da je potreban). Sada možete pokrenuti kućni server klikom na samp-server. Otvoriti će vam se neki crni prozor te će pisati u njemu neÅ¡to. Njega nemojte gasiti te otiÄ'ite u svoj samp client te u port stavite :7777 (točno tako) i možete ući u svoj server (naravno neće imati komandi nikakvih ali ćete ih lako kasnije dodati)...

Prve 3 linije možete obrisati i staviti neÅ¡to svoje. Sve Å¡to se nalazi iza // je komentar te on ne utječe na skriptu. TakoÄ'er možete staviti tekst izmeÄ'u /* i */ Å¡to je korisno kada trebate recimo samo na neko vrijeme ukloniti neku mapu iz moda ali predugo traje da na svaki red upisujete //.
Umjesto ta 3 reda stavite npr ovo:


/*--------------------------------------------------------------------------------
---------------------------------Moj prvi gamemod--------------------------
--------------------------------Verzija: v.0.1---------------------------------
--------------------Skripter i maper: xSpirit--------------------------------
---------------------------------------------------------------------------------*/


Sada namjestite spawn. U kodu naÄ'ite ovo:

public OnGameModeInit()

{
    // Don't use these lines if it's a filterscript
    SetGameModeText("Blank Script");
    AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
    return 1;
}


Ovaj SetGameModeText je mod servera kojeg možete vidjeti na sa-mp clientu.
AddPlayerClass daje serveru spawn informacije tj. više o njemu možete vidjeti ovdje.

Idemo dalje...
Mnogi početnici grješe u korištenju strcmpa za komande te ga koriste umjesto jednostavnijeg ZCMD-a, ali evo u strcmpu ću raditi sada... Prvu komandu koju napravite je /help i samim time zadate sebi neke komande koje trebate dalje raditi.
U gamemodu naÄ'ite "public OnPlayerCommandText" te ćete dobiti ovo:

public OnPlayerCommandText(playerid, cmdtext[])
{
    if (strcmp("/mycommand", cmdtext, true, 10) == 0)
    {
        // Do something here
        return 1;
    }
    return 0;
}


Umjesto /mycommand stavite ime svoje komande, u ovom slučaju /help. Izbrišite ovaj ispod dio te stavite ovako (ispod objašnjenje svega):

    if (strcmp("/help", cmdtext, true, 5) == 0)
    {
SendClientMessage(playerid,0xFFFFFF,"|-------------KOMANDE NA SERVERU------------------|");
SendClientMessage(playerid,0xFFFFFF,"/admins, /gamemasters, /attempt, /me, /do, /s, /c");
SendClientMessage(playerid,0xFFFFFF,"/w, /new, /report, /animations, /levelup");
SendClientMessage(playerid,0xFFFFFF,"|---------------------------------------------------|");
        }
    return 1;
}


Znači SendClientMessage znači da ovome igraču koji je upisao /help šalje poruku. Playerid označava kojem igraču šaljete poruku (playerid označava onoga koji je upisao komandu), a ovo 0xFFFFFF označava boju. Boje su iste kao i HTML boje samo što umjesto # stavljate 0x.

Sada znate osnove skriptanja, ono najosnovnije. Sada preporučam da uzmete jedan gamemod i pregledate njegove funkcije, komande itd. Možda vam na početku neće biti jasno ali pregledajte malo bolje, upoznajte se sa "kompjuterskom logikom" itd. Kada mislite da ste naučili neÅ¡to (nakon 2 tjedna do mjesec dana), probajte napraviti svoju dm skriptu. Za početak niÅ¡ta osobito, reg/log sistem u dialogu, osnovne komande, admin i vip sistem. Malo vježbajte na tom DM modu te kada ga zavrÅ¡ite (ako ste zaljubljenik u RP) možete prjeći na RP skripte. Napravite slično kao i sa DM skriptom, samo u RP stilu sve radite. Mnogi u početku skriptanja grjeÅ¡e, traže tutoriale na netu, ali samo prekopiraju i niÅ¡ta ne pročitaju. Barem pročitajte a ako želite baÅ¡ razumjeti ono Å¡to čitate preporučam da pregledate samp wiki stranicu: http://wiki.sa-mp.com/wiki/Main_Page . Tu ćete naću razne callbackove, funkcije, pa čak i neke tutoriale, koji će vam vjerovatno viÅ¡e objasniti nego ovi drugi sa interneta. Ukoliko vam doÄ'e 10ak errora kod compilanja, nemojte odustati... pogledajte na internetu dalje kako su drugi rjeÅ¡avali takve stvari i rjeÅ¡iti će te. Ukoliko ste baÅ¡ zabrljali, onda izbriÅ¡iti ono Å¡ta ste zadnje radili i probajte ispočetka na drugačiji način.

Eto nadam se da sam bar jednom skripteru pomogao (ako ima još neki ovakav tutoral, ispričavam se ali nisam vidio.. ovo sam sve sam sada pisao)...
Ukoliko imate prijedlog, primjedbu recite u odgovoru i urediti ću.
Poslednja Izmena: Avgust 18, 2012, 10:23:21 PRE PODNE od [OL]×Spirit

Respect: Svim moderatorima razgovora u vezi pawn skriptanja koji rade ljudima modove od 0

Citat: ...Р৸illipS... poslato Avgust 17, 2012, 10:11:02 PRE PODNE
Dobro,razumem ja tvoj trud i sve ali strcmp na mod od 0  ??? Nikako,ili zmcd ili ycmd !

ma znam ja to nego su svi na početku tvrdoglavi pa idu na strcmp... Kad se vratim kući (sutra) editat ću i stavit zcmd uz ovo...

Respect: Svim moderatorima razgovora u vezi pawn skriptanja koji rade ljudima modove od 0

Lijepo ti je ovo, a na strcmp sam napravio 2 moda od nule i svi su uspjeli nisu imali warninga ni errora niti je crashao server, jest jednom slucajno je zastario sistem komandi, pa sam to prebacio na fs :D

Data64.dll | HTML & CSS | DEVELOPER





Citat: Data64.dll poslato Avgust 17, 2012, 12:08:09 POSLE PODNE
Lijepo ti je ovo, a na strcmp sam napravio 2 moda od nule i svi su uspjeli nisu imali warninga ni errora niti je crashao server, jest jednom slucajno je zastario sistem komandi, pa sam to prebacio na fs :D

To je jako neoptimizovan mod.

@Autor - Odlican tut,mozes svaki dan da dodas po nesto,nego od pogresnog dela si krenuo,trebao si prvo chat,pa /me ,/b komande....

zcmd bi trebalo za pocetak.. lijep tutorial 7/10


Dobar tut ja sam sam pocetnik i ja se ne razumijem u to include zmcd dini i to nego sam cuo od nekih skriptera da je zcmd najbolji pa radim na zmcd,a imam i dini i YSI i ima li dje tutove za ovo da naucim nesto o ovim includama?

Napoli-Best team in the world.


Napoli-Best fans in the world.

Citat: Data64.dll poslato Avgust 17, 2012, 12:08:09 POSLE PODNE
Lijepo ti je ovo, a na strcmp sam napravio 2 moda od nule i svi su uspjeli nisu imali warninga ni errora niti je crashao server, jest jednom slucajno je zastario sistem komandi, pa sam to prebacio na fs :D

nevalja strcmp.. ovo sam stavio kao što sam rekao samo radi toga što su početnici tvrdoglavi pa koriste strcmp (priznajem jesam i ja, al nakon što sam probao zcmd nisam koristio strcmp uopće xD

Jednom prilikom sam negdje pročitao da su na početku moda ZCMD i YCMD jednaki, možda je samo malo ZCMD brži, ali Å¡to server ima viÅ¡e komandi, to se YCMD viÅ¡e isplati (meÄ'utim teži je a ja se držim svejedno ZCMDa xD)

btw. ovo sam napravio čisto zbog ove teme jer ovi neki početnici u sampu traže skriptera za server a nemaju ni 0 postova pa kao nude vlasnika...Mislim 1 ili 2 su čovika u ciloj temi ponudila kao novac za nagradu... Pa neka ljudi nauče bar osnove pa naprave jednostavan mod ili nešto a ne ovako tražit skriptera ili navodno editan mod (a editano ime samo) pa radit server i davat milijune na početku...
Poslednja Izmena: Avgust 17, 2012, 20:42:58 POSLE PODNE od [OL]×Spirit

Respect: Svim moderatorima razgovora u vezi pawn skriptanja koji rade ljudima modove od 0

Mrzim kad pričaju o optimizaciji i misle da se to rješava korištenjem ZCMD-a !!!

OT:
Pohvala za trud.  :)
Ima par greÅ¡aka al ću ti navest samo jednu.   ;D
if (strcmp("/help", cmdtext, true, 10) == 0)
bi išlo ovako
if (strcmp("/help", cmdtext, true, 5) == 0)
ili
if(!strcmp(cmdtext, "/help", true, 5))

Citat: K4[Я]!K3â,,¢ poslato Avgust 17, 2012, 20:46:24 POSLE PODNE
Mrzim kad pričaju o optimizaciji i misle da se to rješava korištenjem ZCMD-a !!!

OT:
Pohvala za trud.  :)
Ima par greÅ¡aka al ću ti navest samo jednu.   ;D
if (strcmp("/help", cmdtext, true, 10) == 0)
bi išlo ovako
if (strcmp("/help", cmdtext, true, 5) == 0)
ili
if(!strcmp(cmdtext, "/help", true, 5))

e hvala, ispravio sam... zaboravim da treba taj broj minjat, kako ne koristim srcmp xD

Respect: Svim moderatorima razgovora u vezi pawn skriptanja koji rade ljudima modove od 0


Dobar tutorijal ovo mi je prva komanda da sam uspio napravit :D
Hvala na pomoci.