Peršokti į turinį
  • ŽAIDIMAI
  • , ŽAIDIMAI
  • ŽAIDIMAI

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 5125 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

Sveiki. Parodysiu pamoką, kaip susikurti darbą su direktoriaus pakvietimų, paaiškinti stengsiuos kiekvieną funkciją. Taigi pradėkim.

Pirmiausia Jums reikės susikurti pickup'ą, ant kurio užlipus įvyks kažkokia tai funkcija (priims į darbą, pareikalaus ko nors ar pan.).

Einame į žaidimą, ir norimoje vietoje užėję parašom:

/save Darbas

Dabar mums reikės kordinačių, jos dažniausiai yra:

C:\Documents and Settings\Vitalijus\My Documents\GTA San Andreas User Files\SAMP

O jeigu ten nėra, įsijunkite paiešką (search) per start meniu ir įrašykite: savedpositions.txt

Šiame faile bus kordinates, pvz.:

AddPlayerClass(78,-2032.2585,-60.8746,35.3203,2.1399,0,0,0,0,0,0); // darbas

Mums reikės šių kordinačių (pažymėta žalia spalva).

Dabar sukursime pickup'ą. Atsidarome failą:

gamemodes/data/pickups.txt

Po

enum pdata{

Rašome:

darbas, // tai bus pickup'o pavadinimas. Kai kursime funkcijas, nemes error dėl žodžio darbas, kad jo neatpažįsta

Toliau po:

stock LoadPickups()
{

Rašome:

pickups[0][darbas]=CreatePickupA(1275 ,2, -2032.2585,-60.8746,35.3203); // sukuria mūsų darbo pickup'ą

Išsaugome failą ir jį uždarome.

Toliau einame gamemodes/***.pwn (pvz.: band7).

Susirandame callback'ą:

public OnPlayerPickUpPickup(playerid, pickupid)
{

Ir rašome tokį kodą:

//=================================Užlipimas ant pickup'o
if(pickupid == pickups[0][darbas]) // tikrina, ant kokio pickup'o užlipote
{
if(playerDB[playerid][specialybe]==specialybėsID) // Tikrina, ar žaidėjas jau dirba šiame darbe
{
if(playerDB[playerid][uniformd]) // Tikrina, ar žaidėjas su darbo uniformą
{
SendClientMessage(playerid,COLOR_WHITE," Jūsų tekstas."); // Parašo tekstą, kad turi nusivilkti uniformą
return 1; // baigia funkciją
}

SendClientMessage(playerid,COLOR_WHITE," Jūsų tekstas."); // Parašo tekstą, kad palikote darbą
playerDB[playerid][specialybe]=0; // Nustato specialybę
}else if(playerDB[playerid][specialybe]==0){ // Tikrina, ar žaidėjas nedirba niekur

if(GetPlayerScore(playerid){
SendClientMessage(playerid,COLOR_WHITE," Jūsų tekstas."); // Parašo tekstą, kad turi per mažai patirties taškų (xp)
return 1; // baigia funkciją
}

// Sekančio script'o gali ir nebūti
if(playerDB[playerid][lytis]!=1) // Tikrina, ar lytis nėra merginos
{
SendClientMessage(playerid,COLOR_WHITE," Merginos šio darbo dirbti negali."); // Parašo tekstą, kad darbą gali dirbti tik vyrai
return 1; // baigia funkciją
}

// Sekančio script'o gali ir nebūti
if(!playerDB[playerid][teises]) // Tikrina, ar turi teises
{
SendClientMessage(playerid,COLOR_WHITE," Jūsu tekstas."); // Parašo tekstą, kad reikia turėti teises
return 1; // baigia funkciją
}

if(!playerDB[playerid][leanvited][isDarboIDAtimkite1IrIrasykiteSkaiciu]) // Tikrina, ar žaidėjas turi šio darbo pakvietimą
{
SendClientMessage(playerid,COLOR_WHITE," Jūsų tekstas."); // Parašo tekstą
return 1; // Baigia funkciją
}

SendClientMessage(playerid,COLOR_WHITE," Jūsu tekstas."); // Viskas atitinka, parašo, kad įsidarbino
SetPlayerSkin(playerid,skinoID); // Nustato žaidėjo skin'ą (t.y. pakeičia rubūs)
playerDB[playerid][uniforma]=skinoID; // Nustato žaidėjo uniformos id
playerDB[playerid][specialybe]=specialybėsID; // Nustato specialybę
playerDB[playerid][uniformd]=true; // Pagal šią funkcija tikrina, ar žaidėjas turi uniformą ar ne, bet gali tikrinti ir pagal uniformos id
}else{ // Jei viskas atitinka, tai patikrina, ar žaidėjas nedirba kitur
SendClientMessage(playerid,COLOR_WHITE," Jūsu tekstas."); // Parašo tekstą, kad žaidėjas turi palikti senąjį darbą.
}
return 1; // baigia funkciją
}
//=================================Pabaiga

Štai darbo pickup'as sukurtas. Dabar sukursim, kad būtų direktorius.

Atsidarome: gamemodes/data/playerDB.txt ir pačiam viršuj rašome:

#define LEAD_DARBAS DarboID

Paskui atsidarome: gamemodes/data/function.txt ir po:

stock GetJobFromFaction(faction)
{

Įrašome:

else if(faction == LEAD_DARBAS) return DarboID;

Uždarome ir abu failus būtinai išsaugome.

Toliau atsidarome: gamemodes/***.pwn failą. Susirandame komandą:

if(!strcmp(cmdtext, "/priimt",true,7))
{

Ir po (pvz.):

if(playerDB[playerid][plead] == LEAD_FARAI) SendClientMessage(id,COLOR_GREEN," Jūs kviečiamas dirbti policijoje.");

Rašome:

else if(playerDB[playerid][plead] == LEAD_DARBAS) SendClientMessage(id,COLOR_GREEN," Jūs kviečiamas dirbti darbe.");  // Tikrina, kurio darbo direktorius kviečia dirbti žaidėją ir parašo tekstą

Susirandame komandą:

if(!strcmp(cmdtext, "/ismest",true,7))
{

Ir po (pvz.):

if(playerDB[playerid][plead] == LEAD_FARAI) SendClientMessage(id,RED," Jūs išmestas iš policijos.");

Rašome:

else if(playerDB[playerid][plead] == LEAD_DARBAS) SendClientMessage(id,RED," Jūs išmestas iš darbo."); // Tikrina, kurio darbo direktorius išmeta žaidėją iš darbo ir parašo tekstą

Taigi su pakvietimais ir išmetimais baigėme.

Dabar kursime darbo mašinas. Einame į žaidimą, kiekvienoje vietoje, kurioje norite, kad stovėtų mašinos, rašome /save masina

Išsaugoję visas norimas mašinas, atsidarykite vėl tą patį failą: savedpositions.txt

Ten rasite tas pačias kordinates kaip ir pickup'o, tik gale bus parašyta // masina.

Mums reikės šių kordinačių (pažymėta žalia spalva):

AddPlayerClass(78,-2032.2585,-60.8746,35.3203,2.1399,0,0,0,0,0,0); // masina

Dabar einame: gamemodes/data/vehicles.txt

Po:

stock LoadVehicles(){

Rašome informaciją, kuri išsaugota savedpositions.txt faile (Aš turiu 3 mašinas):

AddPlayerClass(78,-2032.2585,-60.8746,35.3203,2.1399,0,0,0,0,0,0); // masina
AddPlayerClass(78,-2032.2585,-60.8746,35.3203,2.1399,0,0,0,0,0,0); // masina
AddPlayerClass(78,-2032.2585,-60.8746,35.3203,2.1399,0,0,0,0,0,0); // masina

Dabar kursime mašinas.

78 - tai mašinos modelio id. ID galite rasti: http://wiki.sa-mp.com/wiki/Vehicle_Model_ID_List

-2032.2585,-60.8746,35.3203,2.1399 - mašinos kordinates

0,0,0,0,0,0 - Mašinos spalva. Spalvas galite rasti: http://wiki.sa-mp.com/wiki/Color_ID . Būtinai po kordinačių, turi būti 2 spalvų skaičiai (kad ir vienodi).

Dabar turime padaryti taip (Mano mašinos modelis bus 400, spalva juoda):

Vehicle(400,-2032.2585,-60.8746,35.3203,2.1399,0,0); // masina
Vehicle(400,-2032.2585,-60.8746,35.3203,2.1399,0,0); // masina
Vehicle(400,-2032.2585,-60.8746,35.3203,2.1399,0,0); // masina

Štai mašinos jau sukurtos. Dabar padarysime, kad leistų įlipti į mašiną tik šio darbo darbuotojams(GUI Pagrindu).

Atsidarome: gamemodes/***.pwn failą.

Susirandame callback'ą:

public OnPlayerStateChange(playerid, newstate, oldstate)

Ir po juo rašome:

//--------------------------------------Darbo mašinos
new model = GetVehicleModel(vehicleid);
new spec = playerDB[playerid][specialybe];

if(model == MašinosID) // tikrina, kokioje mašinoje sėdi žaidėjas
{
if(spec != SpecialybėsID) // tikrina, ar žaidėjas dirba darbe, kuriam priklauso šis automobilis
{
ShowPlayerDialog(playerid,5555,DIALOG_STYLE_MSGBOX,"Darbas","Jūs nedirbate darbe","Gerai","Išeiti"); // jei nedirba, parašo tekstą
RemovePlayerFromVehicle(playerid); // išmeta žaidėją iš mašinos
return 1; // baigia funkciją
}
if(!playerDB[playerid][uniformd]) // tikrina, ar žaidėjui skirta uniforma, kai jis darbinosi
{
ShowPlayerDialog(playerid,5555,DIALOG_STYLE_MSGBOX,"Darbas","Turite būti su uniformą","Gerai","Išeiti"); // jei nepriskirta, parašo tekstą
RemovePlayerFromVehicle(playerid); // išmeta žaidėją iš mašinos
return 1; // baigia funkciją
}
ShowPlayerDialog(playerid,5555,DIALOG_STYLE_MSGBOX,"Darbas","Jūsų darbas: Jūsų tekstas\nJūs uždirbsite darbopinigaiLT/min.","Gerai","Išeiti"); // jei viskas atitinka, parašo jūsų tekstą
return 1; // baigia funkciją
}

Štai dabar į mašiną galės įlipti tik darbuotojai.

Dabar nustatysime, kiek uždirbs darbuotojas. Susirandame:

if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return;

Po juo turėtų būti surašytą kitų darbų darbuotojų uždirbami pinigai, tai po (pvz.):

if((model == 598 && playerDB[playerid][specialybe] == 1) pelnas[0]+=100;// farai

Rašome:

else if((model == mašinosID && playerDB[playerid][specialybe] == SpecialybėsID) pelnas[isDarboIDAtimkite1IrIrasykiteSkaiciu]+=uždirbamižaidėjopinigaipelnui;// tikrina, ar žaidėjas šio darbo mašinoje ir ar žaidėjo specialybė atitinka darbo specialybę, jei taip, skiria pinigus pelnui per minutę

Dabar žaidėjas gaus ir pinigus važinėdamasis su mašina.

DĖMESIO!

DarboID, mašinosID, LEAD_DARBAS, uždirbamipinigai ir kita visur turi būti vienoda!!

Kai kurie norėsite tikriausiai, kad pas Jus darbe būtų raciją. Na parodysiu kaip reikia padaryti tai. Atsidarome: gamemodes/data/functions.txt failą. Po šio script'o:

stock Boolint(number)
{
if(number>0) return true;
return false;
}

Rašome:

stock SendMessageToDarbininkai(color,text[])
{
for(new i=0; i{
if(IsPlayerConnected(i))
{
if(playerDB[i][specialybe]==SpecialybėsID)
{
SendClientMessage(i,color,text);
}
}
}
}

Uždarome jį ir išsaugome. Dabar atsidarome gamemodes/***.pwn failą. Susirandame komandą:

if(!strcmp(cmdtext, "/r", true,2))
{

Ir po (pvz.):

if(spc == 1) SendMessageToFarai(COLOR_WHITE,msg);

Rašome:

else if(spc == SpecialybėsID) SendMessageToDarbininkai(COLOR_WHITE,msg); // tikrina, kokiam darbe dirba žaidėjas ir siunčia žaidėjo parašytą tekstą

Štai ir viskas. Pamoka baigta.

Jei norėsite kitur platinti pamoką, parašykite kreditus!

  • Teigiamai 1

Rašome:
Kodas:
else if((model == mašinosID && playerDB[playerid][specialybe] == SpecialybėsID) pelnas[isDarboIDAtimkite1IrIrasykiteSkaiciu]+=uždirbamižaidėjopinigaipelnui;// tikrina, ar žaidėjas šio darbo mašinoje ir ar žaidėjo specialybė atitinka darbo specialybę, jei taip, skiria pinigus pelnui per minutę

Sitas man kaskas neaisku, kaip ten ta skaiciu viena atimt, nu parasyk dar su pavizdziu. ir gal gali padaryti dar viena skripta, kad pinigai eitu ne i pelna o i alga pas mane yra /alga ir rodo kiek uzdirbai, tai taip man reiktu, dekui

else if((model == mašinosID && playerDB[playerid][specialybe] == SpecialybėsID) pelnas[isDarboIDAtimkite1IrIrasykiteSkaiciu]+=uždirbamižaidėjopinigaipelnui;

DarboID - eini playerDB.txt failą, ten yra pvz. parašyta: LEAD_FARAI 1

tai iš to 1 atimk 1 ir gausi 0, tai tą 0 ir įrašyk.

O jei bus LEAD_FARAI 4

Tai iš 4 atimk 1, gausi 3, tai 3 ir įrašyk. Tai atrodytų taip:

else if((model == mašinosID && playerDB[playerid][specialybe] == SpecialybėsID) pelnas[0]+=uždirbamižaidėjopinigaipelnui;

Jei nori, kad eitų į algą, tai daryk:

else if((model == mašinosID && playerDB[playerid][specialybe] == SpecialybėsID) playerDB[playerid][alga]+=uždirbamipinigai;

Jei kas dar neaišku, rašyk, padėsiu būtinai :)

Guest LaurysimO

Labai nuosekliai išdėstyta, šaunuolis. :)

  • Parašė po 2 savaičių...
Man ten kur turi rasti kur uzdirbami pinigai. tai man kaskokio neranda.

va sito : if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return;

Reiškia pas tave bus:

if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return 1;

Kiek bandau skriptu nein nė vienas padėkit :(

Kas tau neina?

Ka ten su ta /r racija daryti? as nelabai supratau kaip ja ten ideti

Būtent ko? Reikia įdėti scripta gamemodes/data/functions.txt faile ir po to kur komanda /r yra ten parašyta paprasta, parašyk man į skype jei neišeis, įdėsiu :)

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 5125 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Svečias
Ši tema yra užrakinta.
  • Šiame puslapyje naršo:   0 nariai

    • Nėra registruotų narių peržiūrinčių šį forumą.

Skelbimai


×
×
  • Sukurti naują...