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éseUgyan 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éldaEbben 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);
SZép tut :) am a state-nak akkor csak On és Off lehet az értéke igaz?
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. :)
É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)
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);
É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.
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.
Jó kis leírás ;)
Köszönöm. ;)
Szép TuT. Grat! :)
Valószínu, hogy használni fogom. ;)