Szerző Téma: [ Leírás ]Automata( állapotjelzo )  (Megtekintve 2357 alkalommal)

Nem elérhető ZeRo

  • 4620
  • Ex Globális Moderátor
    • Profil megtekintése
[ Leírás ]Automata( állapotjelzo )
« Dátum: 2010. Április 19. - 20:45:08 »
0
Automata
 
Mi is ez?
Egy rendszer, amelyet a nyelv alapból magába foglal. Ennek segítségével egyszeruen kezelhetjük a függvényeinket aszerint, hogy ez az állapotjelzo milyen értéket kap.
Alakja / Muködése
Ugyan a Pawno-ban nem színezõdik kékre a szó, de ettõl függetlenül( mint már említettem ), a PAWN nyelv támogatja ezt a kulcsszót, ami pedig a state. Az értékadás a state szóval kezdõdik, ami után megadjuk az automatánk nevét, majd egy \':\'( kettõspont ) után az értékét( állapotát ). Nézzünk egy példát!
 

public OnGameModeInit(  ) {
   //A \'ServerState\' állapotjelzo értékét \'On\'-ra állítjuk
   state ServerState: On;
   return 1;
}
public OnGameModeExit(  ) {
   //A \'ServerState\' állapotjelzo értékét \'Off\'-ra állítjuk
   state ServerState: Off;
   return 1;
}

 
Ugyan a fenti példának nincs sok értelme, de ezzel csak a mûködését, általános alakját akartam bemutatni. Most jöjjön egy konkrétabb példa.
Bonyolultabb példa
Ebben a mini játékmódban leteszünk egy pickup-ot, amit ha felveszünk, és az automatánk értéke On, akkor pénzt kapunk, ellenkezo esetben hibaüzenetet. Plusz, írtam hozzá egy RCON adminok számára elérhetõ parancsot, amivel ki/be kapcsolhatják a pénzgyûjtést( az automata értékét ).
 

#include < a_samp >
#include < sscanf2 >
#include < zcmd >
#define COLOR_GREEN 0x33AA33AA
#define COLOR_RED 0xFF0000AA
#define COLOR_YELLOW 0xFFFF00AA
new iPickup;
main(  ) {
state CashboxState: Off;
iPickup = CreatePickup( 1238, 1, 120.3, 12.1, 2.1 );
}
CMD:cashbox( playerid, params[  ] ) {
new iType;
if( !IsPlayerAdmin( playerid ) ) {
    SendClientMessage( playerid, COLOR_RED, \"Nem vagy adminisztrátor!\" );
} else if( sscanf( params, \"i\", iType ) ) {
    SendClientMessage( playerid, COLOR_RED, \"Használat: /cashbox < Állapot > | 0 = ki | 1 = be\" );
} else if( iType < 0 || iType > 1 ) {
    SendClientMessage( playerid, COLOR_RED, \"Érvénytelen érték!\" );
} else {
    if( !iType ) {
        state CashboxState: Off;
        SendClientMessage( playerid, COLOR_YELLOW, \"Kikapcsoltad a pénzgyûjtést!\" );
} else {
    state CashboxState: On;
    SendClientMessage( playerid, COLOR_GREEN, \"Bekapcsoltad a pénzgyûjtést!\" );
}
}
return 1;
}
public OnPlayerPickUpPickup( playerid, pickupid ) < CashboxState: Off > {
#pragma unused pickupid
return SendClientMessage( playerid, COLOR_RED, \"Sajnálom, de a pénzgyûjtés ki van kapcsolva!\" );
}
public OnPlayerPickUpPickup( playerid, pickupid ) < CashboxState: On > {
#pragma unused pickupid
GivePlayerMoney( playerid, random( 30000 ) );
SendClientMessage( playerid, COLOR_GREEN, \"Pénzt kaptál. Zsíííííííír.\" );
return 1;
}
#pragma unused iPickup

 
Ez csak egy példa a sok közül, hogy mi mindenre lehet felhasználni. Remélem tudtam valami újat mutatni.


Gamestar írt egy makrót, ami megkönnyítheti az állapotváltást:
 
#define ChangeState(%1,%2) state %1: %2

 
Példa:
 
ChangeState(valami, off);
« Utoljára szerkesztve: 2010. Október 29. - 20:47:29 írta ZeRo »

[ Leírás ]Automata( állapotjelzo )
« Válasz #1 Dátum: 2010. Április 19. - 21:13:15 »
0
SZép tut :) am a state-nak akkor csak On és Off lehet az értéke igaz?

Nem elérhető ZeRo

  • 4620
  • Ex Globális Moderátor
    • Profil megtekintése
[ Leírás ]Automata( állapotjelzo )
« Válasz #2 Dátum: 2010. Április 19. - 21:30:22 »
0
Nem, csupán ezeket írtam be példának. De bármi lehet, csak nem kezdodhet számmal( lehet benne szám, csak nem az elso helyen ).
 

state myState: _23;
state Nemtom: palacsinta;
.
.
.

 
És kösz.  :)

GroX

  • Vendég
[ Leírás ]Automata( állapotjelzo )
« Válasz #3 Dátum: 2010. Április 19. - 21:35:37 »
0
Értem magát a lényeget, és szép TuT, de nem tudom mi értelme van ha egy változóval meg lehet oldani. 8)

[ Leírás ]Automata( állapotjelzo )
« Válasz #4 Dátum: 2010. Április 20. - 09:26:29 »
0
jó leírás.
itt egy makró, ez talán könnyebbé teszi...
#define ChangeState(%1,%2) state %1: %2
példa
ChangeState(valami, off);

Nem elérhető ZeRo

  • 4620
  • Ex Globális Moderátor
    • Profil megtekintése
[ Leírás ]Automata( állapotjelzo )
« Válasz #5 Dátum: 2010. Április 20. - 12:42:44 »
0
Idézetet írta: GroX date=1271705737\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1445\" data-ipsquote-contentclass=\"forums_Topic
Értem magát a lényeget, és szép TuT, de nem tudom mi értelme van ha egy változóval meg lehet oldani. 8)
 
Pont ez az, hogy itt nem hozol létre változót.  :D
A dicséreteket köszönöm, és Gamestar, a makródat kiírom a foposztba.

Nem elérhető Epsilon

  • 1854
    • Profil megtekintése
[ Leírás ]Automata( állapotjelzo )
« Válasz #6 Dátum: 2010. Április 20. - 15:34:12 »
0
Egyszerubben fogalmazva \'másolatot\' készíthetsz az eljárásodról.
Y_Less a hivatalos fórumon elég nyilvánvaló példákat hozott fel érdemes megtekinteni.

[ Leírás ]Automata( állapotjelzo )
« Válasz #7 Dátum: 2010. Április 24. - 11:21:35 »
0
Jó kis leírás  ;)

Nem elérhető ZeRo

  • 4620
  • Ex Globális Moderátor
    • Profil megtekintése
[ Leírás ]Automata( állapotjelzo )
« Válasz #8 Dátum: 2010. Április 26. - 19:06:37 »
0
Köszönöm. ;)

Nem elérhető Csabesz

  • 7827
    • Profil megtekintése
[ Leírás ]Automata( állapotjelzo )
« Válasz #9 Dátum: 2010. Április 26. - 19:31:44 »
0
Szép TuT. Grat! :)
Valószínu, hogy használni fogom. ;)

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal