VexdUM est un module AMX qui permet aux auteurs de plugins d'avoir un contrôle plus grand et d'une plus grande souplesse d'emploi sur la plupart des entités d'Half-Life et de ses Mods.
Dans le monde d'Half-Life beaucoup de choses sont faites à partir d'entités :
joueurs
armes
lumières
interrupteurs
caméras
points de spawn
Sites de Bombe/Zones d'Achat (Counter-Strike)
etc, etc
new tName[32]
new iEntity = find_entity(-1, "trigger_teleport") //recherche "classname"
while(iEntity > 0)
{
entity_get_string(iEntity, EV_SZ_targetname, tName, 31)
//trouver nom
if(equal(tName, "ballstart"))
{
// FAITES QUELQUE CHOSE ICI
}
}
new Ball
public create_ball()
{
if(!Ball)
{
// créer l'entité
Ball = create_entity("info_target")
// renommer le classname
entity_set_string(Ball, EV_SZ_classname, "ball")
// définir le modèle
entity_set_model(Ball, "models/w_fb.mdl")
// définir le corps (normalement pas nécessaire)
entity_set_int(Ball, EV_INT_body, random_num(1, 3))
// définir le flag "toujours réfléchir"
entity_set_int(Ball, EV_INT_flags, FL_ALWAYSTHINK)
// définir le type de mouvement
entity_set_int(Ball, EV_INT_movetype, MOVETYPE_BOUNCE)
// définir la séquence d'animation
entity_set_int(Ball, EV_INT_sequence, 1)
// définir le type de solidité
entity_set_int(Ball, EV_INT_solid, SOLID_TRIGGER)
// définir la friction
entity_set_float(Ball, EV_FL_friction, 0.33)
// définir la gravité
entity_set_float(Ball, EV_FL_gravity, 1.0)
// définir la taille
entity_set_size(Ball,Float:{-6.0,-6.0,-6.0},Float:{6.0,6.0,6.0})
// définir la position
entity_set_origin(Ball, Position[0])
}
}
Vous ne pouvez en aucune circonstance récupérer ou appliquer des paramètres à l'ID: 0 à moins que vous ne souhaitiez faire marcher incorrectement votre plugin. La fonction forward entity_touch(entity1, entity2) vous transmettra l'ID: 0 donc vous devez faire attention avec cette fonction forward ou vous pourriez faire marcher incorrectement votre plugin. Cependant si l'ID: 0 est transmise vous êtes quand même autorisé à faire des tests sur l'entité qui a interagit avec, par exemple le ballon rebondissant sur le sol.
native get_entity_velocity(id, velocity[3]);
new Float:vel[3]
entity_get_vector(id, EV_VEC_velocity, vel)
native set_entity_velocity(id, velocity[3]);
entity_set_vector(id, EV_VEC_velocity, Float:{0.0, 0.0, 0.0})
native get_entity_origin(id, origin[3]);
new Float:orig[3]
entity_get_vector(id, EV_VEC_origin, orig)
native set_entity_origin(id, origin[3]);
entity_set_origin(id, EV_VEC_origin, Float:{0.0, 0.0, 0.0})
native get_user_velocity(id, velocity[3]);
new Float:vel[3]
entity_get_vector(id, EV_VEC_velocity, vel)
native set_user_velocity(id, velocity[3]);
entity_set_vector(id, EV_VEC_velocity, Float:{0.0, 0.0, 0.0})
native get_user_button(id);
get_user_button(id) // VexdUM_stock.inc
native get_grenade_id(id, model[], len, grenadeid = 0);
get_grenade(id, grenadeid = -1) // VexdUM_stock.inc
native find_entity(start_from_ent, catagory, value[]);
find_entity(iIndex, szValue[])
native current_num_ents();
get_num_ents()
native set_user_footsteps(id, set=1);
se trouve maintenant dans le module Fun
Explications supplémentaires :
native get_grenade_id(id, model[], len, grenadeid = 0);
Avec get_grenade(id) vous devez trouver le nom du modèle si vous voulez faire quelque chose
de spécial sur une grenade spécifique d'un joueur. Cependant il y a une nouvelle forward avec
laquelle vous pouvez jouer qui est set_model(entity, const model[]). Maintenant avec cette
forward, cela vous dit l'id du modèle qui a été créé ainsi que le nom du modèle, donc tout ce
que vous avez à faire avec cette forward est de trouver le propriétaire en utilisant
entity_get_edict(edict, EV_ENT_owner).
native find_entity(start_from_ent, category, value[]);
Comme vous pouvez le voir, celle-ci marche différemment de celle de VexdUM. Pour une meilleure
compréhension, lisez Trouver une entité :.
native set_user_footsteps(id, set=1);
Voici comment la réaliser : à l'intérieur de client_prethink vous devez ajouter
entity_set_int(id, EV_INT_flTimeStepSound, 999) ; évidemment vous devez élaborer une sorte de
système de façon à ce que tout le monde n'ait pas des bruits de pas silencieux.
Suppression de la native set_view - causait trop de lag
Suppression de SET_SIZE de la native entity_set_origin(iIndex, Float:fNewOrigin[3]);
Mise à jour vers les nouvelles fonctionnalités d'AMX
Correction de toutes les fonctionnalités des natives pour utiliser de nouveau les fonctions internes check_player et check_entity
Correction d'un bug avec remove_entity qui pouvait faire crasher le serveur - entité non valide ou tentative de suppression d'une entité joueur
Correction de controller0 qui n'était pas appelé
Correction de blending0 qui n'était pas appelé
Renommage de la plupart des noms de natives
Ajout expérimental de controller4, en espérant que cela contrôle l'animation de la bouche
Ajout de la native entity_set_size(iIndex, Float:vecMin[3], Float:vecMax[3]);
Ajout de la native angle_to_vector(Float:fAngle[3], Float:vReturn[3]);
Ajout de la native precache_generic(szFile[]);
Ajout de la native precache_event(type, szEvent[]);
Ajout de la native playback_event(flags, invoker, eventindex, Float:delay, Float:origin[3],
Float:angles[3], Float:fparam1, Float:fparam2, iparam1,iparam2,bparam1,bparam2);
Ajout de la native get_offset_int(iTarget, iOffset);
Ajout de la native set_offset_int(iTarget, iOffset, iValue);
Ajout de la native get_num_ents();
Ajout de la native get_maxentities();
Ajout de la native is_entity(index);
Ajout de la forward entity_think(entity);
Ajout de la forward client_prethink(id);
Ajout de la forward client_postthink(id);
Ajout de la forward client_kill(id);
Ajout de la forward emitsound(entity, const sample[]);
Ajout de la forward set_model(edict, const model[]);
Ajout de la native abs(iInput);
Ajout de la native fabs(Float:flInput);
Ajout de la native asin(Float:flInput);
Ajout de la native sin(Float:flInput);
Ajout de la native sinh(Float:flInput);
Ajout de la native acos(Float:flInput);
Ajout de la native cos(Float:flInput);
Ajout de la native cosh(Float:flInput);
Ajout de la native atan(Float:flInput);
Ajout de la native atan2(Float:flInput1, Float:flInput2);
Ajout de la native tan(Float:flInput);
Ajout de la native tanh(Float:flInput);
Ajout de stock DotProduct(Float:vec1[3], Float:vec2[3])
Ajout de stock fake_kill(killer, victim, headshot, weapon[], log)
Ajout de stock fake_damage(victim, szClassname[], Float:damage, damagetype)
Ajout de stock get_user_button(id)
Ajout de stock get_user_oldbutton(id)
Ajout de stock get_entity_flags(ent)
Ajout de stock get_entity_distance(ent1, ent2)
Ajout de stock get_grenade(id)
Ajout de stock get_brush_entity_origin(ent, Float:orig[3])
Ajout de stock remove_entities(eName[])
Ajout de stock ViewContents(id)
Ajout de stock bool:CheckFlag(ent, flag)
Ajout de stock get_speed(ent)
Ajout de stock IVecFVec(iVec[3], Float:fVec[3])
Ajout de stock FVecIVec(Float:fVec[3], iVec[3])
Ajout de stock set_rendering(index, fx=kRenderFxNone, r=255, g=255, b=255, render=kRenderNormal, amount=16)
Ajout de stock set_entity_flags(ent, flag, onoff)