Wykorzystywanie zmiennych z klasy C_ITEM 1925 2

O temacie

Autor Siemekk

Zaczęty 21.04.2016 roku

Wyświetleń 1925

Odpowiedzi 2

Siemekk

Siemekk

Złote Wrota
Untersturmfuhrer
posty2143
Propsy1151
ProfesjaProgramista
  • Złote Wrota
  • Untersturmfuhrer
Przed przeczytaniem polecam znać podstawy zmiennych i stałych.
Oraz warunki, niestety do nich nie znalazłem tutoriala(jak będzie to dam link)
Tak więc zaczynajmy :) Pierwsze co to musimy zobaczyć jak wygląda sama klasa. Znajduje się ona w pliku Classes(uproszczona jej wersja-bez ikarusa) Scripts>Content>_Intern>Classes.d
CLASS C_Item
{
// Für alle Items
VAR INT id ;
VAR STRING  name,nameID ;
VAR INT hp,hp_max ;

VAR INT     mainflag,flags ; // Hauptflag und weitere Flags
VAR INT weight,value ;

// Für Waffen
VAR INT damageType ; // Welche Schadensarten
VAR INT damageTotal ;
VAR INT damage [DAM_INDEX_MAX] ;

// Für Rüstungen
VAR INT wear ;
VAR INT protection [PROT_INDEX_MAX];

// Für Nahrung
VAR INT nutrition ; // HP-Steigerung bei Nahrung

// Benötigte Attribute zum Benutzen des Items
VAR INT cond_atr [3] ;
VAR INT cond_value [3] ;

// Attribute, die bei anlegen des Items verändert werden
VAR INT change_atr [3] ;
VAR INT change_value [3] ;

// Parserfunktionen
VAR FUNC magic ; // Parserfunktion zum "Magie Header"
VAR FUNC on_equip ; // Parserfunktion, wenn Item equipped wird.
VAR FUNC on_unequip ; // Parserfunktion, wenn Item unequipped wird.
VAR FUNC on_state [4] ;

// Besitzer
VAR FUNC owner ; // Besitzer : Instanz-Name
VAR INT ownerGuild ; // Besitzer : Gilde
VAR INT disguiseGuild ; // Zur Schau getragene Gilde durch Verkleidung

// Die 3DS-Datei
VAR STRING visual ;

// Veränderung des NSC-Meshes beim Anlegen dieses Gegenstandes
VAR STRING  visual_change ; // ASC - File
VAR STRING  effect; // Effekt Instanz

VAR INT visual_skin ;

VAR STRING scemeName ;
VAR INT material ;
// VAR STRING pfx ; // Magic Weapon PFX
VAR INT munition ; // Instance of Munition

var int spell ;
var int range ;

var int mag_circle ;

VAR STRING description ;
VAR STRING text [ITM_TEXT_MAX] ;
VAR INT count [ITM_TEXT_MAX] ;

// inventory darstellungs geschichten, wird nur benutzt, falls von 0 abweichend
var int     inv_zbias; //  wie weit ist das item im inventory richtung far plane verschoben (integer scale 100=1)
var int inv_rotx; //  wieviel grad um die x achse ist das item im inv gedreht
var int inv_roty; //  wieviel grad um die y achse ist das item im inv gedreht
var int inv_rotz; //  wieviel grad um die z achse ist das item im inv gedreht
var int inv_animate; //  soll das item in inv rotiert werden
};

Dobrze jak widzimy jest tam masa zmiennych np. var int range;
 :ayfkm: "Kpisz sobie z nas!? Przecież to jest w broniach i ustala zasięg."
Tak, ale kto nam zabroni to dodać do skryptu chleba!?  Nikt!  Możemy dodać zasięg nie tylko do broni, ale do wszystkiego. I tak nie bijemy tym ponieważ... Pytanie za 100 pkt. od czego!?
Spoiler
Tak brawo zgadłeś! Od tego! VAR INT     mainflag,flag;
Wiemy, że nasz chlebek ma mainflagę "ITEM_KAT_FOOD" a mieczyk "ITEM_SWD".
Dobrze koniec teorii teraz przykładowe zastosowanie.
Dajmy sobie że zrobiliśmy 100 naszych chlebków i każdy ma odnawiać inną liczbę życia (od 1 do 101).
I co mamy tworzyć 100 funkcji? Oczywiście.
Spoiler
Że nie  :lol2:
Tworzymy jedną funkcję która będzie wykorzystywać naszą zmienną var int range.
INSTANCE ItFo_NaszBoskiChlebek1 (C_Item)
{
name = "Dzieło piekarni!";

mainflag = ITEM_KAT_FOOD;
flags = ITEM_MULTI;
range = 10;
value = Value_Shellflesh;

visual = "chlebek.3DS";
material = MAT_LEATHER;
scemeName = "FOODHUGE";
on_state[0] = USE_SPECIALCHLEB;

description = name;
TEXT[0] = "Miętki i chrupiący!";
};
Jak widzimy ustawiłem funkcję na USE_SPECIALCHLEB. I teraz do każdego z naszych 100 chlebków możemy ją przypisać.

