Szerző Téma: Egy kis segítség  (Megtekintve 1108 alkalommal)

Nem elérhető Buba

  • 540
    • Profil megtekintése
Egy kis segítség
« Dátum: 2011. május 07. - 16:50:36 »
0 Show voters
Sziasztok!
Az a gond hogy nemrégiben írtam(publikáltam is) AAVS azaz ArchAngelsVehicleSpawner scriptemet. De nem mûködik jól, nem adja le a kocsit.
Pastebin
Ami a stock AutoAd(playerid) -ban van abból semmi sem fut le sajnos. Úgysem jó, ha az utolsó PVarInt után rakom.
Tudtok segíteni?
« Utoljára szerkesztve: 2011. május 07. - 16:52:22 írta Buba »

Egy kis segítség
« Válasz #1 Dátum: 2011. május 07. - 20:32:52 »
0 Show voters
Szerintem javítsd ki és rakd fel újra..Én is teszteltem és télleg nem rak le kocsit

Nem elérhető Buba

  • 540
    • Profil megtekintése
Egy kis segítség
« Válasz #2 Dátum: 2011. május 07. - 20:38:32 »
0 Show voters
Idézetet írta: $MoNsTeR$ date=1304793172\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"7990\" data-ipsquote-contentclass=\"forums_Topic
Szerintem javítsd ki és rakd fel újra..Én is teszteltem és télleg nem rak le kocsit
 
És hogy javítsam ki ????????????????????????

Egy kis segítség
« Válasz #3 Dátum: 2011. május 07. - 20:43:58 »
0 Show voters
Nem csoda hogy nem kerül meghívásra az általad írt \"stock AutoAd(playerid)\" funkció
ha a dialogban minden egyes esetben return utasítás szerepel.
 

else if(GetPVarInt(playerid,\"Vehicle\") == 565) return SetPVarInt(playerid,\"RearBumper\",1150), SetPVarInt(playerid,\"FrontBumper\",1153);

 
Azzal tisztában vagy hogy egy return utasítás befejezi az éppen futó folyamatot?
Össze dobtam hamar egy szemléltetõ kódot remélem így megérted.
 

public
OnFilterScriptInit()
{
new
t = 0;
if(0 == t) return print(\"Ezzel az utolsó utasítással végetér ez a funkció egyszeri meghívása.\");
print(\"Ez azaz üzenet, amit konzolban már nem fogsz látni\");
TesztFunction(\"Meghívott funkció ami nem kerül ténylegesen meghívásra egy feljebb lévõ return utasítás miatt.\");
return 1;
}
stock
TesztFunction(str[])
{
print(str);
}
« Utoljára szerkesztve: 2011. május 07. - 20:54:28 írta Zsolesszka »

Nem elérhető Buba

  • 540
    • Profil megtekintése
Egy kis segítség
« Válasz #4 Dátum: 2011. május 09. - 10:49:37 »
0 Show voters
Aha, és akkor úgy csináljam hogy
[pawn]if(GetPVarInt(playerid,\"Vehicle\") == 565)
{
 SetPVarInt(playerid,\"RearBumper\",1150);
 SetPVarInt(playerid,\"FrontBumper\",1153);
}
[/pawn]

Egy kis segítség
« Válasz #5 Dátum: 2011. május 09. - 17:35:04 »
0 Show voters
Idézetet írta: Buba date=1304930977\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"7990\" data-ipsquote-contentclass=\"forums_Topic
Aha, és akkor úgy csináljam hogy
[pawn]if(GetPVarInt(playerid,\"Vehicle\") == 565)
{
 SetPVarInt(playerid,\"RearBumper\",1150);
 SetPVarInt(playerid,\"FrontBumper\",1153);
}
[/pawn]
 
Mondjuk igen. A lényeg abban van ha egy adott állítás igaz akkor ha nem szeretnéd hogy utána több vizsgálat legyen az egyszeri meghívás alkalmával ott zárod return utasítással, ami vissza térést jelent természetesen de az adott funkcióban lévõ tovább futást leállítja.
És a másik hogy feleslegesen használsz ennyi PVar-t, és sok helyen sokkal egyszerûbben meg lehet oldani dolgokat például egy switch case párost többszörösen egybe ágyazva is lehet használni és szintén ebben a részben is igaz hogy a ShowPlayerDialog nem fog megjelenni egyszer sem ha a játékosnál a \"Vehicle\" PVar egyenlõ 558, 559, 560, 561, 562, 565-el.
 

switch(listitem)
{
case 0:
{
   if(GetPVarInt(playerid,\"Vehicle\") == 558) return SetPVarInt(playerid,\"Spoiler\",1164); // Uranus
   else if(GetPVarInt(playerid,\"Vehicle\") == 559) return SetPVarInt(playerid,\"Spoiler\",1159); // Jester
   else if(GetPVarInt(playerid,\"Vehicle\") == 560) return SetPVarInt(playerid,\"Spoiler\",1138); // Sultan
   else if(GetPVarInt(playerid,\"Vehicle\") == 561) return SetPVarInt(playerid,\"Spoiler\",1060); // Stratum
   else if(GetPVarInt(playerid,\"Vehicle\") == 562) return SetPVarInt(playerid,\"Spoiler\",1047); // Elegy
   else if(GetPVarInt(playerid,\"Vehicle\") == 565) return SetPVarInt(playerid,\"Spoiler\",1049); // Flash
   ShowPlayerDialog(playerid,DIALOG_BUMPER,DIALOG_STYLE_LIST,\"ArchAngelsVehicle lépés: 4\",\"Alien lökhárítók\\nX-Flow lökhárítók\",\"Kész\",\"Mégsem\");
}
case 1: { /* etc.. */ }
}

 
Én ezt a részt a következõképpen oldanám meg, ha marad ez a sok PVar dolog mivel én nem így írnám meg de nem ez a lényeg:
[pawn]
switch(listitem)
{
   case 0:
   {
      switch(GetPVarInt(playerid,\"Vehicle\"))
      {
         case 558: SetPVarInt(playerid,\"Spoiler\",1164); // Uranus
         case 559: SetPVarInt(playerid,\"Spoiler\",1159); // Jester
         case 560: SetPVarInt(playerid,\"Spoiler\",1138); // Sultan
         case 561: SetPVarInt(playerid,\"Spoiler\",1060); // Stratum
         case 562: SetPVarInt(playerid,\"Spoiler\",1047); // Elegy
         case 565: SetPVarInt(playerid,\"Spoiler\",1049); // Flash
      }
      ShowPlayerDialog(playerid,DIALOG_BUMPER,DIALOG_STYLE_LIST,\"ArchAngelsVehicle lépés: 4\",\"Alien lökhárítók\\nX-Flow lökhárítók\",\"Kész\",\"Mégsem\");
      return 1; // És csak ide tennék egy return utasítást mivel ha kiválasztom ezt a listitemet  ( case 0: )
      //Akkor az adott PVar értékhez ( \"Vehicle\" ) képest beállítok egy értéket  ( \"Spoiler\" )-re, és megjelenítek egy másik dialogot és további lefutás, ellenõrzés nem szükséges addig amíg nem választ valami mást a játékos tehát return 1;
   }
   case 1: { /* etc.. */ }
}
[/pawn]
Azt hiszem kicsit hosszúra sikeredett de remélem segíteni fog valamit.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal