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;
}