←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

CoD Nowy
[ROZWIĄZANE] Problem z perkiem wyrzucanie...

Locked

  • +
  • -
Kaleka's Photo Kaleka 22.11.2011

Standardowo perk wyglądał tak:
#include <amxmodx>
#include <codmod>

new const perk_name[] = "Wyrzucenie Broni";
new const perk_desc[] = "Masz 1/5 szans na wyrzucenie broni przeciwnika";

new bool:ma_perk[33];

public plugin_init()
{
register_plugin(perk_name, "1.0", "QTM_Peyote");

cod_register_perk(perk_name, perk_desc);

register_event("Damage", "Damage", "b", "2!=0");
}

public cod_perk_enabled(id, wartosc)
ma_perk[id] = true;

public cod_perk_disabled(id)
ma_perk[id] = false;

public Damage(id)
{
new idattacker = get_user_attacker(id);

if(!is_user_alive(idattacker))
return;

if(!ma_perk[idattacker])
return;

if(random_num(1, 5) != 1)
return;

client_cmd(id, "drop");
}


Edytowałem fukcje Damage(id) ponieważ miałem 'chyba' bug z tym, że czasem atakującemu wyrzucało broń:

public Damage(id)
{
new idattacker = get_user_attacker(id);

new ofiara = read_data( 2 );

if(!is_user_alive(idattacker) && !is_user_alive(ofiara))
return;

if(!ma_perk[idattacker])
return;

if(random_num(1, 5) != 1)
return;

client_cmd(ofiara, "drop");
}



Czy zrobiłem to dobrze? nie działa mi wyrzucanie broni, czy czasem nie powinienem podmienić fukncji Damage(id) na:
public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
if(!is_user_connected(idattacker))
return HAM_IGNORED;

if(!ma_perk[idattacker])
return HAM_IGNORED;

if(get_user_team(this) != get_user_team(idattacker) && random_num(1, 5) == 1 && damagebits & DMG_BULLET)
client_cmd(this, "drop");

return HAM_IGNORED;
}
Quote

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

Powinieneś ale musiałbyś dodać hamsandwich do pluginu i RegisterHam typu Take Damage do plugin init.
Quote

  • +
  • -
Kaleka's Photo Kaleka 22.11.2011

Powinieneś ale musiałbyś dodać hamsandwich do pluginu i RegisterHam typu Take Damage do plugin init.


To oczywiste ;) , przetestuje zaraz czy po podmianie Damage na Take_Damage perk działa normalnie ;>
Quote

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


#include <amxmodx>
#include <codmod>
#include <hamsandwich>

new const perk_name[] = "Wyrzucenie Broni";
new const perk_desc[] = "Masz 1/5 szans na wyrzucenie broni przeciwnika";

new bool:ma_perk[33];

public plugin_init()
{
register_plugin(perk_name, "1.0", "QTM_Peyote");

cod_register_perk(perk_name, perk_desc);

RegisterHam(Ham_TakeDamage, "player", "TakeDamage");
}

public cod_perk_enabled(id, wartosc)
ma_perk[id] = true;

public cod_perk_disabled(id)
ma_perk[id] = false;

public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
if(!is_user_connected(idattacker))
return HAM_IGNORED;

if(!ma_perk[idattacker])
return HAM_IGNORED;

if(get_user_team(this) != get_user_team(idattacker) && random_num(1, 5) == 1 && damagebits & DMG_BULLET)
client_cmd(this, "drop");

return HAM_IGNORED;
}
Quote

  • +
  • -
Kaleka's Photo Kaleka 22.11.2011

@UP
Wymagało poprawek, ale przyda się komuś leci +

Dla tych którzy chcieli by mieć losową wartość na wyrzucenie broni przeciwnika:

#include <amxmodx>
#include <codmod>
#include <hamsandwich>

#define DMG_BULLET (1<<1)

new const perk_name[] = "Wyrzucenie Broni";
new const perk_desc[] = "Masz 1/LW szans na wyrzucenie broni przeciwnika"; // szansa 1/3-10

new bool:ma_perk[33];
new wartosc_perku[33];

public plugin_init()
{
register_plugin(perk_name, "1.0", "QTM_Peyote");

cod_register_perk(perk_name, perk_desc, 3, 10); // zmien 3 i 10 aby zmienic losowa wartosc od 1/3-10

RegisterHam(Ham_TakeDamage, "player", "TakeDamage");
}

public cod_perk_enabled(id, wartosc)
{
ma_perk[id] = true;
wartosc_perku[id] = wartosc; // nadaje wartosc perku
}

public cod_perk_disabled(id)
ma_perk[id] = false;

public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
if(!is_user_connected(idattacker))
return HAM_IGNORED;

if(!is_user_alive(idattacker) && !is_user_alive(this))
return HAM_IGNORED;

if(!ma_perk[idattacker])
return HAM_IGNORED;


if(get_user_team(this) != get_user_team(idattacker) && random_num(1, wartosc_perku[idattacker]) == 1 && damagebits & DMG_BULLET)
client_cmd(this, "drop");

// To wyzej sprawdza czy atakujacy nie atakuje swojego oraz losuje 1/wartosc_perku

return HAM_IGNORED;
}


Do zamknięcia.
Quote

  • +
  • -
Goliath's Photo Goliath 22.11.2011

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