Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

[ROZWIĄZANE] CMOD - 1/1 z noża


Najlepsza odpowiedź plx211, 03.05.2015 09:34

jeśli niczego nie pomyliłem to:

public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
{
	if(!IsValidClient(attacker))
		return Plugin_Continue;
		
	if(active[attacker]){
		decl String:sWeapon[32];
		GetClientWeapon(attacker, sWeapon, sizeof(sWeapon));
		if(StrEqual(sWeapon, "weapon_knife")){
			SetEntProp(client, Prop_Data, "m_ArmorValue", 0, 1);  
			damage = float(GetClientHealth(victim) + 1); 
			return Plugin_Changed;
		}
	}
	return Plugin_Continue;
}

Przejdź do postu


  • Zamknięty Temat jest zamknięty
8 odpowiedzi w tym temacie

#1 Kaliber44

    Początkujący

  • Użytkownik

Reputacja: 0
Nowy

  • Postów:17
Offline

Napisano 03.05.2015 08:03

Witam,

chciałem zrobić klasę która ma 1/1 z noza więc zastosowałem:

ForcePlayerSuicide

Tylko nie mam pojęcia jak pobrać id zaatakowanego?

Cały skrypt:

#include <sourcemod>
#include <sdkhooks>
#include <sdktools> 
#include <cmod>


#pragma semicolon 1

new bool:active[MAXPLAYERS+1];

public Plugin:myinfo =
{
	name = "Cmod class: Nozownik",
	author = "PLX",
	description = "std class",
	version = "0.1",
	url = "http://steamcommunity.com/id/plx211"
};

public OnPluginStart()
{
	new Handle:weapons = CreateArray(32);
	PushArrayString(weapons, "weapon_deagle");
	PushArrayString(weapons, "weapon_knife");
	RegisterClass("Nozownik", "1/1 z noza", 0, -20, 0, -20, weapons);
}

public OnClientPutInServer(id)
{
	SDKHook(id, SDKHook_OnTakeDamage, OnTakeDamage);
}

public OnClassEnabled(id)
{
	active[id] = true;
}

public OnClassDisabled(id)
{
	active[id] = false;
}

public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
{
	if(!IsValidClient(attacker))
		return Plugin_Continue;
		
	if(active[attacker]){
		decl String:sWeapon[32];
		GetClientWeapon(attacker, sWeapon, sizeof(sWeapon));
		if(StrEqual(sWeapon, "weapon_knife")){
			ForcePlayerSuicide(userid);
			return Plugin_Changed;
		}
	}
	return Plugin_Continue;
}

Szukałem nawet w "dokumentacji" i jedynie co znalazłem to: "userid".

 


  • +
  • -
  • 0

#2 plx211

    Wszechpomocny

  • Użytkownik

Reputacja: 231
Wszechwidzący

  • Postów:397
  • Lokalizacja:Polska
Offline

Napisano 03.05.2015 09:34   Najlepsza odpowiedź

jeśli niczego nie pomyliłem to:

public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
{
	if(!IsValidClient(attacker))
		return Plugin_Continue;
		
	if(active[attacker]){
		decl String:sWeapon[32];
		GetClientWeapon(attacker, sWeapon, sizeof(sWeapon));
		if(StrEqual(sWeapon, "weapon_knife")){
			SetEntProp(client, Prop_Data, "m_ArmorValue", 0, 1);  
			damage = float(GetClientHealth(victim) + 1); 
			return Plugin_Changed;
		}
	}
	return Plugin_Continue;
}


  • +
  • -
  • 1

#3 Kaliber44

    Początkujący

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:17
Offline

Napisano 03.05.2015 09:45

Przy kompilacji wyskakuje błąd:

 

Undefined symbol "client".

 

Więc dodałem takie cos:

new userid = GetEventInt(event, "attacker");
new client = GetClientOfUserId(userid);

To razem z nowym kodem syskakuje błąd:

 

Undefined symbol "event".

 

Cały kod wygląda tak:

public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
{
	if(!IsValidClient(attacker))
		return Plugin_Continue;
		
	if(active[attacker]){
		decl String:sWeapon[32];
		GetClientWeapon(attacker, sWeapon, sizeof(sWeapon));
		new userid = GetEventInt(event, "attacker");
		new client = GetClientOfUserId(userid);
		if(StrEqual(sWeapon, "weapon_knife")){
			SetEntProp(client, Prop_Data, "m_ArmorValue", 0, 1);  
			damage = float(GetClientHealth(victim) + 1); 
			return Plugin_Changed;
		}
	}
	return Plugin_Continue;
}

Ja już nie mam pomysłów,

gdzięki za pomoc.


Użytkownik Kaliber44 edytował ten post 03.05.2015 09:49

  • +
  • -
  • 0

#4 plx211

    Wszechpomocny

  • Użytkownik

Reputacja: 231
Wszechwidzący

  • Postów:397
  • Lokalizacja:Polska
Offline

Napisano 03.05.2015 09:56

To jest nie potrzebne (w przypadku SDKHook):

new userid = GetEventInt(event, "attacker");
new client = GetClientOfUserId(userid);

zmienna victim przechowuje id gracza/bytu który otrzymał dmg.

zmienna attacker przechowuje id gracza/bytu który zadał dmg


  • +
  • -
  • 0

#5 Kaliber44

    Początkujący

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:17
Offline

Napisano 03.05.2015 10:11

dzięki działa.


Użytkownik Kaliber44 edytował ten post 03.05.2015 10:33

  • +
  • -
  • 0

#6 Sniper Elite

    Master

  • Power User

Reputacja: 176
Profesjonalista

  • Postów:981
  • GG:
  • Imię:Konrad
  • Lokalizacja:Skryptolandia
Offline

Napisano 03.05.2015 13:42

A co w przypadku gdy ofiara posiada redukcje obrazen? Np. 30%? Dodanie jedynki chyba nie wystarczy.
  • +
  • -
  • 0

Kontakt:

Steam: CSnajper

GG: 4394855

 

Na steam i GG pomagam wyłącznie odpłatnie.


#7 Kaliber44

    Początkujący

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:17
Offline

Napisano 03.05.2015 14:29

No to chyba zamiast 1 można wpisać np: 100 co nie?

Moim zdaniem nawet gdy jest 30% redukcji to it ak powinien mieć 1/1, jeśli tak jest w opisie, więc zamiast 1 wstawić wieksza liczbe i problem rozwiazany.


Użytkownik Kaliber44 edytował ten post 03.05.2015 14:45

  • +
  • -
  • 0

#8 plx211

    Wszechpomocny

  • Użytkownik

Reputacja: 231
Wszechwidzący

  • Postów:397
  • Lokalizacja:Polska
Offline

Napisano 03.05.2015 14:49

z redukcją jest jak z int'em, jak przy zadawaniu dmg przez daną klasę nie odejmiesz redukcji, to jej nie będzie.


Użytkownik plx211 edytował ten post 03.05.2015 14:49

  • +
  • -
  • 0

#9 radim

    Godlike

  • Moderator

Reputacja: 939
Master

  • Postów:2 725
  • Steam:steam
  • Imię:Arkadiusz
  • Lokalizacja:Janów Lub.
Offline

Napisano 03.05.2015 15:17

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Pomoc udzielona

Jeśli się z tym nie zgadzasz, report.png raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL
  • +
  • -
  • 0

Chcąc napisać do mnie prywatną wiadomość, wpierw zapoznaj się ze stroną "O mnie" w moim profilu użytkownika [ radim ] !





Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych