Szerző Téma: Recept/Craft rendszer alap  (Megtekintve 1067 alkalommal)

Recept/Craft rendszer alap
« Dátum: 2013. Július 04. - 15:08:45 »
+5 Show voters
Sziasztok!
Költözés miatt nem volt netem, ezért unalmamban programoztam.
A lényeg hogy egy 3x3-as rácson tárgyakat elhelyezve különbözõ receptek szerint dolgokat lehet készíteni. (hasonlóképp mint a Minecraft nevû játékban)
Az inc. csak a mechanizmust, a keresést hozzáadást tartalmazza, magát a kezelõfelületet nektek kell létrehozni, inventoryhoz csatlakoztatni stb..
Használható funkciói:
Recept hozzáadása:         addRecipe( name[], IDs[], {Float,_}:... )
name[] = A recept neve.
IDs[] = Stringben megadva, a használt (3x3-mas kockában lévõ) négyzetek ID-je.
{Float,_}:... = Ide írjuk a recept kívánt itemjeit. Figyelni kell a sorrendre. Tehát ha az IDs[]-be ezt írtuk: \"012\", és a recept itemjeihez pedig ezt: 1, 2, 3   -- akkor a 0-s helyre 1-es item kell. 1-es helyre 2-es item stb..
Példa:
addRecipe( \"TNT\", \"012345678\", 1, 1, 1, 1, 2, 1, 1, 1, 1 );  -- Ezzel hozzáadtunk egy TNT nevû receptet, amihez középre kell raknunk egy 2-es azonosítójú tárgyat, és köré pedig 1-es tárgyakat.
Vajon jó-e a recept amit a játékos kirakott?: returnRecipe( recipe[] )
Például egy barkácsasztalnál berakja az itemjeit a 3x3-mas kockába. Ezzel a funkcióval ellenõrizhetjük(pl. az onplayerupdate alatt) hogy valamilyen receptnek megfelel-e.
Példa:
returnRecipe( \"[0:1][1:1][2:1][3:1][4:2][5:1][6:1][7:1][8:1]\" );
A visszatérési értéke -1 vagy a recepet ID-je. ( -1 ha nem talált )
A fenti példánál a korábban létrehozott TNT receptet írtam le.
Így azt fogja visszaadni.
Nem vagyok vizuális.. ki kéne írni hogy hogy néz ki a receptem.. : printRecipe( recname[] )
A kívánt receptet rajzolja ki a consoleba. Nagy segítség annak aki nem vizuális típus.
Példa:
printRecipe( \"TNT\" );
A recept nevének lekérése ID alapján: getRecipeName( recipeid )
A recept nevének lekérése recept alapján: getItemNameFromRecipe( recipe[] )


Egyéb kérdésekért, beüzemelésre való segítségért itt írjatok.
 
// Barkácsolás v1.0                Horváth \'Fl0rian\' Flórián
#include < a_samp >
new recipes[ 256 ][ 128 ];
new recipename[ 256 ][ 24 ];
stock addRecipe( name[], IDs[], {Float,_}:... )
{
new recipeid = (-1);
for( new i = 0; i < 256; i ++ )
{
    if( strlen(recipes) ) continue;
recipeid = i;
break;
}
// --------------------------
new tempForm[ 128 ];
new id[ 9 ];
new spaces;
if( recipeid != (-1) )
{
    for( new i = 0; i < strlen(IDs); i ++ )
{
    format( tempForm, sizeof(tempForm), \"%s\", IDs );
   strdel( tempForm, i + 1, strlen(tempForm) );
   strdel( tempForm, 0, i );
    // ------------
   
    id[ i ] = strval( tempForm );
}
    for( new i = 2; i < numargs(); i ++ )
    {
        format( tempForm, sizeof(tempForm), \"[%d:%d]\", id[i - 2], getarg(i) );
   strins( recipes[recipeid], tempForm, strlen(recipes[recipeid]) );
    }
   
    format( recipename[recipeid], 24, \"%s\", name );
    // -----------------
   
    spaces = (80 - (29 + strlen(name))) / 2;
    format( tempForm, sizeof(tempForm), \"Recept(%s) sikeresen hozzáadva!\", name );
   
    for( new i = 0; i < spaces; i ++ )
    {
        strins( tempForm, \" \", 0 );
        strins( tempForm, \" \", strlen(tempForm) );
    }
   
    print( \" \" );
    print( tempForm );
    print( \" \" );
   
printRecipe( name );
    return recipeid;
}
return (-1);
}
stock returnRecipe( recipe[] )
{
new recipeid = (-1);
new ents[ 2 ][ 9 ][ 16 ];
new numen;
new bool: used[ 9 ];
new okay;
for( new p = 0; p < strlen(recipe); p ++ ) { if( recipe[p] == \']\' ) numen ++; }
splitSYS( recipe, ents[0], \']\' );
for( new i = 0; i < 256; i ++ )
{
    if( !strlen(recipes) ) continue;
    if( strlen(recipe) != strlen(recipes) ) continue;
// ---------------
splitSYS( recipes, ents[1], \']\' );
// ---------------
for( new k = 0; k < numen; k ++ )
{
   for( new j = 0; j < numen; j ++ )
   {
      if( !strcmp(ents[0][k], ents[1][j]) )
      {
         if( !used[k] )
         {
             okay ++;
             used[ k ] = true;
         }
      }
   }
}
if( okay != numen ) continue;
        recipeid = i;
        break;
}
// -----------------
return recipeid;
}
stock printRecipe( recname[] )
{
new mNum[ 9 ];
new tempForm[ 16 ];
new recipe[ 128 ];
for( new i = 0; i < 256; i ++ )
{
    if( !strcmp(recipename, recname) )
    {
   format( recipe, sizeof(recipe), \"%s\", recipes );
   break;
    }
}
// ------------
if( !strlen(recipe) )
{
    print( \" \" );
    printf( \"HIBA: A recept(%s) nem található!\", recname );
    print( \" \" );
   
    return 0;
}
// ------------
for( new i = 0; i < 9; i ++ )
{
    format( tempForm, sizeof(tempForm), \"[%d:\", i );
if( strfind(recipe, tempForm) != (-1) ) { mNum[ i ] = strval(recipe[strfind(recipe, tempForm) + 3]); }
}
new caption[ 80 ];
format( caption, sizeof(caption), \" ============================================================================== \" );
strdel( caption, 2, 2 + (strlen(recname) + 2 ) );
strins( caption, recname, strlen(caption) / 2 );
strins( caption, \" \", strfind(caption, recname) );
strins( caption, \" \", strfind(caption, recname) + strlen(recname) );
print( \" \" );
print( caption );
print( \" \" );
 
print( \"                                 |---|---|---|\" );
printf( \"                                 |%03d|%03d|%03d|\", mNum[0], mNum[1], mNum[2] );
print( \"                                 |---|---|---|\" );
printf( \"                                 |%03d|%03d|%03d|\", mNum[3], mNum[4], mNum[5] );
print( \"                                 |---|---|---|\" );
printf( \"                                 |%03d|%03d|%03d|\", mNum[6], mNum[7], mNum[8] );
    print( \"                                 |---|---|---|\" );
   
   
   
    print( \" \" );
    print( \" ============================================================================== \" );
print( \" \" );
return 1;
}
stock getRecipeName( recipeid )
{
new rName[ 24 ];
if( recipeid == -1 )
{
    rName = \"Ismeretlen\";
    return rName;
}
if( strlen(recipename[recipeid]) ) format( rName, sizeof(rName), \"%s\", recipename[recipeid] );
else rName = \"Ismeretlen\";
return rName;
}
stock getItemNameFromRecipe( recipe[] )
{
new rName[ 24 ];
new id = returnRecipe( recipe );
format( rName, sizeof(rName), \"%s\", getRecipeName(id) );
return rName;
}
stock splitSYS(const strsrc[], strdest[][], delimiter) { // Átírva az <inc.> részére.
new i, li;
new aNum;
new len;
while(i <= strlen(strsrc)){
    if(strsrc==delimiter || i==strlen(strsrc)){
        len = strmid(strdest[aNum], strsrc, li, i + 1, 128);
        strdest[aNum][len] = 0;
        li = i+1;
        aNum++;
}
i++;
}
return 1;
}

Recept/Craft rendszer alap
« Válasz #1 Dátum: 2013. Július 04. - 17:22:23 »
0 Show voters
Ezt csak én nem értem vagy nemtudom. És a játékos hova rakja ki a cuccokat?

Recept/Craft rendszer alap
« Válasz #2 Dátum: 2013. Július 04. - 17:43:16 »
0 Show voters
Az inc. csak a mechanizmust, a keresést hozzáadást tartalmazza, magát a kezelõfelületet nektek kell létrehozni, inventoryhoz csatlakoztatni stb..[/quote]
Tehát a 3x3-mas rácsot nektek kell létrehozni mint textdraw. Ez maga a feldolgozás.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal