Fakemeta czy Hamsandwich ?
AztekHQS 12.12.2012
Zastanawiam się sktóry stock jest lepszy do dawania broni.
Nie chcę używać fun'a
czy
Nie chcę używać fun'a
stock ham_give_weapon(id, weapon[]) {
if(!equal(weapon, "weapon_", 7) ) return 0
new wEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, weapon))
if(!pev_valid(wEnt)) return 0
set_pev(wEnt, pev_spawnflags, SF_NORESPAWN)
dllfunc(DLLFunc_Spawn, wEnt)
if(!ExecuteHamB(Ham_AddPlayerItem, id, wEnt)) {
if(pev_valid(wEnt)) set_pev(wEnt, pev_flags, pev(wEnt, pev_flags) | FL_KILLME)
return 0
}
ExecuteHamB(Ham_Item_AttachToPlayer, wEnt, id)
return 1
}
czy
stock fm_give_item(index, const item[]) {
if(!equal(item, "weapon_", 7)) return 0
new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, item))
if(!pev_valid(ent)) return 0
new Float:origin[3]
pev(index, pev_origin, origin)
set_pev(ent, pev_origin, origin)
set_pev(ent, pev_spawnflags, pev(ent, pev_spawnflags) | SF_NORESPAWN)
dllfunc(DLLFunc_Spawn, ent)
new save = pev(ent, pev_solid)
dllfunc(DLLFunc_Touch, ent, index)
if(pev(ent, pev_solid) != save) return ent
engfunc(EngFunc_RemoveEntity, ent)
return -1
}
Krytykiewicz
12.12.2012
Dlaczego nie chcesz użyć fun-a? Będzie wydajniejszy w tym wypadku Chociaż.. Zależy też co chcesz dokładniej zrobić z tym dawaniem broni.
Edited by Krytykiewicz, 12.12.2012 14:08.
Edited by Krytykiewicz, 12.12.2012 14:08.
AztekHQS 12.12.2012
Wiem, że fun jest szybszy, ale jakoś 'nie lubię tego modułu '
dlatego szukam dobrego zamiennika give_item
dlatego szukam dobrego zamiennika give_item
sebul
12.12.2012
To zacznij go "lubić".Wiem, że fun jest szybszy, ale jakoś 'nie lubię tego modułu '
dlatego szukam dobrego zamiennika give_item
W tym przypadku co tutaj podałeś, to chyba fakemeta, choć to wszystko zależy od tego, gdzie chcesz używać tych funkcji.
Cypis'
12.12.2012
Oba stocki dzialają, wiec obojętnie którego użyjesz
Pierwszy stock to fakemeta+ham
Drugi stock to fakemeta
Ew. możesz użyć orpheu lub rage
Pierwszy stock to fakemeta+ham
Drugi stock to fakemeta
Ew. możesz użyć orpheu lub rage
Krytykiewicz
12.12.2012
Oba stocki dzialają, wiec obojętnie którego użyjesz
Pierwszy stock to fakemeta+ham
Drugi stock to fakemeta
Ew. możesz użyć orpheu lub rage
A orpheu będzie wydajniejsze?
Gość_21977_* 15.12.2012
Zdecydowanie nie używaj fakemety, zwłaszcza fm_give_item
Jeśli tylko możesz, to staraj się używać modułu fun, ew. hamsandwich
stock fm_give_item nie zawsze działa poprawnie i wykonuje parę zbędnych czynności, ale to
odwołuję do kodu źródłowego, ew. do dyskusji na ten temat na AM, nie będę powielał tej kwestii.
Jeśli tylko możesz, to staraj się używać modułu fun, ew. hamsandwich
stock fm_give_item nie zawsze działa poprawnie i wykonuje parę zbędnych czynności, ale to
odwołuję do kodu źródłowego, ew. do dyskusji na ten temat na AM, nie będę powielał tej kwestii.
AztekHQS 15.12.2012
benio101, czyli po Twojej wypowiedzi mogę stwierdzić ze najlepszym rozwiązaniem jest używanie 'funowskiego' give_item ?
"ew. hamsadwich" to co masz dokładnie na myśli ?
"ew. hamsadwich" to co masz dokładnie na myśli ?
Gość_21977_* 15.12.2012
[TUT] Modules and efficient scripting - Fakty, statystyki i porady na ten temat
Engine -> Fakemeta and HamSandwich -> Fakemeta, Wytłumaczenie, dlaczego mniejsza liczba modułów NIE JEST lepsza, niż używanie funkcji, czyli dlaczego nie warto rezygnować z modułu kosztem dłuższego działania, zwłaszcza fakemety.
I masa innych tematów, jednak odsyłam do samodzielnego poszukiwania.
Podsumowując, tak, zdecydowanie polecam funowskiego give_item, choć polecam przejrzeć dokładnie tematy (m.in. te zalinkowane z AM) na ten temat, sprawdzić i samemu się przekonać.
Engine -> Fakemeta and HamSandwich -> Fakemeta, Wytłumaczenie, dlaczego mniejsza liczba modułów NIE JEST lepsza, niż używanie funkcji, czyli dlaczego nie warto rezygnować z modułu kosztem dłuższego działania, zwłaszcza fakemety.
I masa innych tematów, jednak odsyłam do samodzielnego poszukiwania.
Podsumowując, tak, zdecydowanie polecam funowskiego give_item, choć polecam przejrzeć dokładnie tematy (m.in. te zalinkowane z AM) na ten temat, sprawdzić i samemu się przekonać.
sebul
15.12.2012
Nie wiem czy tak zdecydowanie, fakemety używać można, ale tak jak napisałeś (zresztą ja po części też), że do dawania broni lepiej używać funa. Ogólnie sam mało korzystam z fakemety, ale jeśli coś można zrobić tylko w tym module, to przeważnie już nie używam innych modułów, jeśli jest taka możliwość, no chyba że mowa tutaj o modach typu diablo, gdzie jest sporo linijek kodu.Zdecydowanie nie używaj fakemety
AztekHQS 15.12.2012
Piszecie tak o fakemeta, ale nie dowiedziałem się nic o sposobie hamsadwich
Gość_21977_* 16.12.2012
Jeśli tylko można zastąpić fakemetę innymi modułami, najczęściej engine, czasem funem, to warto to zrobić, bo są po prostu szybsze.
Dla niektórych operacji fakemeta nie ma zamienników, bądź ich zamienniki są mniej wydajne, wtedy ozcywiście należy korzystać z fakemety.
Jednak funkcję fm_give_itemzdecydowanie polecam zastąpić funowskim odpowiednikiem nawet, gdyby miała dojść kolejna biblioteka, gdyż jest po prostu szybsze.
btw. O metodzie kanapki z szynką z fałszywym celem wiem, że jest szybsza od fm_give_item, jednak nie zagłębiałem się w nią za bardzo, więc nie chcę Cię wprowadzić w błąd.
Dla niektórych operacji fakemeta nie ma zamienników, bądź ich zamienniki są mniej wydajne, wtedy ozcywiście należy korzystać z fakemety.
Jednak funkcję fm_give_itemzdecydowanie polecam zastąpić funowskim odpowiednikiem nawet, gdyby miała dojść kolejna biblioteka, gdyż jest po prostu szybsze.
btw. O metodzie kanapki z szynką z fałszywym celem wiem, że jest szybsza od fm_give_item, jednak nie zagłębiałem się w nią za bardzo, więc nie chcę Cię wprowadzić w błąd.
Cypis'
16.12.2012
Dobra napisałem pod orpheu, pod rage nie napisze bo nie umiem
plugin
Sygne wrzucamy do orpheu/functions/CBasePlayer pod nazwa GiveNamedItem
Jeżeli nie ma folderu CBasePlayer to go tworzymy
sygna:
plugin
#include <amxmodx>
#include <amxmisc>
#include <orpheu>
#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "author"
new OrpheuFunction:playerGiveItem;
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
playerGiveItem = OrpheuGetFunction("GiveNamedItem","CBasePlayer");
register_clcmd("say /test", "funkcja");
}
public funkcja(id)
{
OrpheuCall(playerGiveItem, id, "weapon_m4a1");
}
Sygne wrzucamy do orpheu/functions/CBasePlayer pod nazwa GiveNamedItem
Jeżeli nie ma folderu CBasePlayer to go tworzymy
sygna:
{
"name" : "GiveNamedItem",
"class" : "CBasePlayer",
"library" : "mod",
"arguments" :
[
{
"type" : "int",
"type" : "char *"
}
],
"identifiers":
[
{
"os" : "linux",
"mod" : "cstrike",
"value" : "GiveNamedItem__11CBasePlayerPCc"
}
]
}