I co już działa? Nie, bo nie napisaliśmy funkcji która ma nam dodawać życie.
A więc tak: func void USE_SPECIALCHLEB(){ //Nazwa funkcji proste :F
if(item.range>0){ //Warunek if-Jeżeli item.range- zasięg naszego przedmiotu >0 - jest większy od 0 {- to
Npc_ChangeAttribute (self, ATR_HITPOINTS, item.range); //self -Dodaj spożywającemu, ATR_HITPOINTS - punktów życia, item.range-- tyle ile nasz chleb ma zasięgu czyli w naszym przypadku 10
};//kończy warunek
};//kończy funkcję
Chyba zrozumiałe? He he łatwe prawda :F
To na razie chyba wszystko dzięki temu mamy łatwy dostęp do zmiany atrybutów naszego bohatera tylko dzięki zmiennej z klasy!

Malutkie uwagi!


Pamiętajcie że do naszej funkcji możemy dodać więcej warunków. Zależnych od wymaganego atrybuty, czy innych zmiennych z ów klasy.
Przykładowo func void Rechange_Attribute(){
if(item.range>0){
HP_PROC (item.range);
if(Npc_IsPlayer(self)){
var string msg;
msg = ConcatStrings("Punkty trafień + ",inttostring(item.range));
msg = ConcatStrings(msg," = ");
msg = ConcatStrings(msg,inttostring(hero.attribute[ATR_HITPOINTS]));
msg = ConcatStrings(msg,"/");
msg = ConcatStrings(msg,inttostring(hero.attribute[ATR_HITPOINTS_MAX]));
PutMsg(msg,"font_default.tga",RGBAToZColor(255,100,100,255),4,"");
};
if(Npc_IsPlayer(self)){//Stamina xD kurwa czemu chciałem zmęczenie potionem liczyć E:
if(item.cond_atr[0]>0){
Stamina += item.cond_atr[0];
var string cmsg;
cmsg = ConcatStrings("Wytrzymałość + ",inttostring(item.cond_atr[0]));
Putmsg(cmsg,"font_default.tga",RGBAToZColor(255,165,0,255),4,"");
};
};

if(Npc_IsPlayer(self)){ //Głód
if(item.cond_atr[1]>0){
hunger -= item.cond_atr[1];
var string MSGG;
MSGG=ConcatStrings("Głód + ",inttostring(item.cond_atr[1]));
PutMSG(MSGG,"font_default.tga",RGBAToZColor(255,255,255,255),4,"");
};
};
};

if(Npc_IsPlayer(self)){ //Pragnienie
if(item.cond_atr[2]>0){
desire -=item.cond_atr[2];
var string MSGGG;
MSGGG =ConcatStrings("Pragnienie + ",inttostring(item.cond_atr[2]));
PutMSG(MSGGG,"font_default.tga",RGBAToZColor(0,160,255,255),4,"");
};
};

if(item.change_value[1]>0){
MP_PROC (item.change_value[1]);
if(Npc_IsPlayer(self)){
var string comsg;
comsg = ConcatStrings("Punkty many + ",inttostring(item.change_value[1]));
comsg = ConcatStrings(comsg," = ");
comsg = ConcatStrings(comsg,inttostring(hero.attribute[ATR_HITPOINTS]));
comsg = ConcatStrings(comsg,"/");
comsg = ConcatStrings(comsg,inttostring(hero.attribute[ATR_HITPOINTS_MAX]));
PutMsg(comsg,"font_default.tga",RGBAToZColor(100,100,255,255),4,"");
};
};


};
Wykorzystując zmienne przypisałem dodawanie głodu, życia, pragnienia wytrzymałości i many.
Później wystarczy tylko pożywienie przerobić pod ów funkcję.
(Ta funkcja nie zadziała na kopiuj-Wklej ponieważ nie posiadacie zmiennych musicie je sami dodać oraz wyrzucić system powiadomieć(piszę to bo nie chciał bym komentarzy typu. Twoja funkcja nie działa.))
Dzięki za uwagę !
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Toworish

Toworish

Użytkownicy
http://chomikuj.pl/ToWoRiSh
posty1664
Propsy254
ProfesjaNierób
  • Użytkownicy
  • http://chomikuj.pl/ToWoRiSh
Nie wiem jestem po kilku piwach, ale to mi wygląda na zagmatwany random ;p
 
Niebawem...Pierdolnę se poradniki do Goticzka. Albo i nie, bo sie mnie nie chce.

Siemekk

Siemekk

Złote Wrota
Untersturmfuhrer
posty2143
Propsy1151
ProfesjaProgramista
  • Złote Wrota
  • Untersturmfuhrer
Jak random :F Może zagmatwane bo nie umiem tutków pisać :F Ale wszytko według mnie jest uproszczeniem :lol:
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry