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

Tworzenie bytów


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
2 odpowiedzi w tym temacie

#1 Czaso Umilacz

    Profesjonalista

  • Użytkownik

Reputacja: 38
Życzliwy

  • Postów:152
  • Imię:Olek
  • Lokalizacja:Leszno
Offline

Napisano 13.09.2014 20:05

Witam,
ostatnio mam problem z bytami, mianowicie kod crashuje serwer:

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <engine>
#include <fakemeta>
#include <codmod>
#include <xs>

#define PLUGIN "MW3 Mod - Meczennik"
#define VERSION "1.0"
#define AUTHOR "Czaso Umilacz"

#define MAX 32

new const perk_classname[] = "mw3_martydom";
new const perk_model[] = "models/w_hegrenade.mdl";

new	sprite_blast;

new	bool:ma_perk[MAX+1];

public plugin_init(){
	register_plugin(PLUGIN, VERSION, AUTHOR);
	
	cod_register_perk("Meczennik", "Po smierci wypuszczasz odbezpiecozy granat");
	
	RegisterHam(Ham_Killed, "player", "Deatch");
	
	register_think(perk_classname, "MartydomeThink");
	
	register_event("HLTV", "NowaRunda", "a", "1=0", "2=0");
}

public plugin_precache(){
	sprite_blast = precache_model("sprites/dexplo.spr");
	
	precache_model(perk_model);
}

public cod_perk_enable(id){
	ma_perk[id] = true;
}

public cod_perk_disable(id){
	ma_perk[id] = false;
}

public Deatch(this, attacker, shouldgib){	
	if(!is_user_connected(this) || !ma_perk[this])
		return HAM_IGNORED;

	new Float:origin[3]; 
	entity_get_vector(this, EV_VEC_origin, origin);
	
	new ent = create_entity("info_target");
	
	entity_set_model(ent, perk_model);
	entity_set_string(ent, EV_SZ_classname, perk_classname);
	
	entity_set_vector(ent, EV_VEC_origin, origin);
	
	entity_set_float(ent, EV_FL_nextthink, get_gametime() + 3.0);
	
	entity_set_int(ent, EV_INT_solid, SOLID_TRIGGER);
	entity_set_int(ent, EV_INT_movetype, MOVETYPE_TOSS);
	
	entity_set_edict(ent, EV_ENT_owner, this);
	
	return HAM_IGNORED;
}

public MartydomeThink(ent){
	if(!is_valid_ent(ent))
		return PLUGIN_CONTINUE;
		
	new entlist[MAX+1], numfound = find_sphere_class(ent, "player", 100.0, entlist, MAX); 
	new owner = entity_get_edict(ent, EV_ENT_owner);
		
	for(new i = 0; i < numfound; i ++){
		new pid = entlist[i];
				
		if(!is_user_alive(pid) || !fm_is_ent_visible(ent, pid) || get_user_team(owner) == get_user_team(pid))
			continue;
				
		cod_inflict_damage(owner, pid, 150.0, 0.0, ent, (1<<1));
	}
		
	new Float:forigin[3], iorigin[3];
	entity_get_vector(ent, EV_VEC_origin, forigin);	
	
	FVecIVec(forigin, iorigin);
		
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY, iorigin);
	write_byte(TE_EXPLOSION);
	write_coord(iorigin[0]);
	write_coord(iorigin[1]);
	write_coord(iorigin[2]);
	write_short(sprite_blast);
	write_byte(32);
	write_byte(20);
	write_byte(0);
	message_end();
		
	remove_entity(ent);
		
	return PLUGIN_CONTINUE;
}

public client_disconnect(id){
	new ent = find_ent_by_class(0, perk_classname);
	
	while(ent > 0){
		if(is_valid_ent(ent))
			if(entity_get_edict(id, EV_ENT_owner) == id)
				remove_entity(ent);
			
		ent = find_ent_by_class(ent, perk_classname);
	}
}

public NowaRunda(){
	new ent = find_ent_by_class(0, perk_classname);
	
	while(ent > 0){
		if(is_valid_ent(ent))
			remove_entity(ent);
			
		ent = find_ent_by_class(ent, perk_classname);
	}
}

stock bool:fm_is_ent_visible(index, entity, ignoremonsters = 0) {
	new Float:start[3], Float:dest[3];
	pev(index, pev_origin, start);
	pev(index, pev_view_ofs, dest);
	
	xs_vec_add(start, dest, start);

	pev(entity, pev_origin, dest);
	
	engfunc(EngFunc_TraceLine, start, dest, ignoremonsters, index, 0);

	new Float:fraction;
	get_tr2(0, TR_flFraction, fraction);
	
	if(fraction == 1.0 || get_tr2(0, TR_pHit) == entity)
		return true;

	return false;
} 

Skąd wiem że to wina tego pluginu? Długa i żmudna analiza pluginów wskazała na tego słodziaka.

 

A teraz kilka pytań:
1. Czy w tworzeniu bytów istotna jest kolejność przypisywania mu właściwości (classname, origin, wartości int/float/byte itd.)
2. Czy w powyższym kodzie wykonałem coś nie tak, i czemu.


Użytkownik Czaso Umilacz edytował ten post 13.09.2014 20:06

  • +
  • -
  • 0

#2 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 14.09.2014 06:10

Po pierwsze error logi z debuga daj.

stock StworzEnta(szClassname[] = "info_target", Float:origin[3], Float:takedamage, Float:health, ent_classname[]="", model[]="", solid = SOLID_NOT, Float:mins[3], Float:maxs[3])
{
	new ent = create_entity(szClassname)
	entity_set_origin(ent, origin)
	entity_set_float(ent, EV_FL_takedamage, takedamage)
	entity_set_float(ent, EV_FL_health, health)
	entity_set_string(ent, EV_SZ_classname, ent_classname)
	entity_set_model(ent, model)
	entity_set_int(ent, EV_INT_solid, solid)
	entity_set_size(ent, mins, maxs)
	
	return ent
}

Ta funkcja tworzy enta. Możliwe, że Twój crash nie jest spowodowany tworzeniem enta w sposób nieodpowiedni.


  • +
  • -
  • 0

#3 Czaso Umilacz

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 38
Życzliwy

  • Postów:152
  • Imię:Olek
  • Lokalizacja:Leszno
Offline

Napisano 14.09.2014 07:20

Logi z konsoli:
 

Uploading dump (in-process) [proxy '']
/tmp/dumps/crash_20140902200426_1.dmp
success = no
error:  Failure when receiving data from the peer
Segmentation fault (core dumped)
BFD: Warning: /home/data/alewyb/320017.cs16/core is truncated: expected core file size >= 145874944, found: 1069056.
Cannot access memory at address 0xf76ff8f8
Cannot access memory at address 0xf76ff8f4
debug.cmds:1: Error in sourced command file:
Cannot access memory at address 0xff8e1708
email debug.log to [email protected]
Tue Sep  2 20:05:37 CEST 2014: Server restart in 10 seconds

  • +
  • -
  • 0




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

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