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

Wysłany: 2012-12-27, 17:50


AQQ!







Wiek: 35
Na forum: 5083 dni
Posty: 32
Nick w MP: Clive



Respekt: 50

Hej0o! :D
Przerabiam licznik driftu, w zwi?zku z tym chcia?bym si? Was poradzi?.
Jak sprawdzi? ile punkt?w driftu ma dany gracz?
Bo chcia?bym co? takiego zrobi?, ?e gdy gracz ma poni?ej 100 pkt. wy?wietli mu si? napis "Nie?le", a gdy naprzyk?ad powy?ej 1000 pkt. napis "Perfekcyjnie".
Mo?e wiecie? :)


Kod:

#include <a_samp>
#include <kolory>
#define DRIFT_MINKAT 10.0
#define DRIFT_MAXKAT 90.0
#define DRIFT_SPEED 30.0
#pragma tabsize 0
#pragma unused GetPlayerTheoreticAngle
new Float:ppos[200][3];
enum Float:Pos{ Float:sX,Float:sY,Float:sZ };
new Float:SavedPos[MAX_PLAYERS][Pos];
new DriftPointsNow[200];
new PunktyDriftuGracza[200];
new Text:DriftTD2[200];
forward LicznikDriftu();
forward clock();
forward PodsumowanieDriftu(playerid);
public OnFilterScriptInit(){
for(new x=0;x<200;x++){
DriftTD2[x] = TextDrawCreate(340.000000, 430.000000, " ");
TextDrawBackgroundColor(DriftTD2[x], 255);
TextDrawFont(DriftTD2[x], 1);
TextDrawLetterSize(DriftTD2[x], 0.830000, 1.900000);
TextDrawColor(DriftTD2[x], -1);
TextDrawSetOutline(DriftTD2[x], 0);
TextDrawSetProportional(DriftTD2[x], 1);
TextDrawSetShadow(DriftTD2[x], 1);
}
SetTimer("AngleUpdate" , 700, true);
SetTimer("LicznikDriftu", 100, true);
return 1;
}
IsCar(vid){
new model = GetVehicleModel(vid);
switch(model){
case 443:return 0;
case 448:return 0;
case 461:return 0;
case 462:return 0;
case 463:return 0;
case 468:return 0;
case 521:return 0;
case 522:return 0;
case 523:return 0;
case 581:return 0;
case 586:return 0;
case 481:return 0;
case 509:return 0;
case 510:return 0;
case 430:return 0;
case 446:return 0;
case 452:return 0;
case 453:return 0;
case 454:return 0;
case 472:return 0;
case 473:return 0;
case 484:return 0;
case 493:return 0;
case 595:return 0;
case 417:return 0;
case 425:return 0;
case 447:return 0;
case 465:return 0;
case 469:return 0;
case 487:return 0;
case 488:return 0;
case 497:return 0;
case 501:return 0;
case 548:return 0;
case 563:return 0;
case 406:return 0;
case 444:return 0;
case 556:return 0;
case 557:return 0;
case 573:return 0;
case 460:return 0;
case 464:return 0;
case 476:return 0;
case 511:return 0;
case 512:return 0;
case 513:return 0;
case 519:return 0;
case 520:return 0;
case 539:return 0;
case 553:return 0;
case 577:return 0;
case 592:return 0;
case 593:return 0;
case 471:return 0;
}
return 1;
}
forward AngleUpdate();
public AngleUpdate(){
for(new g=0;g<200;g++){
new Float:x, Float:y, Float:z;
if(IsPlayerInAnyVehicle(g))GetVehiclePos(GetPlayerVehicleID(g), x, y, z); else GetPlayerPos(g, x, y, z);
ppos[g][0] = x;
ppos[g][1] = y;
ppos[g][2] = z;
}
}
Float:GetPlayerTheoreticAngle(i){
new Float:sin;
new Float:dis;
new Float:angle2;
new Float:x,Float:y,Float:z;
new Float:tmp3;
new Float:tmp4;
new Float:MindAngle;
if(IsPlayerConnected(i)){
GetPlayerPos(i,x,y,z);
dis = floatsqroot(floatpower(floatabs(floatsub(x,ppos[i][0])),2)+floatpower(floatabs(floatsub(y,ppos[i][1])),2));
if(IsPlayerInAnyVehicle(i))GetVehicleZAngle(GetPlayerVehicleID(i), angle2); else GetPlayerFacingAngle(i, angle2);
if(x>ppos[i][0]){tmp3=x-ppos[i][0];}else{tmp3=ppos[i][0]-x;}
if(y>ppos[i][1]){tmp4=y-ppos[i][1];}else{tmp4=ppos[i][1]-y;}
if(ppos[i][1]>y && ppos[i][0]>x){
sin = asin(tmp3/dis);
MindAngle = floatsub(floatsub(floatadd(sin, 90), floatmul(sin, 2)), -90.0);
}
if(ppos[i][1]<y && ppos[i][0]>x){
sin = asin(tmp3/dis);
MindAngle = floatsub(floatadd(sin, 180), 180.0);
}
if(ppos[i][1]<y && ppos[i][0]<x){
sin = acos(tmp4/dis);
MindAngle = floatsub(floatadd(sin, 360), floatmul(sin, 2));
}
if(ppos[i][1]>y && ppos[i][0]<x){
sin = asin(tmp3/dis);
MindAngle = floatadd(sin, 180);
}
}
if(MindAngle == 0.0){
return angle2;
}
else
return MindAngle;
}
public PodsumowanieDriftu(playerid){
PunktyDriftuGracza[playerid] = 0;
SetPlayerScore(playerid, GetPlayerScore(playerid)+DriftPointsNow[playerid]);
DriftPointsNow[playerid] = 0;
//TextDrawSetString(DriftTD2[playerid],"~r~Punkty Za Drift~w~: ?adowanie");
SetTimer("DMCDP",500,false);
}
Float:ReturnPlayerAngle(playerid){
new Float:Ang;
if(IsPlayerInAnyVehicle(playerid))GetVehicleZAngle(GetPlayerVehicleID(playerid), Ang); else GetPlayerFacingAngle(playerid, Ang);
return Ang;
}
public LicznikDriftu(){
new Float:Angle1, Float:Angle2, Float:BySpeed, s[256];
new Float:Z;
new Float:X;
new Float:Y;
new Float:SpeedX;
for(new g=0;g<200;g++){
GetPlayerPos(g, X, Y, Z);
SpeedX = floatsqroot(floatadd(floatadd(floatpower(floatabs(floatsub(X,SavedPos[ g ][ sX ])),2),floatpower(floatabs(floatsub(Y,SavedPos[ g ][ sY ])),2)),floatpower(floatabs(floatsub(Z,SavedPos[ g ][ sZ ])),2)));
Angle1 = ReturnPlayerAngle(g);
Angle2 = GetPlayerTheoreticAngle(g);
BySpeed = floatmul(SpeedX, 12);
if(GetPlayerState(g) == PLAYER_STATE_DRIVER && IsCar(GetPlayerVehicleID(g)) && floatabs(floatsub(Angle1, Angle2)) > DRIFT_MINKAT && floatabs(floatsub(Angle1, Angle2)) < DRIFT_MAXKAT && BySpeed > DRIFT_SPEED){
if(PunktyDriftuGracza[g] > 0)KillTimer(PunktyDriftuGracza[g]);
PunktyDriftuGracza[g] = 0;
DriftPointsNow[g] += floatval( floatabs(floatsub(Angle1, Angle2)) * 3 * (BySpeed*0.1) )/10;
PunktyDriftuGracza[g] = SetTimerEx("PodsumowanieDriftu", 3000, 0, "d", g);
}
if(DriftPointsNow[g] > 0){
format(s, sizeof(s), "%d", DriftPointsNow[g]);
TextDrawSetString(DriftTD2[g], s);
}
SavedPos[ g ][ sX ] = X;
SavedPos[ g ][ sY ] = Y;
SavedPos[ g ][ sZ ] = Z;
}
}
floatval(Float:val){new str[256];format(str, 256, "%.0f", val);return todec(str);}
todec(str[]){return strval(str);}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == PLAYER_STATE_DRIVER){
TextDrawShowForPlayer(playerid, DriftTD2[playerid]);
}
return 1;
}
forward DMCDP(playerid);
public DMCDP(playerid){
TextDrawSetString(DriftTD2[playerid]," ");
return 1;
}
public OnPlayerConnect(playerid){
new x;
TextDrawHideForPlayer(playerid, DriftTD2[x]);
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[]){
new x;
if (strcmp("/driftoff", cmdtext, true, 10) == 0){
SendClientMessage(playerid,COLOR_GREEN,"Licznik wy??czony.");
TextDrawHideForPlayer(playerid, DriftTD2[x]);
return 1;
}
if (strcmp("/drifton", cmdtext, true, 10) == 0){
SendClientMessage(playerid,COLOR_RED,"Licznik w??czony.");
TextDrawShowForPlayer(playerid, DriftTD2[x]);
return 1;
}
return 0;
}
[/hide]

Postaw piwo autorowi tego posta
 

 
Wysłany: 2012-12-27, 18:10


ToxiC.







Wiek: 28
Na forum: 5246 dni
Posty: 3792

Piwa: 8590

Respekt: 1143,8
Respekt: 1143,8

Wida? ?e punkty Driftu to Score.

Czyli warunek robisz.. w timerze dla ka?dego gracza osobno: (OnPlayerConnect):
Timer:
Kod:

SetTimerEx("nazwaTimer", 3000, true, "i", playerid);


i gdzie? na koncu mapy:
Kod:


forward nazwaTimer(playerid);
public nazwaTimer(playerid)
if(GetPlayerScore(playerid) >= 1000) //je?eli bdzie mia? wi?cej ni? 1000 Punkt?w Drift
{
//tu pokazujesz napis "Nie?le" itp.
}


Chyba dobrze :)

Postaw piwo autorowi tego posta
 

 
Wysłany: 2012-12-27, 18:30


AQQ!







Wiek: 35
Na forum: 5083 dni
Posty: 32
Nick w MP: Clive



Respekt: 50

Spr?buj? :D

[ Dodano: 2012-12-27, 18:36 ]
Ale mi sie wydaje na logike, ?e chyba nie bardzo ten Tw?j pomys? :D
Bo b?dzie pobiera?o score og?lne i ci?gle wy?wietla?o Nie?le :D

[ Dodano: 2012-12-27, 18:39 ]
No w?a?nie sta?o sie tak jak my?la?em :D

Postaw piwo autorowi tego posta
 

 
Wysłany: 2012-12-27, 18:44


ToxiC.







Wiek: 28
Na forum: 5246 dni
Posty: 3792

Piwa: 8590

Respekt: 1143,8
Respekt: 1143,8

AQQ!, no to jak chcesz? :D Jak chcesz tylko przez chwile to nie r?b ?adnego timera tylko daj ten warunek w public PodsumowanieDriftu :)

[ Dodano: 2012-12-27, 18:45 ]
i do wy?wietlania napisu mo?esz uzy? http://wiki.sa-mp.com/wiki/GameTextForPlayer okre?l tam na ile ma si? pokaza? i po czasie zniknie ten napis. Mo?e by?? :)

Postaw piwo autorowi tego posta
 

 
Wysłany: 2012-12-27, 18:49


AQQ!







Wiek: 35
Na forum: 5083 dni
Posty: 32
Nick w MP: Clive



Respekt: 50

Aaa, dobra chyba wiem.

Kod:

public PodsumowanieDriftu(playerid){
PunktyDriftuGracza[playerid] = 0;
SetPlayerScore(playerid, GetPlayerScore(playerid)+DriftPointsNow[playerid]);
DriftPointsNow[playerid] = 0;
//TextDrawSetString(DriftTD2[playerid],"~r~Punkty Za Drift~w~: ?adowanie");
SetTimer("DMCDP",500,false);
}


W tym musze wykombinowa? textdrawy i warunek, ale dzi?ki za pomoc :D

[ Dodano: 2012-12-27, 18:50 ]
Widze, na to ?e wpad?e? pierwszy wi?c browaro :D

Postaw piwo autorowi tego posta
 

 
Tagi: licznik :: driftu.
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