←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

[ROZWIĄZANE] Blokada kupienia HE

Locked

  • +
  • -
sebul's Photo sebul 04.01.2012

W jednym pluginie blokuję możliwość kupowania HE w taki sposób
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR);

register_menucmd(register_menuid("BuyItem"), (1<<3), "cmd_hegren");
register_menucmd(-34, (1<<3), "cmd_hegren");
register_clcmd("hegren", "cmd_hegren");
}

public cmd_hegren(id)
return PLUGIN_HANDLED;

ale niestety to chyba nie są wszystkie możliwości takiego blokowania, bo raz na jakiś czas znajdzie się jakaś osoba co dokupuje sobie te HE. Ktoś wie jak jeszcze można zablokować kupowanie HE?
Quote

  • +
  • -
glutex's Photo glutex 05.01.2012

Myślę, że mógłbyś wykożystać kod z plugin'u Grenade Sack ograniczając ilość HE do zera...
Quote

  • +
  • -
sebul's Photo sebul 05.01.2012

Niestety chodzi mi o same kupowanie, a nie całkowite blokowanie HE.
Quote

  • +
  • -
Lelek's Photo Lelek 05.01.2012

A co powiesz na to :D xD

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("hegren", "he_kup");
}

public he_kup(id)
{
client_print(id, print_chat, "BLOKADA!");
return PLUGIN_HANDLED;
}

Edited by Lelek, 05.01.2012 01:00.
Quote

  • +
  • -
sebul's Photo sebul 05.01.2012

A co powiesz na to :D xD


public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("hegren", "he_kup");
}

public he_kup(id)
{
client_print(id, print_chat, "BLOKADA!");
return PLUGIN_HANDLED;
}

Nie dołuj mnie... :facepalm:
Przeczytaj może mój pierwszy post.
Quote

olek0017's Photo olek0017 06.01.2012

z nie lepiej przez restmenu.amxx zainstalowane wraz z amxx?

badz sprawdzenie przy zmianie broni czy jest to granat he i zmienic graczowi bron na poprzednia badz noz
Edited by olek0017, 06.01.2012 01:20.
Quote

  • +
  • -
sebul's Photo sebul 06.01.2012

z nie lepiej przez restmenu.amxx zainstalowane wraz z amxx?

Podobno to także da radę jakoś ominąć, ale nawet jeśli, to ten plugin w grę nie wchodzi, po prostu chcę wiedzieć, jak zablokować możliwość kupienia HE, żeby chociażby potem dodać jeszcze jakiś warunek do tej mojej funkcji "cmd_hegren".
sebul (06.01.2012 03:43):
Sry, chodzi mi tylko o HE, a wcześniej napisałem tutaj "broni" :D
Quote

olek0017's Photo olek0017 06.01.2012

Nie wiem ale może jak to dodasz to już nie można będzie kupić he


register_clcmd("cl_autobuy", "he_kup");
register_clcmd("cl_rebuy", "he_kup");
register_clcmd("cl_setautobuy","he_kup");

tak nawiasem ja to zawsze usuwałem graczowi buyzone bo albo blokowałem wszystkie bronie albo żadne
Edited by olek0017, 06.01.2012 01:52.
Quote

  • +
  • -
MarWit's Photo MarWit 08.01.2012

Użyj kanapki :)

#include <amxmodx>
#include <hamsandwich>

public plugin_init() {
register_clcmd("hegren", "cmdHegren")
RegisterHam(Ham_Item_AttachToPlayer, "weapon_hegrenade", "fw_ItemAttachToPlayer")
}

public cmdHegren(id)
return PLUGIN_HANDLED

public fw_ItemAttachToPlayer(iWeapon, id)
return HAM_SUPERCEDE


Można by także zablokować to w Orpheu ( co by było najbardziej optymalne ), ale jak to powiedział Ortega, użycie go tylko do jednej funkcji to jak jeżdżenie tirem po chleb do sklepu.

sebul (08.01.2012 20:27):
Jutro obczaję to i dam znać czy działa ^^
Quote

  • +
  • -
sebul's Photo sebul 08.01.2012

A jednak sprawdziłem dzisiaj, chyba blokuje kupowanie (w sensie, że niby granat się kupuje, ale spada na ziemię), ale zaraz po tym serwer się wyłącza ^ ^
Quote

  • +
  • -
MarWit's Photo MarWit 08.01.2012

Teraz powinno być good:)

#include <amxmodx>
#include <hamsandwich>

public plugin_init() {
register_clcmd("hegren", "cmdHegren")
RegisterHam(Ham_Item_AttachToPlayer, "weapon_hegrenade", "fw_ItemAttachToPlayer")
}

public cmdHegren(id)
return PLUGIN_HANDLED

public fw_ItemAttachToPlayer(iWeapon, id)
{
ExecuteHamB(Ham_Item_Kill, iWeapon)
return HAM_SUPERCEDE
}
Quote

  • +
  • -
sebul's Photo sebul 08.01.2012

Niestety nie jest, serwer się wyłącza bez logów.
Quote

  • +
  • -
kapi10072's Photo kapi10072 08.01.2012


#include <amxmodx>
#include <fakemeta>

#define m_flNextAttack 83

