←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

[ROZWIĄZANE] Weapoin id - jak pobrać

Zablokowany

  • +
  • -
sebul - zdjęcie sebul 02.06.2012

Jak pobrać id dotkniętej broni (chodzi o te z CSW_*)?
Mam taki kod
(...)
register_touch("weaponbox", "player", "DotkniecieBroni");
(...)
public DotkniecieBroni(ent, id) {
if(!is_valid_ent(ent) || !is_user_alive(id))
return PLUGIN_CONTINUE;

return PLUGIN_CONTINUE;
}

i co konkretnie wpisać w tej funkcji "DotkniecieBroni"? Próbowałem sam na różne sposoby i niestety zawsze wychodzi mi, że id broni to 0. Chodzi mi oczywiście o jakiś prosty, krótki sposób, bo wiem, że można to chociażby zrobić za pomocą modelu broni, ale to wymaga wypisania każdego modelu i potem jakąś pętlą porównywać, a tego nie chcę.
Odpowiedz

  • +
  • -
Fili:P - zdjęcie Fili:P 02.06.2012

Spróbuj pobrać classname bytu broni i zamienić nazwe na id (w cstrike jest taka funkcja, która to zrobi chyba cs_get_weapon_id).
Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie GwynBleidD 02.06.2012

W parametrze ent otrzymujesz id entity, którego dotykasz. Jest to jednak ID kontenera zawierającego broń. Aby otrzymać entity konkretnej broni musisz znaleźć entity, którego rodzicem jest ten weapon box. Możesz też pobrać model z tego entity i na podstawie nazwy modelu znaleźć co to za broń. w GHW_Weap_Pickup jest to rozwiązane, popatrz sobie ;)
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 02.06.2012

Spróbuj pobrać classname bytu broni i zamienić nazwe na id (w cstrike jest taka funkcja, która to zrobi chyba cs_get_weapon_id).

Przecież classname będzie zwracać w tym przypadku "weaponbox", oczywiście sprawdziłem to przed chwilą, żeby być już pewnym w 100%.

W parametrze ent otrzymujesz id entity, którego dotykasz. Jest to jednak ID kontenera zawierającego broń.

To wiem, chodzi mi właśnie o to, jak te id zamienić na id broni.

Aby otrzymać entity konkretnej broni musisz znaleźć entity, którego rodzicem jest ten weapon box.

Jak to znaleźć? Id boxa jest "ownerem" dla broni, która w nim siedzi?

Co do modeli, to wiem, że tak można zrobić i wiem jak to można zrobić, ale chcę po prostu zrobić to inaczej.
sebul (02.06.2012 20:19):
Nawet robiąc to w taki sposób jak jest w "GHW_Weap_Pickup", to chociażby mp5 ma inną nazwę modelu niż normalną nazwę.
Odpowiedz

Gość_21977_* 02.06.2012

(...)
register_touch("weaponbox", "player", "DotkniecieBroni");
(...)
public DotkniecieBroni(ent, id) {
if(!is_valid_ent(ent) || !is_user_alive(id))
return PLUGIN_CONTINUE;

new wid=cs_get_weapon_id(ent);
// zmienna wid zawiera id broni (np. CSW_SCOUT)

return PLUGIN_CONTINUE;
}


albo kanapka:

(...)
RegisterHam(Ham_Touch, "weaponbox", "HamTouchPre", 0);
(...)
public HamTouchPre(weapon){
if(!pev_valid(weapon))
return HAM_IGNORED;

// zmienna weapon zawiera id broni (np. CSW_SCOUT)

return HAM_IGNORED;
}
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 02.06.2012

http://twhl.info/wiki.php?id=209

Czego mam tutaj szukać?

(...)
register_touch("weaponbox", "player", "DotkniecieBroni");
(...)
public DotkniecieBroni(ent, id) {
if(!is_valid_ent(ent) || !is_user_alive(id))
return PLUGIN_CONTINUE;

new wid=cs_get_weapon_id(ent);
// zmienna wid zawiera id broni (np. CSW_SCOUT)

return PLUGIN_CONTINUE;
}


albo kanapka:

(...)
RegisterHam(Ham_Touch, "weaponbox", "HamTouchPre", 0);
(...)
public HamTouchPre(weapon){
if(!pev_valid(weapon))
return HAM_IGNORED;

// zmienna weapon zawiera id broni (np. CSW_SCOUT)

return HAM_IGNORED;
}

Pierwsze już sprawdzałem na samym początku i właśnie wtedy zwraca 0, a kanapką to chyba tak od razu nie ma id broni, ale jeszcze sprawdzę.

EDIT:
Tak jak myślałem, w kanapce ten parametr to id tego bytu "weaponbox".
Odpowiedz

Gość_21977_* 02.06.2012

Tu masz kod z AM, podobno działa:


#include <amxmodx>
#include <fakemeta>
#include <cstrike>

new g_hTouch = 0

public plugin_init()
{
g_hTouch = register_forward(FM_Touch, "onTouch")
}

public plugin_end()
{
if(g_hTouch) {
unregister_forward(FM_Touch, g_hTouch)
g_hTouch = 0
}
}

public onTouch(eid, pid)
{
if(!eid) return FMRES_IGNORED

if(isWeapon(eid))
{
new ent = FindEntityByOwner(eid)

if(ent)
{
server_print("[AMXX] cs_get_weapon_id(%d) = %d", eid, cs_get_weapon_id(ent))
}
}

return FMRES_IGNORED
}

stock FindEntityByOwner(owner)
{
new i;

for(i = get_maxplayers() + 1; i < global_get(glb_maxEntities); i++)
{
if(pev(i, pev_owner) == owner)
{
break;
}
}

return i;
}

stock bool:isWeapon(ent_id)
{
static pStr
static sBuffer[11] // sizeof("weaponbox") + 1

pev(ent_id, pev_classname, pStr, sBuffer, sizeof(sBuffer)-1)

server_print("%s", sBuffer);

return bool:equal(sBuffer, "weaponbox")
}

Autor: teame06 w temacie AM :: 49051
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 02.06.2012

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Pomoc udzielona

Jeśli się z tym nie zgadzasz, Dołączona grafika raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL
Odpowiedz
Zablokowany