Creeare unei entitati prin intermediul a 2 puncte setate pe harta

Tutoriale scripting, cod si portiuni de cod.

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

Post Reply
stanemir.andrei
Membru, skill 0
Membru, skill 0
Posts: 57
Joined: 13 May 2023, 16:29
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Discord: -
Has thanked: 11 times
Been thanked: 4 times

04 Jun 2023, 12:28

Salut nu stiu cat de explicit este titlul insa as dorii sa ma indrumati sau sa imi explicati despre cum as putea inainte de a spawna entitatea sa pot selecta 2 puncte de pe harta ele fiind originea si sa zic asa tot odata si marimea sprite-ului am vazut in pluginul DrZones a lui Oxicrom o sa las link-ul de la video
| Afiseaza codul
https://www.youtube.com/watch?v=UTCwDFLcRNM&t=107s
iar asta e codul care as dorii sa aiba aceasta functie

Code: Select all

#include <amxmodx>
#include <engine>
#include <fakemeta>

new const g_firesprite[] = "sprites/flame.spr";
new const g_firesprite2[] = "sprites/flame2.spr";


public plugin_precache()
{
    precache_model(g_firesprite2);
    precache_model(g_firesprite);
}

public plugin_init()
{
    register_clcmd("say /fire", "createFire");
    register_clcmd("say /fire2", "createFire2");
}

public createFire(clientEntIndex)
{
    new Float:origin[3];
    pev(clientEntIndex, pev_origin, origin);
    createFireEntity(origin);
}

public createFire2(clientEntIndex)
{
    new Float:origin[3];
    pev(clientEntIndex, pev_origin, origin);
    createFireEntity2(origin);
}

public createFireEntity(Float:origin[3])
{
    new entity = create_entity("info_target");

    DispatchSpawn(entity);

    engfunc( EngFunc_SetModel, entity, g_firesprite );
    set_pev(entity, pev_solid, SOLID_TRIGGER);
    set_pev(entity, pev_rendermode, kRenderTransAdd);
    set_pev(entity, pev_renderamt, 255.0);
    set_pev(entity, pev_targetname, "fire1", 31);

    engfunc(EngFunc_SetOrigin, entity, origin);

    return entity;
}

public createFireEntity2(Float:origin[3])
{
    new entity = create_entity("info_target");

    DispatchSpawn(entity);

    engfunc( EngFunc_SetModel, entity, g_firesprite2 );
    set_pev(entity, pev_solid, SOLID_TRIGGER);
    set_pev(entity, pev_rendermode, kRenderTransAdd);
    set_pev(entity, pev_renderamt, 255.0);
    set_pev(entity, pev_targetname, "fire2", 31);

    engfunc(EngFunc_SetOrigin, entity, origin);
   

    return entity;
}
RoyalServer 2
lexz
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 917
Joined: 02 Nov 2020, 01:57
Detinator Steam: Da
Fond eXtream: 0
Discord: lexzor#0630
Has thanked: 70 times
Been thanked: 136 times

04 Jun 2023, 16:48

incearca sa folosesti asta pentru a seta marimea entitatii https://www.amxmodx.org/api/fakemeta_stocks/EF_SetSize

adauga si

Code: Select all

