Hellosztok!
Szeretném bemutatni az újonnan készült függvénykönyvtáram, amely segítségével könnyen készíthettek fegyver, élet, páncél és pénz pickuppokat. A függvénykönyvtár mellé jut egy filterscript is mely segítségével könnyen készíthettek pickuppokat.
Készítési idõ: kb. 45 perc.
Tulajdonos: DrAkE (Én)
Kiadatási dátum: 2011. 04. 12.
Függvények:
- CreateWeaponPickup(pickupid, wepid, ammo, Float:Xpos, Float:Ypos, Float:Zpos, interior=-1, virtual=-1, playerid=-1)
- CreateHealthPickup(pickupid, health, Float:Xpos, Float:Ypos, Float:Zpos, interior=-1, virtual=-1, playerid=-1)
- CreateArmourPickup(pickupid, armour, Float:Xpos, Float:Ypos, Float:Zpos, interior=-1, virtual=-1, playerid=-1)
- CreateMoneyPickup(pickupid, money, Float:Xpos, Float:Ypos, Float:Zpos, interior=-1, virtual=-1, playerid=-1)
Parancsok:
- /cwp [pickupid(1/2/3)] [fegyverid] [lõszer] [komment(nem szükséges)]
- /chp [pickupid(1/2/3)] [élet] [komment(nem szükséges)]
- /cap [pickupid(1/2/3)] [páncél] [komment(nem szükséges)]
- /cmp [pickupid(1/2/3)] [pénz] [komment(nem szükséges)]
A parancsok segítségével készíthettek könnyedén pickuppokat melyeket egy fájlba ment! (Játékban nem hozza létre a pickuppokat!)
Pickup idkrõl:
- 1 - Felvehetõ, néhány perc elteltével újra respawnol.
- 2 - Felvehetõ, halál után respawnol.
- 3 - Spawn után, néhány perc elteltével eltûnik (fegyver dropphoz tökéletes).
Függvénykönyvtár:
/*
* DrA Pickup 1.0.1
* Minden jog fenttartva! © By: DrAkE
*
* Tulajdonos : DrAkE
* Idõ : 2011.04.12
*
* A függvény szabadon terjeszthetõ.
* És természetesen szabadon használható :D
* Köszönet:
* Y_Less - sscanf2
* DracoBlue - dcmd
* Incognito - streamer
*
* Külön köszönet:
* Thiadmer - PAWN.
* SA:MP Csapat múlt, jelen, jövõ - SA:MP.
*
*
* Funkciók:
* CreateWeaponPickup - Fegyver pickup készítése.
* CreateHealthPickup - Élet pickup készítése.
* CreateArmourPickup - Páncél pickup készítése.
* CreateMoneyPickup - Pénz pickup készítése
*/
/*
native CreateWeaponPickup(pickupid, wepid, ammo, Float:Xpos, Float:Ypos, Float:Zpos, interior=-1, virtual=-1, playerid=-1);
native CreateHealthPickup(pickupid, health, Float:Xpos, Float:Ypos, Float:Zpos, interior=-1, virtual=-1, playerid=-1)
native CreateArmourPickup(pickupid, armour, Float:Xpos, Float:Ypos, Float:Zpos, interior=-1, virtual=-1, playerid=-1)
native CreateMoneyPickup(pickupid, money, Float:Xpos, Float:Ypos, Float:Zpos, interior=-1, virtual=-1, playerid=-1)
*/
#include <streamer>
#define MAXPICKUPS 100
enum Fegyver
{
pickup,
modell,
loszer,
Float:X,
Float:Y,
Float:Z
}
new EletInfo[MAXPICKUPS][2];
new PancelInfo[MAXPICKUPS][2];
new PenzInfo[MAXPICKUPS][2];
new FegyverInfo[MAXPICKUPS][Fegyver];
new FegyverObject[] = {
0, // Ököl
331, // Boxer
333, // Golf Ütõ
334, // Nitestick
335, // Kés
336, // Bézbóz ütõ
337, // Ásó
338, // Biliárd ütõ
339, // Catana
341, // Fûrész
321, // Lila Dildo
322, // Rövid Fehér Dildo
323, // Hosszú Fehér Dildo
324, // Vibrátor
325, // Virágok
326, // Cane
342, // Gránát
343, // Könny Gáz
344, // Molotov
0,
0,
0,
346, // Glock
347, // Hangtompítós Colt
348, // Desert Eagle
349, // Shotgun
350, // Sawn Off
351, // Combat Shotgun
352, // Micro UZI
353, // MP5
355, // AK47
356, // M4
372, // Tec9
357, // Rifle
358, // Távcsöves
359, // Rakéta Vetõ
360, // Hõ Követõ Rakéta Indító
361, // Lángszóró
362, // Minigun
363, // Detonátor táska
364, // Detonátor Gomb
365, // Spray
366, // Fire Extinguisher
367, // Fényképezõ
368, // Éjjellátó
368, // Infra szemüveg
371 // Ejtõernyõ
};
/*----------------------------------------------------------------------------*-
Funkció:
CreateWeaponPickup
Paraméterei:
pickupid - A pickup típusa (1 - Felvehetõ, néhány perc elteltével újra respawnol, 2 - Felvehetõ, halál után respawnol, 3 - Spawn után, néhány perc elteltével eltûnik (fegyver dropphoz tökéletes).
wepid - A fegyver idje.
ammo - A fegyver lõszer mennyisége.
Xpos - A pickup X helyzete.
Ypos - A pickup Y helyzete.
Zpos - A pickup Z helyzete.
interior - Melyik interiorba szeretnéd létrehozni (elhagyható paraméter).
virtual - Melyik virtuális világba szeretnéd létrehozni (elhagyható paraméter).
Visszatérése: Nincs
-*----------------------------------------------------------------------------*/
stock
CreateWeaponPickup(pickupid, wepid, ammo, Float:Xpos, Float:Ypos, Float:Zpos, interior=-1, virtual=-1, playerid=-1)
{
if(wepid >= 0)
{
if(ammo >= 0)
{
new fegyver;
for(new a = 0; a < MAXPICKUPS; a++)
{
if(FegyverInfo[a][X] == 0.0)
{
fegyver = a;
break;
}
}
if(fegyver > MAXPICKUPS) return print(\"HIBA: Növelld a pickup limit számát (MAXPICKUPS)\");
else{
if(pickupid) pickupid = 2;
else if(!pickupid) pickupid = 3;
else if(pickupid == 3) pickupid = 4;
FegyverInfo[fegyver][modell] = wepid;
FegyverInfo[fegyver][loszer] = ammo;
FegyverInfo[fegyver][X] = Xpos;
FegyverInfo[fegyver][Y] = Ypos;
FegyverInfo[fegyver][Z] = Zpos;
FegyverInfo[fegyver][pickup] = CreateDynamicPickup(FegyverObject[FegyverInfo[fegyver][modell]], pickupid, FegyverInfo[fegyver][X], FegyverInfo[fegyver][Y], FegyverInfo[fegyver][Z], virtual, interior, playerid);
return fegyver;
}
}else print(\"HIBA: A lõszer értéke nem lehet egyenlõ a nullával (0)!\");
}else print(\"HIBA: A fegyverid értéke nem lehet egyenlõ a nullával (0)!\");
return 0;
}
/*----------------------------------------------------------------------------*-
Funkció:
CreateHealthPickup
Paraméterei:
pickupid - A pickup típusa (1 - Felvehetõ, néhány perc elteltével újra respawnol, 2 - Felvehetõ, halál után respawnol, 3 - Spawn után, néhány perc elteltével eltûnik (fegyver dropphoz tökéletes).
health - A pickup mennyi életet adjon a felvevõnek.
Xpos - A pickup X helyzete.
Ypos - A pickup Y helyzete.
Zpos - A pickup Z helyzete.
interior - Melyik interiorba szeretnéd létrehozni (elhagyható paraméter).
virtual - Melyik virtuális világba szeretnéd létrehozni (elhagyható paraméter).
Visszatérése: Nincs
-*----------------------------------------------------------------------------*/
stock
CreateHealthPickup(pickupid, health, Float:Xpos, Float:Ypos, Float:Zpos, interior=-1, virtual=-1, playerid=-1)
{
if(health != 0)
{
new elet;
for(new a = 0; a < MAXPICKUPS; a++)
{
if(EletInfo[a][0] == 0)
{
elet = a;
break;
}
}
if(elet > MAXPICKUPS) return print(\"HIBA: Növelld a pickup limit számát (MAXPICKUPS)\");
else{
if(pickupid) pickupid = 2;
else if(!pickupid) pickupid = 3;
else if(pickupid == 3) pickupid = 4;
EletInfo[elet][0] = health;
EletInfo[elet][1] = CreateDynamicPickup(1240, pickupid, Xpos, Ypos, Zpos, virtual, interior, playerid);
return elet;
}
}else print(\"HIBA: Az élet értéke nem lehet egyenlõ nullával (0)!\");
return 0;
}
/*----------------------------------------------------------------------------*-
Funkció:
CreateArmourPickup
Paraméterei:
pickupid - A pickup típusa (1 - Felvehetõ, néhány perc elteltével újra respawnol, 2 - Felvehetõ, halál után respawnol, 3 - Spawn után, néhány perc elteltével eltûnik (fegyver dropphoz tökéletes).
armour - A pickup mennyi páncélt adjon a felvevõnek.
Xpos - A pickup X helyzete.
Ypos - A pickup Y helyzete.
Zpos - A pickup Z helyzete.
interior - Melyik interiorba szeretnéd létrehozni (elhagyható paraméter).
virtual - Melyik virtuális világba szeretnéd létrehozni (elhagyható paraméter).
Visszatérése: Nincs
-*----------------------------------------------------------------------------*/
stock
CreateArmourPickup(pickupid, armour, Float:Xpos, Float:Ypos, Float:Zpos, interior=-1, virtual=-1, playerid=-1)
{
if(armour != 0)
{
new pancel;
for(new a = 0; a < MAXPICKUPS; a++)
{
if(PancelInfo[a][0] == 0)
{
pancel = a;
break;
}
}
if(pancel > MAXPICKUPS) return print(\"HIBA: Növelld a pickup limit számát (MAXPICKUPS)\");
else{
if(pickupid) pickupid = 2;
else if(!pickupid) pickupid = 3;
else if(pickupid == 3) pickupid = 4;
PancelInfo[pancel][0] = armour;
PancelInfo[pancel][1] = CreateDynamicPickup(373, pickupid, Xpos, Ypos, Zpos, virtual, interior, playerid);
return pancel;
}
}else print(\"HIBA: A páncél értéke nem lehet egyenlõ nullával (0)!\");
return 0;
}
/*----------------------------------------------------------------------------*-
Funkció:
CreateMoneyPickup
Paraméterei:
pickupid - A pickup típusa (1 - Felvehetõ, néhány perc elteltével újra respawnol, 2 - Felvehetõ, halál után respawnol, 3 - Spawn után, néhány perc elteltével eltûnik (fegyver dropphoz tökéletes).
money - A pickup mennyi pénzt adjon a felvevõnek.
Xpos - A pickup X helyzete.
Ypos - A pickup Y helyzete.
Zpos - A pickup Z helyzete.
interior - Melyik interiorba szeretnéd létrehozni (elhagyható paraméter).
virtual - Melyik virtuális világba szeretnéd létrehozni (elhagyható paraméter).
Visszatérése: Nincs
-*----------------------------------------------------------------------------*/
stock
CreateMoneyPickup(pickupid, money, Float:Xpos, Float:Ypos, Float:Zpos, interior=-1, virtual=-1, playerid=-1)
{
if(money != 0)
{
new penz;
for(new a = 0; a < MAXPICKUPS; a++)
{
if(PenzInfo[a][0] == 0)
{
penz = a;
break;
}
}
if(penz > MAXPICKUPS) return print(\"HIBA: Növelld a pickup limit számát (MAXPICKUPS)\");
else{
if(pickupid) pickupid = 2;
else if(!pickupid) pickupid = 3;
else if(pickupid == 3) pickupid = 4;
PenzInfo[penz][0] = money;
PenzInfo[penz][1] = CreateDynamicPickup(1212, pickupid, Xpos, Ypos, Zpos, virtual, interior, playerid);
return penz;
}
}else print(\"HIBA: A pénz értéke nem lehet egyenlõ nullával (0)!\");
return 0;
}
public OnPlayerPickUpDynamicPickup(playerid, pickupid)
{
for(new i = 0; i < MAXPICKUPS; i++)
{
if(pickupid == FegyverInfo[pickup])
{
GivePlayerWeapon(playerid, FegyverInfo[modell], FegyverInfo[loszer]);
break;
}
else if(pickupid == EletInfo[1])
{
new Float:health;
GetPlayerHealth(playerid, health);
SetPlayerHealth(playerid, (health+EletInfo[0]));
break;
}
else if(pickupid == PancelInfo[1])
{
new Float:armour;
GetPlayerArmour(playerid, armour);
SetPlayerArmour(playerid, (armour+PancelInfo[0]));
break;
}
else if(pickupid == PenzInfo[1])
{
GivePlayerMoney(playerid, PenzInfo[0]);
break;
}
}
return 1;
}
Segéd script:
#include <a_samp>
#include <sscanf2>
#define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, \"\")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
#define COLOR_WHITE 0xFFFFFFFF
new string[256];
public OnFilterScriptInit()
{
print(\"\\n--------------------------------------\");
print(\" Pickup lerakó betöltve By DrAkE\");
print(\"--------------------------------------\\n\");
return 1;
}
public OnFilterScriptExit()
{
return 1;
}
dcmd_cwp(playerid, params[])
{
new Float:pos[3];
new id, fegyverid, loszer, komment[128];
if(sscanf(params, \"dddS()\", id, fegyverid, loszer, komment)) return SendClientMessage(playerid, COLOR_WHITE, \"HASZNÁLAT: /cwp [pickupid(1/2/3)] [fegyverid] [lõszer] [komment jelzõ]\");
else{
GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
format(string, sizeof(string), \"CreateWeaponPickup(%d, %d, %d, %f, %f, %f, %d, %d);%s%s\\r\\n\", id, fegyverid, loszer, pos[0], pos[1], pos[2], GetPlayerInterior(playerid), GetPlayerVirtualWorld(playerid), komment[0] ? (\" // \") : (\"\"), komment);
new File:fajl = fopen(\"savedposition.txt\", io_append);
fwrite(fajl, string);
fclose(fajl);
SendClientMessage(playerid, COLOR_WHITE, \"SERVER: Pickup létrehozva!\");
}
return 1;
}
dcmd_chp(playerid, params[])
{
new Float:pos[3];
new id, elet, komment[128];
if(sscanf(params, \"ddS()\", id, elet, komment)) return SendClientMessage(playerid, COLOR_WHITE, \"HASZNÁLAT: /chp [pickupid(1/2/3)] [élet] [komment jelzõ]\");
else{
GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
format(string, sizeof(string), \"CreateHealthPickup(%d, %d, %f, %f, %f, %d, %d);%s%s\\r\\n\", id, elet, pos[0], pos[1], pos[2], GetPlayerInterior(playerid), GetPlayerVirtualWorld(playerid), komment[0] ? (\" // \") : (\"\"), komment);
new File:fajl = fopen(\"savedposition.txt\", io_append);
fwrite(fajl, string);
fclose(fajl);
SendClientMessage(playerid, COLOR_WHITE, \"SERVER: Pickup létrehozva!\");
}
return 1;
}
dcmd_cap(playerid, params[])
{
new Float:pos[3];
new id, pancel, komment[128];
if(sscanf(params, \"ddS()\", id, pancel, komment)) return SendClientMessage(playerid, COLOR_WHITE, \"HASZNÁLAT: /cap [pickupid(1/2/3)] [páncél] [komment jelzõ]\");
else{
GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
format(string, sizeof(string), \"CreateArmourPickup(%d, %d, %f, %f, %f, %d, %d);%s%s\\r\\n\", id, pancel, pos[0], pos[1], pos[2], GetPlayerInterior(playerid), GetPlayerVirtualWorld(playerid), komment[0] ? (\" // \") : (\"\"), komment);
new File:fajl = fopen(\"savedposition.txt\", io_append);
fwrite(fajl, string);
fclose(fajl);
SendClientMessage(playerid, COLOR_WHITE, \"SERVER: Pickup létrehozva!\");
}
return 1;
}
dcmd_cmp(playerid, params[])
{
new Float:pos[3];
new id, penz, komment[128];
if(sscanf(params, \"ddS()\", id, penz, komment)) return SendClientMessage(playerid, COLOR_WHITE, \"HASZNÁLAT: /cmp [pickupid(1/2/3)] [pénz] [komment jelzõ]\");
else{
GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
format(string, sizeof(string), \"CreateMoneyPickup(%d, %d, %f, %f, %f, %d, %d);%s%s\\r\\n\", id, penz, pos[0], pos[1], pos[2], GetPlayerInterior(playerid), GetPlayerVirtualWorld(playerid), komment[0] ? (\" // \") : (\"\"), komment);
new File:fajl = fopen(\"savedposition.txt\", io_append);
fwrite(fajl, string);
fclose(fajl);
SendClientMessage(playerid, COLOR_WHITE, \"SERVER: Pickup létrehozva!\");
}
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
dcmd(cwp, 3, cmdtext);
dcmd(chp, 3, cmdtext);
dcmd(cap, 3, cmdtext);
dcmd(cmp, 3, cmdtext);
return 0;
}
Vagy ha valamelyikõtök lusta lenne lentebb megtalálhatjátok a letöltõ linket! (Pluginnal, függvénykönyvtárakkal és a scriptel együtt!)
Letöltés:
http://solidfiles.com/d/f05c7/U.I.: Ha van még ötletetek mit rakhatnék bele nyugodtan írjátok ide!
Hi!
Nagyon tetszik ;)
Jó lett.
Gratulálok hozzá ,nekem nagyon tetszik.Am DaraDevil-nek is pont jól jött szerintem ;)
Majd készítek ennek segítségével fegyver droppot! :D
Hogy valaki folytassa az építõ jellegû kritikát az oldalon.
Amúgy szép munka bár én nem fogom használni. :D
new FegyverObject[][] = {
{0},// Ököl
{331},// Boxer
{333},// Golf Ütõ
Miért multidimenziós ez a változó?
Code optimisations
Excess dimensions
I don\'t know why people do this, I\'m pretty sure they copy it from one of the more common modes, but that doesn\'t make it right and I don\'t know why it was done this way in the first place. If you have an array of values, don\'t waste dimensions. Example:
I have an array of 10 values, let\'s for the sake of argument call them weapon prices. So we have 10 weapons, each with a price, and we want to store them in an array. Each weapon has an ID, from 0 to 9, so to get that weapon\'s price you need to access that index in the array:
new
gPrices[10] = // 10 weapons, thus 10 prices
{
1000,
2000,
5000,
2000,
10000,
500,
3000,
2000,
100,
750
};
new
weaponPrice = gPrices[5];
That\'s all you need - it\'s BASIC array access, and yet for some reason people insist on doing the following:
new
gPrices[10][1] = // 10 weapons, thus 10 prices
{
{1000},
{2000},
{5000},
{2000},
{10000},
{500},
{3000},
{2000},
{100},
{750}
};
new
weaponPrice = gPrices[5][0];
What purpose does the extra dimension serve? None at all! If you had two prices per weapon then yes - you would need the extra dimension, but you don\'t so you don\'t - just don\'t do it, simple as! It\'s a waste of time - it\'s slower and a waste of space - it\'s bigger.
[/quote]
print(\"HIBA: A fegyverid és a lõszer értéke nem lehet egyenlõ a nullával (0)!\");[/quote]
Ez az üzenet helyett miért nem vizsgálod meg inkább hogy a wepid és ammo kisebb-e mint 1 és ha igen akkor meg beállítod 1-re vagy amire akarod, ez vonatkozik a többire is.
Ahogy most van vizsgálva csak 0 nem lehet mi van ha negatív értéket ír be valaki?
És ezt csak mellékesen jegyzem meg
#include <streamer>
Ezt is felhasználja a függvénykönyvtár? Nem találtam hogy le lenne írva valahol,
de mindent összevetve biztos jól jön valakinek, csak így tovább. :D
Javítva! Köszönöm megfigyelésedet!
Nagyon jó lett, Grat!
Majd készítek ennek segítségével fegyver droppot! :D
Már várom! :D