Zaloguj się by uzyskać pełen dostęp. Nie masz jeszcze konta? Założ je już teraz w kilka sekund.

Wysłany: 2012-11-16, 18:20


BocianJD







Wiek: 36
Na forum: 4985 dni
Posty: 16
Nick w MP: BocianJD



Respekt: 50

Witam,
W ten oto spos?b odczytuje HP Towaru:
Kod:

new Float:HPtowaru = (100-health/10);

P??niej wy?wietlam to na textdrawie i jest ok.
health jest to HP Pojazdu (HP Pojazdu = health/10).
Jako ?e te 2 HP czytane s? niejako z jednej warto?ci, to przy naprawie auta, "naprawia" si? tak?e towar.

I tu moje pytanie:
Da?oby si? zrobi? tak, aby to HP Towaru zapisywa?o si? w jakiej? zmiennej, czy co? w tym rodzaju?
Tak aby HP Towaru odejmowa?o si? razem z HP Pojazdu, jednak aby nigdy si? nie zwi?ksza?o.

Pozdrawiam ;)

Postaw piwo autorowi tego posta
 

 
Wysłany: 2012-11-16, 20:08


Combacior







Wiek: 29
Na forum: 5795 dni
Posty: 1516

Piwa: 2161

Respekt: 1060
Respekt: 1060

Ostrzeżeń: 20%
Tak, da si? zrobi?, ale trzeba zrobi? to innym sposobem. Przy naprawie pojazdu pobierasz aktualny stan towaru i po naprawie przywracasz jego stan.

Kod:

new Float:towarhp = aktualnystantowaru;
RepairVehicle(...);
//Teraz towar nie jest uszkodzony, wi?c dajemy mu warto?? tak?, jak? pobrali?my przed napraw?
new Float:HP_towaru = towarhp;


Musisz sobie pozmienia? tablice :)

Postaw piwo autorowi tego posta
 

 
Wysłany: 2012-11-17, 18:27


BocianJD







Wiek: 36
Na forum: 4985 dni
Posty: 16
Nick w MP: BocianJD



Respekt: 50

Dzi?ki za odpowied?. :)
Kombinowa?em wg. Twojej porady, ale nic sensownego mi nie wychodzi, totalnie nie mam na to pomys?u.
Ko?czy si? zawsze na errorach.
Podpowiedzia?by? gdzie co wstawi??
Tak to wygl?da w tej chwili:
Kod:

if (strcmp(cmdtext, "/fix2", true)==0 && IsPlayerAdmin(playerid) == 1)
{
RepairVehicle(GetPlayerVehicleID(playerid));
SendClientMessage(playerid, 0x008000FF,"Naprawi?e? pojazd!");
return 1;
}

Kod:

forward odpojazdu();
public odpojazdu(){
new string[256];
for(new i=0;i<MAX_PLAYERS;i++){
if(IsPlayerConnected(i) && IsPlayerInAnyVehicle(i)){
new Float:x,Float:y,Float:z;
GetPlayerPos(i, x, y, z);
new vehid = GetPlayerVehicleID(i);
new Float:health;
Skor = GetPlayerScore(i);
GetVehicleHealth(vehid, health);
new Float:HPtowaru = (100-health/10);
format(string, sizeof(string), "~g~Pojazd:~p~ %s ~n~~g~Predkosc:~p~ %d km/h ~n~~g~Przebieg:~wp~ %.1f ~n~~g~Paliwo:~p~ %d% L ~n~~g~Score:~p~ %d ~n~~g~HP Pojazdu:~p~ %.0f %% ~n~~g~Uszk. tow.:~p~ %.0f %",GetVehicleName(vehid), GetPlayerSpeedd(i), Przebieg[vehid], Gas[vehid], Skor, health/10, HPtowaru);
TextDrawSetString(pojazd[i], string);
SavePlayerPos[i][LastX] = x;
SavePlayerPos[i][LastY] = y;
SavePlayerPos[i][LastZ] = z;
//brak paliwa
if(Gas[vehid] < 1)
{
new vid = GetPlayerVehicleID(i), engine, lights, alarm, doors, bonnet, boot, objective;
GetVehicleParamsEx(vid, engine, lights, alarm, doors, bonnet, boot, objective);
SetVehicleParamsEx(vid, VEHICLE_PARAMS_OFF, lights, alarm, doors, bonnet, boot, objective);
BrakPaliwa[i] = 1;
GameTextForPlayer(i,"~w~~n~~n~~n~~r~Koniec Paliwa~n~~g~Wpisz /telefon i wezwij ~r~PD",3000,3);
}
}
}
return true;
}


Przy okazji da?oby si? wple?? w to warunek, kt?ry obni?a?by HPtowaru tylko je?li
Kod:

zapakowany[playerid] = 1; || zaladowany[playerid] = 1;
?

Postaw piwo autorowi tego posta
 

 
Wysłany: 2012-11-17, 19:09


Combacior







Wiek: 29
Na forum: 5795 dni
Posty: 1516

Piwa: 2161

Respekt: 1060
Respekt: 1060

Ostrzeżeń: 20%
Zr?bmy tak: tablica na towar przechowuj?ca jego stan.

Kod:

G?ra mapy
new Float:towar_hp[MAX_TOWAROW]; //Wpisz tyle ile mo?e by? towar?w

w komendzie
new Float:a = towar_hp[id_towaru];
RepairVehicle(GetPlayerVehicleID(playerid));
towar_hp = a;

w callbacku odpojazdu
new Float:HPtowaru = (towar_hp[id_towaru] - 100)/10;


P??niej tam, gdzie gracz dostaje towar

Kod:

towar_hp[id_towaru] = 1000.0;


Musisz pouzupe?nia? argumenty id_towaru - nie wiem jak u Ciebie przypisuj? si? towary.

Postaw piwo autorowi tego posta
 

 
Wysłany: 2012-11-17, 23:23


BocianJD







Wiek: 36
Na forum: 4985 dni
Posty: 16
Nick w MP: BocianJD



Respekt: 50

Ca?o?? wygl?da teraz tak:
Kod:

G?ra mapy
#define MAX_TOWAROW 26
new Float:towar_hp[MAX_TOWAROW];

w komendzie
new Float:a = towar_hp[zmienna[playerid]];
RepairVehicle(GetPlayerVehicleID(playerid));
towar_hp[zmienna[playerid]] = a; //przy samym towar_hp = a; wyskakiwa? error 033: array must be indexed

w callbacku odpojazdu
new Float:HPtowaru = (towar_hp[[zmienna[i]] - 100)/10;

Tam, gdzie gracz dostaje towar
towar_hp[zmienna[playerid]] = 1000.0;


Nie ma tu jednak nigdzie odwo?ania do "health" pojazdu.
HPtowaru wynosi teraz -10 (przy zapakowanym towarze 90) i niestety nie maleje razem z "health".
Kombinuje teraz jak to zrobi?, ale mo?e u Ciebie pomys? pojawi si? szybciej ;)

Postaw piwo autorowi tego posta
 

 
Wysłany: 2012-11-18, 10:10


Combacior







Wiek: 29
Na forum: 5795 dni
Posty: 1516

Piwa: 2161

Respekt: 1060
Respekt: 1060

Ostrzeżeń: 20%
Kod:

new Float:HPtowaru = (100 - towar_hp[[zmienna[i]])/10;


Spr?buj tak, bo widzia?em w Twoim kodzie, ?e odejmowane by?o health (co wydaje si? dziwne, bo heal wynosi wi?cej ni? 100, czyli wynik powinien by? ujemny, a skoro m?j kod dawa? wynik ujemny, to ten powinien by? dodatni).

Postaw piwo autorowi tego posta
 

 
Wysłany: 2012-11-19, 04:25


BocianJD







Wiek: 36
Na forum: 4985 dni
Posty: 16
Nick w MP: BocianJD



Respekt: 50

HPtowaru nie zmienia si? przy uderzeniu w powiedzmy ?cian?.
Jest to pewnie powi?zane z tym, ?e "towar_hp" ani "HPtowaru" nie ma odniesienia do uszkodze? auta (heal).
Kombinuje teraz, dodaj?c public:
Kod:

public OnVehicleDamageStatusUpdate(vehicleid, playerid)
{
kod odejmuj?cy HPtowaru
}

My?lisz, ?e id? w dobrym kierunku?

Postaw piwo autorowi tego posta
 

 
Wysłany: 2012-11-19, 12:45


Combacior







Wiek: 29
Na forum: 5795 dni
Posty: 1516

Piwa: 2161

Respekt: 1060
Respekt: 1060

Ostrzeżeń: 20%
Ju? my?la?em wcze?niej nad tym callbackiem, ale nie ma w nim argumentu o ilo?ci zadanych obra?e? pojazdu, czyli to odpada, chyba ?e zrobisz dwie tablice i odejmowa? jedn? od aktualnego stanu pojazdu i wtedy ustala? hp towaru.

Postaw piwo autorowi tego posta
 

 
Wysłany: 2012-11-20, 09:46


BocianJD







Wiek: 36
Na forum: 4985 dni
Posty: 16
Nick w MP: BocianJD



Respekt: 50

Oto wyniki moich kombinacji:
Kod:

g?ra mapy:
new Float:towar_hp[MAX_TOWAROW];
new Float:towar_hp2[MAX_TOWAROW];

Kod:

odpojazdu:
new Float:HPtowaru = towar_hp[zmienna[i]];

Kod:

public OnVehicleDamageStatusUpdate(vehicleid, playerid)
{
new Float:health;
GetVehicleHealth(vehicleid, health);
towar_hp2[zmienna[playerid]] = (100-health/10);
if (towar_hp[zmienna[playerid]] <= 100 && (zapakowany[playerid] == 1 || zaladowany[playerid] == 1))
{
towar_hp[zmienna[playerid]] += towar_hp2[zmienna[playerid]];
if (towar_hp[zmienna[playerid]] > 100)
{
towar_hp[zmienna[playerid]] = 100;
return 1;
}
return 1;
}
return 1;
}


Teraz wszystko wydaje si? dzia?a? prawid?owo.
Dzi?ki wielkie za nakierowanie i pomoc w rozwi?zaniu problemu. Tym bardziej, ?e to ju? 2gi raz kiedy mi pomagasz :)

Postaw piwo autorowi tego posta
 

 
Tagi: towaru :: zapisywanie
Anonymous





Na forum: 245 dni
Posty: 1



Anonymous Koniecznie zajrzyj na:






Skocz do:  
Wyświetl posty z ostatnich:   
GTAONLINE.PL » JĘZYKI PROGRAMOWANIA » PAWN Ten temat jest zablokowany bez możliwości zmiany postów lub pisania odpowiedzi

Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Dodaj temat do Ulubionych
Wersja do druku