#include <fakemeta_stocks>
sau poti sa folosesti pev_size (https://forums.alliedmods.net/showthread.php?t=138786)

de asemenea verifica entitatile cu pev_valid ca sa nu iti pice serverul cand nu se creeaza entitatea si incerci sa setezi model, marime la ceva ce nu exista.

cat despre pozitionarea entitatii pe harta depinde de ce vrei sa faci

ce trebuie sa faci sigur e sa faci o comanda sau un meniu care ia pozitia ta cu get_user_origin (te duci cu noclip in pozitia respectiva) ca sa aflii pozitiile din sistemul cartezian (e sistemul ala cu x,y,z, materie de clasa a8a pentru examen) ca sa setezi entitatea pe originea respectiva pe anumite harti, pentru ca de la harta la harta pozitiile astea difera

daca esti in situatia in care creezi multe entitati, le stergi, le adaugi, le schimbi pozitia, cea mai buna varianta e sa faci un meniu.

eu as face un meniu din care poti sa adaugi si stergi entitati.

1. Create entity -> Iti ia originea cu get_user_origin, creeaza entitatea si salveaza intr-un fisier care are numele hartii pozitia x,y,z (si vad ca ai 2 sprite-uri, faci sa selectezi ce sprite sa aiba), sprite-ul si alte setari pe care vrei sa le aiba
2. Delete entity -> Afiseaza toate entitatiile de pe harta si le poti sterge

entitatile sunt salvate dupa adaugare/stergere si incarcate la fiecare harta respectiva din fisierul cu numele hartii.
stanemir.andrei
Membru, skill 0
Membru, skill 0
Posts: 57
Joined: 13 May 2023, 16:29
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Discord: -
Has thanked: 11 times
Been thanked: 4 times

04 Jun 2023, 17:18

cred ca are legatura cu

Code: Select all

public selectPoint(id)
{
	if(!g_blBuilding[id])
		return PLUGIN_CONTINUE
		
	new Float:flPointOrigin[3], flUserOrigin[3]
	get_user_origin(id, flUserOrigin, 3)
	IVecFVec(flUserOrigin, flPointOrigin)
	g_flBuildOrigin[id][g_iBuildStage[id]] = flPointOrigin
	
	#if defined SOUND_SETPOINT
		player_spksound(id, SOUND_SETPOINT)
	#endif
	
	#if defined BEAM_ENABLED
		draw_beam(id)
	#endif
	
	switch(g_iBuildStage[id])
	{
		case 0:
		{
			g_iBuildStage[id]++
			ColorChat(id, "%L", LANG_PLAYER, "DRZONE_SET_SECOND")
		}
		case 1:
		{
			g_iBuildStage[id]--
			g_blBuilding[id] = false
			CreateZone(g_flBuildOrigin[id][0], g_flBuildOrigin[id][1])
			ColorChat(id, "%L", LANG_PLAYER, "DRZONE_CREATED")
		}
	}
	
	menu_reopen(id)
	return PLUGIN_HANDLED
}

Code: Select all

CreateZone(Float:flFirstPoint[3], Float:flSecondPoint[3])
{
	new Float:flCenter[3], Float:flSize[3]
	new Float:flMins[3], Float:flMaxs[3]
	
	for(new i; i < 3; i++)
	{
		flCenter[i] = (flFirstPoint[i] + flSecondPoint[i]) / 2.0
		flSize[i] = get_float_difference(flFirstPoint[i], flSecondPoint[i])
		flMins[i] = flSize[i] / -2.0
		flMaxs[i] = flSize[i] / 2.0
	}
	
	new iEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, g_szEntString))
	
	if(pev_valid(iEnt))
	{
		engfunc(EngFunc_SetOrigin, iEnt, flCenter)
		set_pev(iEnt, pev_classname, g_szClassname)
		dllfunc(DLLFunc_Spawn, iEnt)
		set_pev(iEnt, pev_movetype, MOVETYPE_NONE)
		set_pev(iEnt, pev_solid, SOLID_TRIGGER)
		engfunc(EngFunc_SetSize, iEnt, flMins, flMaxs)
	}
	
	new szCoords[200], szZone[5]
	formatex(szCoords, charsmax(szCoords), "%f %f %f %f %f %f", flFirstPoint[0], flFirstPoint[1], flFirstPoint[2], flSecondPoint[0], flSecondPoint[1], flSecondPoint[2])
	num_to_str(iEnt, szZone, charsmax(szZone))
	TrieSetString(g_tZones, szZone, szCoords)
	ArrayPushCell(g_aZones, iEnt)
	g_iTotalZones++
}
si cu

Code: Select all

#if defined BEAM_ENABLED
	draw_beam(id, iZone = 0)
	{
		new iUserOrigin[3], iPointOrigin[3]
		get_user_origin(id, iUserOrigin)
		
		if(iZone && pev_valid(iZone))
		{
			new Float:flOrigin[3]
			pev(iZone, pev_origin, flOrigin)
			FVecIVec(flOrigin, iPointOrigin)
		}
		else get_user_origin(id, iPointOrigin, 3)
		
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
		write_byte(TE_BEAMPOINTS)
		write_coord(iUserOrigin[0])
		write_coord(iUserOrigin[1])
		write_coord(iUserOrigin[2])
		write_coord(iPointOrigin[0])
		write_coord(iPointOrigin[1])
		write_coord(iPointOrigin[2])
		write_short(g_iBeamSprite)
		write_byte(BEAM_STARTFRAME)
		write_byte(BEAM_FRAMERATE)
		write_byte(BEAM_LIFE)
		write_byte(BEAM_WIDTH)
		write_byte(BEAM_NOISE)
		write_byte(iZone ? BEAM_COLOR_SELECT_RED : BEAM_COLOR_RED)
		write_byte(iZone ? BEAM_COLOR_SELECT_GREEN : BEAM_COLOR_GREEN)
		write_byte(iZone ? BEAM_COLOR_SELECT_BLUE : BEAM_COLOR_BLUE)
		write_byte(BEAM_BRIGHTNESS)
		write_byte(BEAM_SPEED)
		message_end()
	}
#endif

draw_line(id, bool:blCurrentZone, x1, y1, z1, x2, y2, z2)
{
	message_begin(id ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, SVC_TEMPENTITY, _, id ? id : 0)
	write_byte(TE_BEAMPOINTS)
	write_coord(x1)
	write_coord(y1)
	write_coord(z1)
	write_coord(x2)
	write_coord(y2)
	write_coord(z2)
	write_short(g_iZoneSprite)
	write_byte(ZONE_STARTFRAME)
	write_byte(ZONE_FRAMERATE)
	write_byte(ZONE_LIFE)
	write_byte(ZONE_WIDTH)
	write_byte(ZONE_NOISE)
	write_byte(blCurrentZone ? ZONE_COLOR_SELECTED_RED : ZONE_COLOR_RED)
	write_byte(blCurrentZone ? ZONE_COLOR_SELECTED_GREEN : ZONE_COLOR_GREEN)
	write_byte(blCurrentZone ? ZONE_COLOR_SELECTED_BLUE : ZONE_COLOR_BLUE)
	write_byte(ZONE_BRIGHTNESS)
	write_byte(ZONE_SPEED)
	message_end()
}
lexz
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 917
Joined: 02 Nov 2020, 01:57
Detinator Steam: Da
Fond eXtream: 0
Discord: lexzor#0630
Has thanked: 70 times
Been thanked: 136 times

04 Jun 2023, 17:25

nu inteleg ce vrei sa faci. sa fie o entitate statica pe harta sau una care se misca?

vrei sa faci acel efect de hook pe care il face el?
stanemir.andrei
Membru, skill 0
Membru, skill 0
Posts: 57
Joined: 13 May 2023, 16:29
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Discord: -
Has thanked: 11 times
Been thanked: 4 times

04 Jun 2023, 19:27

lex doresc inainte de spawnarea entitatii sprite (nu este animata) sa selectez punctele prin acel efect de hook el daca apasa "g" se declanseaza acel hook in zona unde tine sageata dupa iar apasa hook pe o alta locatie iar distanta dintre g1 sa ii zic asa si g2 este originea si marimea entitatii
Image
lexz
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 917
Joined: 02 Nov 2020, 01:57
Detinator Steam: Da
Fond eXtream: 0
Discord: lexzor#0630
Has thanked: 70 times
Been thanked: 136 times

05 Jun 2023, 09:40

ca sa calculezi distanta dintre cele 2 puncte, poti folosi https://www.amxmodx.org/api/vector/get_distance_f (stiu ca e si get_distance care returneaza un int, dar float cred ca e mult mai accurate). Distanta dintre cele 2 puncte ar trebui sa fie marimea acesteia, iar jumatatea distantei de la un punct la mijloc originea ei.


e destul de greut in ce te bagi tu acum
Post Reply

Return to “Scripting”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 9 guests