public plugin_init()
{
register_plugin("Blokada HE", "9", "QTM. Peyote");
register_forward(FM_PlayerPreThink, "client_PreThink");
}

public client_PreThink(id)
{
if(get_user_weapon(id) == CSW_HEGRENADE)
{
set_pdata_float(id, m_flNextAttack, 0.1 , 5);
}
}


O to chodziło ?
sebul (08.01.2012 22:52):
Nie.

Edited by kapi10072, 08.01.2012 21:39.
Quote

  • +
  • -
MarWit's Photo MarWit 08.01.2012

Ehh... Pomyliłem funkcje ham'a :facepalm:
To na 100% działa

#include <amxmodx>
#include <hamsandwich>

public plugin_init()
RegisterHam(Ham_Item_AddToPlayer, "weapon_hegrenade", "fw_ItemAddToPlayer")

public fw_ItemAddToPlayer(iWeapon, id)
return HAM_SUPERCEDE
Quote

  • +
  • -
G[o]Q's Photo G[o]Q 08.01.2012

tak popatrzylem w kod diablo i tam jest jeszcze "hegrenade" ale to moze byc błąd Micza xD

EDIT

no ze tak mozna kupic hegrenada xD

mozesz tez sprobować toucha wykryć z tego co pamietam ktos tak kiedys robil i chyba cos bylo z tego xD
sebul (08.01.2012 22:54):
Ale jaki to ma związek z tym tematem?

Edited by G[o]Q, 08.01.2012 22:59.
Quote

  • +
  • -
sebul's Photo sebul 08.01.2012

Teraz działa (kasę zabiera, ale nie daje HE), tylko szkoda, że działa to nawet wtedy, gdy komuś da się granat funkcją "give_item" ;/

Ale mam pewien pomysł ;] zaraz go sprawdzę.

tak popatrzylem w kod diablo i tam jest jeszcze "hegrenade" ale to moze byc błąd Micza xD

EDIT

no ze tak mozna kupic hegrenada xD

mozesz tez sprobować toucha wykryć z tego co pamietam ktos tak kiedys robil i chyba cos bylo z tego xD

Ja tego "hegrenade" nie widzę w podstawowym kodzie diablo, no i nawet jeśli będę znał wszystkie możliwości kupienia HE przez komendy, to jednak pozostają jeszcze komendy typu "cl_autobuy", gdzie trzeba jakoś wykryć kiedy HE się kupuje. Co do toucha, to on chyba także będzie się wykonywał, gdy granat dostanie ktoś przez komendę "give_item", ale w sumie można by z tym coś próbować.

Teraz mam coś takiego
public plugin_init() {
register_menucmd(register_menuid("BuyItem"), (1<<3), "cmd_hegren");
register_menucmd(-34, (1<<3), "cmd_hegren");
register_clcmd("hegren", "cmd_hegren");
register_clcmd("cl_setautobuy", "cmd_hegren");
register_clcmd("cl_autobuy", "cmd_hegren");
register_clcmd("cl_rebuy", "cmd_hegren");

RegisterHam(Ham_Item_AddToPlayer, "weapon_hegrenade", "fw_ItemAddToPlayer");
}

public cmd_hegren(id) {
boughtTime[id] = get_gametime()+0.5;
}

public fw_ItemAddToPlayer(iWeapon, id) {
if(boughtTime[id] > get_gametime()) {
if(boughtHeGrenade[id] < 1) {
boughtHeGrenade[id]++;
return HAM_IGNORED;
}

return HAM_SUPERCEDE;
}

return HAM_IGNORED;
}

i serwera pada w taki sam sposób jak to było wcześniej przy użyciu "Ham_Item_AttachToPlayer".
Quote

  • +
  • -
G[o]Q's Photo G[o]Q 09.01.2012

dodaj sobie do linii startowej jesli masz taką mozliwosc -dev -condebug i zobacz moze bedziesz cos miec w qconsole.log bo kod wygladą na dobry :D
Quote

  • +
  • -
sebul's Photo sebul 09.01.2012

dodaj sobie do linii startowej jesli masz taką mozliwosc -dev -condebug i zobacz moze bedziesz cos miec w qconsole.log bo kod wygladą na dobry :D

Niestety testuje na swoim kompie na hlds i nie wiem czy nawet da się gdzieś wpisać komendy startowe.
Quote

  • +
  • -
MarWit's Photo MarWit 09.01.2012

HAM_IGNORED -> HAM_HANDLED
Quote

  • +
  • -
sebul's Photo sebul 09.01.2012

Z tego co wiem, HAM_HANDLED używa się gdy coś zmieniliśmy (np. dmg w funkcji Ham_TakeDamage) i chcemy, żeby to zostało wprowadzone, a jeśli ma coś pomijać to wtedy HAM_IGNORED, przynajmniej tak mi kiedyś r3x tłumaczył ^ ^


Posted Image // MarWit
MarWit (09.01.2012 20:42):
To prawda, ale w tej funkcji niewiadomo dlaczego nie działa HAM_IGNORED :o
sebul (09.01.2012 21:11):
Niestety to nie pomogło, po kupieniu drugiego HE, serwer pada.
Quote
Locked