←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Fakemeta czy Hamsandwich ?

Locked

AztekHQS's Photo AztekHQS 12.12.2012

Zastanawiam się sktóry stock jest lepszy do dawania broni.
Nie chcę używać fun'a :P

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

  • +
  • -
Krytykiewicz's Photo 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.
Quote

AztekHQS's Photo AztekHQS 12.12.2012

Wiem, że fun jest szybszy, ale jakoś 'nie lubię tego modułu :P'
dlatego szukam dobrego zamiennika give_item
Quote

  • +
  • -
sebul's Photo sebul 12.12.2012

Wiem, że fun jest szybszy, ale jakoś 'nie lubię tego modułu :P'
dlatego szukam dobrego zamiennika give_item

To zacznij go "lubić".

W tym przypadku co tutaj podałeś, to chyba fakemeta, choć to wszystko zależy od tego, gdzie chcesz używać tych funkcji.
Quote

  • +
  • -
Cypis''s Photo 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 :)
Quote

  • +
  • -
Krytykiewicz's Photo 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? :>
Quote

AztekHQS's Photo AztekHQS 12.12.2012

możesz użyć orpheu lub rage

Podasz sposoby ?
Quote

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.
Quote

AztekHQS's Photo 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 ?
Quote

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ć.
Quote

  • +
  • -
sebul's Photo sebul 15.12.2012

Zdecydowanie nie używaj fakemety

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.
Quote

AztekHQS's Photo AztekHQS 15.12.2012

Piszecie tak o fakemeta, ale nie dowiedziałem się nic o sposobie hamsadwich :)
Quote

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.
Quote

  • +
  • -
Cypis''s Photo Cypis' 16.12.2012

Dobra napisałem pod orpheu, pod rage nie napisze bo nie umiem

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"
}
]
}

Attached Files

Quote

  • +
  • -
Krytykiewicz's Photo Krytykiewicz 16.12.2012

Orpheu jest szybsze od funa ?
Quote

  • +
  • -
Fili:P's Photo Fili:P 25.12.2012

Orpheu jest szybsze od funa ?

W tym przypadku, wątpie.
Quote
Locked