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

[INC]Inventorius v0.4.1


bebras

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3550 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,



Šio include pagalba, nesunkiai galėsite susikurti GUI inventorių(tiesą sakant, didžiuojuosi šiuo darbu). Pats seniai panašų dalyką jau naudoju, bet nusprendžiau juo pasidalinti.


Naudojimas

Pirmiausia jums reikės įkelti inv.inc failą į pawno/include direktoriją.
Tada savo kode (kaip ir kiekvieną įskiepį)


#include <inv>

Funkcijas aprašiau ir pačiame include failiuke, todėl iš naujo nerašysiu:
 

native AddItem(itemname[]); Ši funkcija pridėta daiktą, nepanaudoję jos negalėsite naudotis tuo daiktu..
native GivePlayerItem(playerid,item[],amount); Ši funkcija duoda žaidėjui tam tikrą daiktų skaičių(galima naudoti ir daiktų atėmimui).
native ShowPlayerInventory(playerid); Ši funkcija parodys žaidėjui GUI su visais jo daiktais ir jų kiekiu(taipat paspaudus įvyks nurodytas veiksmas).
native ResetPlayerItem(playerid,itemname[]); Ši funkcija atiims iš žaidėjo visus nurodytus daiktus.
native ResetPlayerItems(playerid); Ši funkcija attims visus žaidėjo daiktus.
native GetPlayerItemAmount(playerid,itemname[]); Ši funkcija gražins nurodyto daikto skaičių.

Bet ko failiuke neaprašiau, tai kaip nustatyti veiksmą kuris įvyks paspaudus ant daikto inventoriuje. Tai labai paprasta!
Savo kode(NE po callback'e) rašote:


Item:daikto_pavadinimas(playerid) // Pavadinimas turi sutapti su naudotu AddItem funkcijoje
{
    //Veiksmas kuris įvyks paspaudus ant daikto.
}

Daiktų pavadinimai su tarpais. Naudojant tarpus daiktų pavadinimuose, Item: funkcijoje juos pakeiskite į @ simbolius, pvz: 

Item:daikto@pavadinimas(playerid)
{
   // Veiksmas kuris bus atliktas pasirinkus daiktą
}

Taipat įskiepyje yra ir keli define
 

#define MAX_ITEMS (15)
#define MAX_ITEM_NAME (30)
#define INV_EMPTY_DIALOG_ID  (32760)
#define INV_INVENTORY_DIALOG_ID (457)
#define ShowEmptyInventory(%0) 

ShowEmptyInventory naudojamas parodyti lentelei, kai žaidėjas neturi jokių daiktų. Galite jį pakeisti pagal poreikius.

 

 

 

Jei tai jūsų netenkina, juos galite pakeisti pačiame include ARBA savo kode rašant:


//Pavizdys su MAX_ITEM_NAME
#define MAX_ITEM_NAME Naujas_skaicius

#include <inv>

Svarbu! Define pakeitimai turi būti prieš includinimą.

 

Saugojimas/Krovimas

 

Norint kad saugotų jūsų turimus daiktus, jums reikia įjungti saugojimą, jo yra trys rūšys: Y_Ini, MySQL R6 ir MySQL R8, jų įjungimui reikia nustatyti tam tikrus define:

#define INV_SAVE_Y_INI
#define INV_SAVE_MYSQL

// Iš žemiau esančių rinkitės tik vieną.
#define INV_MYSQL_R6
#defien INV_MYSQL_R38

Tai turi būti prieš include eilutę.

 

 

Be to, yra du galimi krovimo būdai: krovimas žaidėjui prisijungus(OnPlayerConnect) ir žaidėjui atsiradus (OnPlayerSpawn). Nenurodžius kito, bus naudojamas pirmasis. Pasirinkti antrąjį galite rašydami šį kodą prieš include:

#define INV_LOAD_ONSPAWN

Įjungus saugojimą, automatiškai įsijungs ir krovimas.

 

Parsisiuntimas

ManoFailai.LT
Pastebin




Galimų naudojimo klausimų atsakymai

 

K: Įjungus MySQL saugojimą, jis neveikia.

A: Šis include lentelės nesukuria, tai turėsite padaryti pats. Struktūros kodo žemiau.

 

K: Paspaudus ant daikto įvyksta kažkas kito nei nurodyta "Item:" funkcijoje
A: Jau yra viena GUI lentelė kurios Id 457.

Pakeiskite vieną iš šių:

  • INV_EMPTY_DIALOG_ID nurodant reikšmę prieš includinant.
  • Savo lentelės ID

 

K: Kodėl nesaugo daiktų? 

A: Saugojimą reikia įjungti. Žiūrėkite aukščiau

 

K: Kompiliuojant gaunu "Include autorius - Bebras. Nuo tiesos nepabegsi, turek pagarbos." klaidą:
A: inv.inc faile nutrynėi šią eilutę: "#define Bebras AUTORIUS"

K:Serverio loge parašyta "Daikto "Pavadinimas" funkcija nesukurta"
A: Nėra "Item:pavadinimas" funkcijos.


Radus klaidą prašau pranešti!
Jeigu bus susidomėijmo, gal ateityje pridėsiu daiktų perdavimą bei saugojimą.

 

 

MySQL lentelės struktūra:

       CREATE TABLE IF NOT EXISTS player_items (
		`Id` INT(11) AUTO_INCREMENT NOT NULL,
		Username VARCHAR(24) NOT NULL,
		ItemName VARCHAR(30) NOT NULL,
		Quantity INT(11) NOT NULL,
		PRIMARY KEY(`Id`)
	); 

 

 

Atnaujinimas

 

v0.4.1

 

Pataisyta klaida neleidusi naudoti GetPlayerItemAmmount

 

v0.4:

 

Pridėta galimybė naudoti tarpus daiktų pavadinimuose

Nuo šiol daiktų pavadinimus nuo kiekio rodant inventorių skirs ne du tarpai, o "\t".

 

v0.3:

 

Pridėtas MySQL saugojimas: R6 ir R38

Apšvarintas kodas pačiame include lengvesniam skaitymui.

 

v0.2:

 

Savo kode nenaudojant nebebus matoma "warning 209: function "OnDialogResponse" should return a value" klaida

Neturint daiktų nebūdavo rodomas inventorius, dabar rodomas kitoks.
Pridėtas neprivalomas saugojimas naudojant Y_Ini
Pridėta "isnull" funkcija jei dar neturėjote
Redaguota , nario Justas Š.
Nuoroda į komentarą
Dalintis per kitą puslapį

dėk į pastebint, tingiu siūstis ._.

Palauksi, skriptas nepabėgs :D Rašė jog įdės.

K: Kompiliuojant gaunu "Include autorius - Bebras. Nuo tiesos nepabegsi, turek pagarbos." klaidą:

A: inv.inc faile nutrynėi šią eilutę: "#define Bebras AUTORIUS"

Šitas geras :lol: Šaunuolis, įdomus darbas, palauksim PasteBin'o :D

Nuoroda į komentarą
Dalintis per kitą puslapį

Geras sprendimas tikrint dialogrespons'e daiktą pagal pavadinimą.. Aš sudėtingiau darau(kintamieji).

Aha, ne visi žino jog net ir STYLE_LIST pasirinkimo pavadinimas bus inputtext'e.

Pirma problema buvo kaip komandų: prie to dialogo tiesiog su strcmp visiems galimiems daiktams veiksmai. Tada prisiminiau ZCMD. Tokiu principu pakeičiau ir šiuo atveju :) Nors aišku kaip MAX_ITEMS yra 15, greitis nėra problema.... Bet už tai geros galimybės plėstis :)

Nuoroda į komentarą
Dalintis per kitą puslapį


  • #if !defined Bebras

  • #error Include autorius - Bebras. Nuo tiesos nepabegsi, turek pagarbos.

  • #endif

Ne tame esmė.. :D Šiaip įdomiai susigalvojęs taip padaryti, nes ne kiekvienas durnius ras kame šaknys, jeigu net paprasčiausių errorų ištaisyt nemoka :D

Nuoroda į komentarą
Dalintis per kitą puslapį

Galbūt trūksta stock, atimt iš žaidėjo daikto kiekį.. Nes kiek matau dabar yra funkcija kuri ištrina daiktą, o ne minusuoja jo kiekį.

Tikiuosi kad žmonės supras jog GivePlayerItem galima naudoti ir su neigiamu skaičiumi :) Kaip GivePlayerMoney.

Va ką pamiršau paminėti, tai kad labai patogu(bent man taip atrodo) daiktų pavadinimus užsidefininti, kad nereikėtų kaip String rašyti visada:

#define Ziebtuvelis   "Ziebtuvelis"
#define Plaktukas    "Plaktukas"

//Ir tada tiesiog:
AddItem(Ziebtuvelis);
//arba
GivePlayerItem(playerid,Plaktukas,1);

Bet čia aišku nieko daug nekeičia.

Nuoroda į komentarą
Dalintis per kitą puslapį

Tikiuosi kad žmonės supras jog GivePlayerItem galima naudoti ir su neigiamu skaičiumi :) Kaip GivePlayerMoney.

Va ką pamiršau paminėti, tai kad labai patogu(bent man taip atrodo) daiktų pavadinimus užsidefininti, kad nereikėtų kaip String rašyti visada:

#define Ziebtuvelis "Ziebtuvelis"
#define Plaktukas "Plaktukas"

//Ir tada tiesiog:
AddItem(Ziebtuvelis);
//arba
GivePlayerItem(playerid,Plaktukas,1);

Bet čia aišku nieko daug nekeičia.

Nepagalvojau dėl to minusinio skaičiaus :D

Nuoroda į komentarą
Dalintis per kitą puslapį

  • Parašė po 2 mėnesių...

Nenorėjau prikelti temos, bet reiktų kad kai ką pasakytum.

 

defininu

#define Duona      "Duona"

Parašau:

Item:Duona(playerid)
{
	SetPlayerHealth(playerid,50);
}

ir meta error:

C:\Users\Kompiuteris\Desktop\mysqlGM\gamemodes\mysqlGM.pwn(304) : error 001: expected token: "-string end-", but found "-identifier-"

bandžiau ne vieną variantą tvarkyti, bet nesigauna.

Redaguota , nario Marius..
Nuoroda į komentarą
Dalintis per kitą puslapį

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3550 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!

Prisijungti prie diskusijos

Palikti atsakymą galite iš karto, o užsiregistruoti vėliau. Jeigu jau turite paskyrą mūsų forume, Prisijunkite.

Svečias
Atsakyti šioje temoje...

×   Įklijuotas tekstas turi teksto formatavimą.   Pašalinti teksto formatavimą

  Galimi tik 75 veidukai.

×   Nuoroda buvo automatiškai įterpta.   Įterpti nuorodą paprastai

×   Jūsų ankstesnis pranešimas buvo atkurtas.   Išvalyti redaktorių

×   Jūs negalite įkelti nuotraukas tiesiogiai.Įkelkite arba įdėkite nuotraukas iš URL.

  • Šiame puslapyje naršo:   0 nariai

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

Skelbimai



×
×
  • Sukurti naują...