Discord sunucumuz açılmıştır, hepinizi bekleriz

https://discord.gg/43gGDQe6tS

Ctler için taret Eklentisi

Eklenti sorunlarınız ve özel eklenti istekleriniz

Moderatör: Moderatörler

Kullanıcı avatarı

bilalgecer47
Mesajlar: 729
Kayıt: Çrş Ağu 22, 2018 9:20 pm

Ctler için taret Eklentisi

Mesaj gönderen bilalgecer47 »

https://dosya.co/unceegq48au4/Anaeklent ... r.rar.html
Sağda solda bulunan taret eklentisi üstünde bikaç oynama yaptım.Sunucuyu ne kadar yorar vs hiç bilmiyorum ama şuanki haliyle çalışıyor.
Ana eklentiyi yönetmek için ek menü yaptım ana eklenti üstte yazssın diğeri altta.

Kod: Tümünü seç

#include <amxmodx>
#include <reapi>

native give_turret_ct(id);
native give_turret_menu(id);

new const tag[]={"TeamTR"} // Server Adinizi Yaziniz
new bool:taret_kurdun[MAX_CLIENTS+1];
new const menuclcmd[][]={
	"say /taret","say /turret","say /cttaret"
}
public plugin_init() {
	register_plugin("Bos Menu","0.1","bilalgecer47")
	
	for(new i;i<sizeof(menuclcmd);i++){
		register_clcmd(menuclcmd[i],"@anamenu");
	}
	RegisterHookChain(RG_RoundEnd,"@rRoundE",.post=true);
}
@rRoundE(){
	new players[MAX_PLAYERS],num,id;
	get_players(players,num);
	for(new i=0;i<num;i++){
		id=players[i];
		taret_kurdun[id]=false;
	}
}

@anamenu(const id){
	if(get_member(id,m_iTeam) == TEAM_CT && is_user_alive(id)){
		static Item[128],menu;
		formatex(Item, charsmax(Item), "\w[\r%s\w] - \yTaret \rMenu",tag)
		menu = menu_create(Item, "@anamenu_devam")
		
		formatex(Item, charsmax(Item), "\w[\r%s\w] - \yTaret \rKur^n\d-Taret Kurmak Icin burayi seciniz-",tag)
		menu_additem(menu, Item, "1", 0);
		
		formatex(Item, charsmax(Item), "\w[\r%s\w] - \yTaret \rYonet^n\d-MTaretinizi Yonetmek icin burayi seciniz-",tag);
		menu_additem(menu, Item, "2", 0);
		
		formatex(Item, charsmax(Item), "\rCikis")
		menu_setprop(menu,MPROP_EXITNAME,Item)
		menu_display(id, menu);
	}
	else{
		client_print_color(id,id,"^4[%s] - ^4Bu ^3Menu ^4CT ^3Takimina ^4Ozeldir.",tag);
	}
}
@anamenu_devam(id, menu, item) {
	if( item == MENU_EXIT )
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	new data[6];menu_item_getinfo(menu,item,_,data,charsmax(data));
	new key = str_to_num(data);  
	switch(key)
	{
		case 1:{
			if(taret_kurdun[id]){
				client_print_color(id,id,"^4[%s] - ^3Zaten ^3Taret ^4Kurdun.",tag);
			}
			else{
				taret_kurdun[id] = true;
				give_turret_ct(id);
				client_print_color(id,id,"^4[%s] - ^4Basarili ^3Bir ^4sekilde ^3Taret ^4Kurdunuz.",tag);
			}
		}
		case 2:{
			give_turret_menu(id);
			client_print_color(id,id,"^4[%s] - ^4Basarili ^3Bir ^4sekilde ^3Menuye ^4Yonlendirildin.",tag);
		}
	} 
	return PLUGIN_HANDLED;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1055\\ f0\\ fs16 \n\\ par }
*/
Yan eklentide bu bu şekilde düşündüm daha iyi yapabilen varsa yardımcı olur.

Link:
Linklerini gizle
Linki Kopyala
Kullanıcı avatarı

ENESIZM
Mesajlar: 2191
Kayıt: Prş Tem 06, 2017 10:44 pm
Konum: Mersin
Server Ip/DNS: MoonDeveloperTeam
İletişim:

Ctler için taret Eklentisi

Mesaj gönderen ENESIZM »

eklentinin ana yapımcıları olarak maalesef ki paylaşamıyoruz. lakin hayrına yapıp paylaşacak arkadaşlar illa ki vardır.

Link:
Linklerini gizle
Linki Kopyala
Kullanıcı avatarı

Konu Sahibi
MaviRuh*
Mesajlar: 448
Kayıt: Çrş Haz 21, 2017 12:23 am
Server Ip/DNS: 213.238.173.30
Clan İsmi: Mr.GaminG JB
İletişim:

Ctler için taret Eklentisi

Mesaj gönderen MaviRuh* »

ENESIZM yazdı: Cmt Oca 09, 2021 8:42 pm eklentinin ana yapımcıları olarak maalesef ki paylaşamıyoruz. lakin hayrına yapıp paylaşacak arkadaşlar illa ki vardır.
Neden paylaşamıyorsunuz ?
Daha çok kişinin kullanması yapımcılar olarak sizi mutlu etmesi lazım değil ki

Link:
Linklerini gizle
Linki Kopyala
Kullanıcı avatarı

Serhat Öndeş
Mesajlar: 1338
Kayıt: Prş Eyl 15, 2016 1:09 pm
Konum: TURKEY/MERSİN
İletişim:

Ctler için taret Eklentisi

Mesaj gönderen Serhat Öndeş »

Kod: Tümünü seç

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <xs>
#include <td>

#pragma dynamic 32768 

#define PLUGIN "TD Turrets: New"
#define VERSION "1.0"
#define AUTHOR "GT Team"

#define MAX_PLAYER_TURRET 2
#define MAX_SERVER_TURRET 20

#define pev_turret_id 		pev_iuser1
#define pev_turret_type 	pev_iuser2
#define pev_turret_firemode 	pev_iuser3
#define pev_turret_target	pev_iuser4
#define pev_turret_owner 	pev_owner
#define pev_turret_ranger	pev_euser3

new gszTurretsConfigFile[] = "addons/amxmodx/configs/td_turrets_config.cfg"
new gszSoundConfigFile[] = "addons/amxmodx/configs/td_sounds.cfg";
new gszLogFile[] = "Tower Defense.log"
new gszPrefix[] = "[TD:T]"

native max_map_turrets()

new MAX_MAP_TURRET

enum e_TurretsType {
	TURRET_NONE,
	TURRET_NORMAL,
	TURRET_LASER,
	TURRET_LIGHTING
}

enum e_Sound {
	SOUND_TURRET_NORMAL_FIRE_1,
	SOUND_TURRET_NORMAL_FIRE_2,
	SOUND_TURRET_LASER_FIRE_1,
	SOUND_TURRET_LASER_FIRE_2,
	SOUND_TURRET_LIGHTING_FIRE_1,
	SOUND_TURRET_LIGHTING_FIRE_2,
	SOUND_TURRET_START_FIRE,
	SOUND_TURRET_STOP_FIRE,
	SOUND_TURRET_PLANT,
	SOUND_TURRET_LOWAMMO,
	SOUND_TURRET_NOAMMO,
	SOUND_MENU_SELECT
}

enum e_Cvars {
	CVAR_TURRET_NORMAL_AMMO,
	CVAR_TURRET_LASER_AMMO,
	CVAR_TURRET_LIGHTING_AMMO,
	CVAR_TURRET_NORMAL_AMMO_NUM,
	CVAR_TURRET_LASER_AMMO_NUM,
	CVAR_TURRET_LIGHTING_AMMO_NUM,
	CVAR_TURRET_MOVE_COST
}
	
new const gszTurretsName[e_TurretsType][] =
{
	"BRAK",
	"ZWYKLA",
	"LASER",
	"PIORUN"
}

new const gszTurretsShopName[MAX_PLAYER_TURRET][] = {
	"Wiezyczka 1",
	"Wiezyczka 2"
}

new const giSlotCost[MAX_PLAYER_TURRET] = {
	10,
	25
}

new gServerTurretsNum
new gTurretsFreqData[e_TurretsType]
new gTurretsPriceData[e_TurretsType][5]
new gTurretsDamageData[e_TurretsType][5][2]
new gTurretsRangeData[e_TurretsType][5]

new gCvarInfo[e_Cvars]
new gSounds[e_Sound][128]

new e_TurretsType:gPlayerTurretType[33][MAX_PLAYER_TURRET]
new bool:gPlayerSlot[33][MAX_PLAYER_TURRET]
new gPlayerTurretEnt[33][MAX_PLAYER_TURRET]
new gPlayerTurretLevel[33][MAX_PLAYER_TURRET]
new gPlayerTurretDamageLevel[33][MAX_PLAYER_TURRET]
new gPlayerTurretRangeLevel[33][MAX_PLAYER_TURRET]
new gPlayerTurretAmmo[33][MAX_PLAYER_TURRET]
new gPlayerTurretNum[33]; 

new gSpriteLaserBeam;
new gSpriteRanger[] = "sprites/TD/ranger.spr"
new gShellIndex
public plugin_precache() 
{
	LoadSound()
	for(new i; i < _:e_Sound ; i++) {
		precache_sound(gSounds[e_Sound:i]);
	}
	precache_model("models/TD/sentrygun_1.mdl")
	precache_model("models/TD/sentrygun_2.mdl")
	precache_model("models/TD/sentrygun_3.mdl")
	precache_model("models/TD/sentrygun_4.mdl")
	precache_model("models/TD/sentrygun_5.mdl")
	
	gShellIndex = precache_model("models/rshell_big.mdl")
	gSpriteLaserBeam = precache_model("sprites/TD/laserbeam.spr")
	precache_model(gSpriteRanger)
	
}
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)

	if(td_get_game_status() == GAME_NOT_AVAILABLE)
		set_fail_state("Gra jest niemozliwa");
		
	register_forward(FM_AddToFullPack, "fwAddToFullPack", 1)
	
	register_think("turret", "TurretThink")
	register_clcmd("say /turrets", "cmdmenuTurrets");
	
	/* Cvary */
	gCvarInfo[CVAR_TURRET_NORMAL_AMMO] = register_cvar("td_turret_normal_ammo_cost", "15")
	gCvarInfo[CVAR_TURRET_LASER_AMMO] = register_cvar("td_turret_laser_ammo_cost", "20")
	gCvarInfo[CVAR_TURRET_LIGHTING_AMMO] = register_cvar("td_turret_lighting_ammo_cost", "25")
	
	gCvarInfo[CVAR_TURRET_NORMAL_AMMO_NUM] = register_cvar("td_turret_normal_ammo_num", "250")
	gCvarInfo[CVAR_TURRET_LASER_AMMO_NUM] = register_cvar("td_turret_laser_ammo_num", "100")
	gCvarInfo[CVAR_TURRET_LIGHTING_AMMO_NUM] = register_cvar("td_turret_lighting_ammo_num", "400")
	
	gCvarInfo[CVAR_TURRET_MOVE_COST] = register_cvar("td_turret_move_cost", "10")
	
	LoadTurretsConfig()
}
public fwAddToFullPack(es_handle, e, ENT, HOST, hostflags, player, set)
{
	if(player || !is_user_connected(HOST) || !is_valid_ent(ENT)) 
		return FMRES_IGNORED;
		

	
	if(td_is_ranger(ENT))
	{	
		if(pev(ENT, pev_turret_owner) == HOST)
		{
			set_es(es_handle, ES_RenderMode, kRenderTransAdd)
			set_es(es_handle, ES_RenderAmt, 255)
			set_es(es_handle, ES_RenderColor, 0, 0, 0)
			set_es(es_handle, ES_RenderFx, kRenderFxNone)
		}
		else
		{
			set_es(es_handle, ES_RenderMode, kRenderTransAdd)
			set_es(es_handle, ES_RenderAmt, 0)
			set_es(es_handle, ES_RenderColor, 0, 0, 0)
			set_es(es_handle, ES_RenderFx, kRenderFxNone)
			//fm_set_rendering(pev(ENT, pev_turret_ranger), kRenderFxNone, 0, 0, 0, kRenderTransAdd, 0)
		}
	}
	
	return FMRES_IGNORED;
}
public cmdmenuTurrets(id) {
	if(!is_user_connected(id)  || !is_user_alive(id))
		return PLUGIN_CONTINUE;
		
	new szFormat[64]
	new menu = menu_create("Wybierz :", "cmdmenuTurretsH")
	new cb = menu_makecallback("cmdmenuTurretsCb");
	
	new iGold = td_get_user_info(id, PLAYER_GOLD)
	for(new i ; i < MAX_PLAYER_TURRET; i++)
	{
		DeleteTurretRanger(gPlayerTurretEnt[id][i])
		if(gServerTurretsNum >= MAX_SERVER_TURRET && gPlayerTurretEnt[id][i] <= 0)
			formatex(szFormat, 63, "Slot %d \r [ LIMIT SERWERA ]", i+1)
		else if(gServerTurretsNum >= MAX_MAP_TURRET && gPlayerTurretEnt[id][i] <= 0)
			formatex(szFormat, 63, "Slot %d \r [ LIMIT MAPY ]", i+1)
		else if(gPlayerSlot[id][i] == false && iGold < giSlotCost[i])
			formatex(szFormat, 63, "Slot %d \r[ %d \yZLOTA\r ]", i+1, giSlotCost[i])
		else if(gPlayerSlot[id][i] == false && iGold >= giSlotCost[i])
			formatex(szFormat, 63, "Slot %d \r[\y KUP SLOT ZA \r%d\y ZLOTA\r ]", i+1, giSlotCost[i])
		/* Jeœli kupi³ slot */
		else if(gPlayerSlot[id][i]) {
			/*Jeœli nie ma kupionej wie¿yczki */
			if(gPlayerTurretEnt[id][i] <= 0)
				formatex(szFormat, 63, "Slot %d \r[\y KUP WIEZYCZKE\r ]", i+1)
			else if(gPlayerTurretEnt[id][i] > 0)
				formatex(szFormat, 63, "%s \r[ \y%d lvl\r ] [ \y%s\r ]", gszTurretsShopName[i], gPlayerTurretLevel[id][i], gszTurretsName[gPlayerTurretType[id][i]])
		}
		
		menu_additem(menu, szFormat, _, _, cb)
	}
	
	menu_setprop(menu, MPROP_EXITNAME, "Wstecz");
	menu_display(id, menu)
	
	return PLUGIN_CONTINUE
}

public cmdmenuTurretsCb(id, menu, item) { 
	new iGold = td_get_user_info(id, PLAYER_GOLD)
	for(new i ; i < MAX_PLAYER_TURRET; i++)
	{	
		if((gServerTurretsNum >= MAX_SERVER_TURRET  || gServerTurretsNum >= MAX_MAP_TURRET) && gPlayerTurretEnt[id][i] <= 0 && item == i)
			return ITEM_DISABLED
		else if(gPlayerSlot[id][i] == false && iGold < giSlotCost[i] && item == i)
			return ITEM_DISABLED
	}
	
	return ITEM_ENABLED
}
public cmdmenuTurretsH(id, menu, item) {
	if(item == MENU_EXIT || !is_user_alive(id)) {
		menu_destroy(menu)
		client_cmd(id, "say /menu")
		return PLUGIN_CONTINUE
	}
	
	if(!gPlayerSlot[id][item]) {
		td_set_user_info(id, PLAYER_GOLD, td_get_user_info(id, PLAYER_GOLD)-giSlotCost[item])
		client_print(id, 3, "%s Kupiles slot %d na wiezyczke. Na tym slocie mozesz posiadac 1 wiezyczke..", gszPrefix, item+1)
		gPlayerSlot[id][item] = true
		
		cmdmenuTurrets(id);
		return PLUGIN_CONTINUE 
	}
	
	if(gPlayerSlot[id][item] && gPlayerTurretEnt[id][item] <= 0) {
		menuBuyTurret(id, item)
	}
	else if(gPlayerSlot[id][item] && gPlayerTurretEnt[id][item] > 0) {
		menuTurret(id, item)
	}
	
	
	return PLUGIN_CONTINUE;
}
new gimenuSentryId[33]
public menuBuyTurret(id, sentryid)
{
	new menu = menu_create("Wybierz typ wiezyczki: ", "menuBuyTurretH")
	new cb = menu_makecallback("menuBuyTurretCb")
	new szFormat[64]
	
	for(new i = 1; i < _:e_TurretsType; i++)
	{
		formatex(szFormat, 63, "%s \r[ \y%d\w ZLOTA\r ]", gszTurretsName[e_TurretsType:i], gTurretsPriceData[e_TurretsType:i][0])
		menu_additem(menu, szFormat, _, _, cb)
	}
	
	gimenuSentryId[id] = sentryid
	
	menu_setprop(menu, MPROP_EXITNAME, "Wroc")
	menu_display(id, menu)
}
public menuBuyTurretCb(id, menu, item)
{
	for(new i = 1; i < _:e_TurretsType; i++)
		if(td_get_user_info(id, PLAYER_GOLD) < gTurretsPriceData[e_TurretsType:i][0] && item == i-1)
			return ITEM_DISABLED
	return ITEM_ENABLED
}

public menuBuyTurretH(id, menu, item)
{
	if(item == MENU_EXIT || !is_user_alive(id))
	{
		gimenuSentryId[id] = 0
		cmdmenuTurrets(id)
		return PLUGIN_CONTINUE
	}
	
	CreateTurret(id, gimenuSentryId[id], item+1)
	
	return PLUGIN_CONTINUE
}

public menuTurret(id, turret) {
	if(!is_user_alive(id))
		return PLUGIN_CONTINUE
		
	new szTitle[200], szAmmo[64], szDelete[33], szNextMenu[64], szMove[64]
	
	gimenuSentryId[id] = turret
	
	CreateTurretRanger(gPlayerTurretEnt[id][turret])
	
	new e_TurretsType:type = e_TurretsType:pev(gPlayerTurretEnt[id][turret], pev_turret_type)
	
	formatex(szTitle, 199, "\r[\y %s \r] [\y %s\r ]^n[\y Poziom: \w%d\r ] [\y Amunicja: \w%d\r ]^n[\y Zadawane obr: \w%d\y ~\w %d\r ] [ \yZasieg\w %d\r ]", 
	gszTurretsShopName[turret], gszTurretsName[type], gPlayerTurretLevel[id][turret], gPlayerTurretAmmo[id][turret],
	gTurretsDamageData[type][gPlayerTurretDamageLevel[id][turret]][0], gTurretsDamageData[type][gPlayerTurretDamageLevel[id][turret]][1],
	gTurretsRangeData[type][gPlayerTurretRangeLevel[id][turret]])
	
	if(type == TURRET_NORMAL)
		formatex(szAmmo, 63, "Dokup %d amunicji \r[\w %d\y Zlota\r ]", get_pcvar_num(gCvarInfo[CVAR_TURRET_NORMAL_AMMO_NUM]), get_pcvar_num(gCvarInfo[CVAR_TURRET_NORMAL_AMMO]))
	if(type == TURRET_LASER)
		formatex(szAmmo, 63, "Dokup %d amunicji \r[\w %d\y Zlota\r ]", get_pcvar_num(gCvarInfo[CVAR_TURRET_LASER_AMMO_NUM]), get_pcvar_num(gCvarInfo[CVAR_TURRET_LASER_AMMO]))
	if(type == TURRET_LIGHTING)
		formatex(szAmmo, 63, "Dokup %d amunicji \r[\w %d\y Zlota\r ]", get_pcvar_num(gCvarInfo[CVAR_TURRET_LIGHTING_AMMO_NUM]), get_pcvar_num(gCvarInfo[CVAR_TURRET_LIGHTING_AMMO]))
	
	formatex(szNextMenu, 63, "\yUlepsz Wiezyczke")
	formatex(szDelete, 32, "Usun Wiezyczke")
	formatex(szMove, 63, "Przenies Wiezyczke \r[\w %d\y Zlota\r ]", get_pcvar_num(gCvarInfo[CVAR_TURRET_MOVE_COST]))
	
	new menu = menu_create(szTitle, "menuTurretH")
	new cb = menu_makecallback("menuTurretCb")
	menu_additem(menu, szAmmo, _, _, cb);
	menu_additem(menu, szDelete);
	menu_additem(menu, szMove, _, _, cb)
	menu_additem(menu, szNextMenu)
	
	menu_setprop(menu, MPROP_EXITNAME, "Wstecz")
	menu_display(id, menu);
	return PLUGIN_CONTINUE
}
public menuTurretCb(id, menu, item)
{
	new turret = gimenuSentryId[id]
	new e_TurretsType:type = e_TurretsType:pev(gPlayerTurretEnt[id][turret], pev_turret_type)
	new gold = td_get_user_info(id, PLAYER_GOLD)
	if(item == 0)
	{
		if(type == TURRET_NORMAL)
		{
			if(gold <  get_pcvar_num(gCvarInfo[CVAR_TURRET_NORMAL_AMMO]))
				return ITEM_DISABLED
		}
		else if(type == TURRET_LASER)
		{
			if(gold < get_pcvar_num(gCvarInfo[CVAR_TURRET_LASER_AMMO]))
				return ITEM_DISABLED
		}
		else if(type == TURRET_LIGHTING)
		{
			if(gold < get_pcvar_num(gCvarInfo[CVAR_TURRET_LIGHTING_AMMO]))
				return ITEM_DISABLED
		}
	}
	else if(item == 2 && gold < get_pcvar_num(gCvarInfo[CVAR_TURRET_MOVE_COST]))
		return ITEM_DISABLED
		
	return ITEM_ENABLED
}
public menuTurretH(id, menu, item) {
	if(item == MENU_EXIT || !is_user_alive(id)) {
		DeleteTurretRanger(gPlayerTurretEnt[id][gimenuSentryId[id]])
		gimenuSentryId[id] = 0
		if(is_user_alive(id))
			cmdmenuTurrets(id)
		return PLUGIN_CONTINUE
	}
	new e_TurretsType:type = e_TurretsType:pev(gPlayerTurretEnt[id][gimenuSentryId[id]], pev_turret_type)
	if(item == 0)
	{
		switch(type)
		{
			case TURRET_NORMAL:
			{
				td_set_user_info(id, PLAYER_GOLD, td_get_user_info(id, PLAYER_GOLD)-get_pcvar_num(gCvarInfo[CVAR_TURRET_NORMAL_AMMO]))
				gPlayerTurretAmmo[id][gimenuSentryId[id]] += get_pcvar_num(gCvarInfo[CVAR_TURRET_NORMAL_AMMO_NUM])+1
			}
			case TURRET_LASER:
			{
				td_set_user_info(id, PLAYER_GOLD, td_get_user_info(id, PLAYER_GOLD)-get_pcvar_num(gCvarInfo[CVAR_TURRET_LASER_AMMO]))
				gPlayerTurretAmmo[id][gimenuSentryId[id]] += get_pcvar_num(gCvarInfo[CVAR_TURRET_LASER_AMMO_NUM])+1
			}
			case TURRET_LIGHTING:
			{
				td_set_user_info(id, PLAYER_GOLD, td_get_user_info(id, PLAYER_GOLD)-get_pcvar_num(gCvarInfo[CVAR_TURRET_LIGHTING_AMMO]))
				gPlayerTurretAmmo[id][gimenuSentryId[id]] += get_pcvar_num(gCvarInfo[CVAR_TURRET_LIGHTING_AMMO_NUM])+1
			}
		}
		client_print(id, print_chat, "%s Trwa przeladowywanie wiezyczki...", gszPrefix)
		menuTurret(id, gimenuSentryId[id]);
		entity_set_float(gPlayerTurretEnt[id][gimenuSentryId[id]], EV_FL_nextthink, get_gametime()+3.0);
	}
	else if(item == 1)
		menuConfirmDelete(id)
	else if(item == 2) {
		td_set_user_info(id, PLAYER_GOLD, td_get_user_info(id, PLAYER_GOLD)-get_pcvar_num(gCvarInfo[CVAR_TURRET_MOVE_COST]))
		menuMoveTurret(id, gPlayerTurretEnt[id][gimenuSentryId[id]])
	}
	else if(item == 3)
		menuUpgradeTurret(id)
	return PLUGIN_CONTINUE
}
public menuConfirmDelete(id)
{
	DeleteTurretRanger(gPlayerTurretEnt[id][gimenuSentryId[id]])
	new menu = menu_create("Czy napewno chcesz usunac te wiezyczke?", "menuConfirmDeleteH")
	menu_additem(menu, "\yTak")
	menu_additem(menu, "\rWstecz")
	menu_setprop(menu, MPROP_EXITNAME, "Wstecz")
	menu_display(id, menu)
	
}
public menuConfirmDeleteH(id, menu, item)
{
	if(item == MENU_EXIT || item == 1)
	{
		if(is_user_alive(id))
			menuTurret(id, gimenuSentryId[id])
		return PLUGIN_CONTINUE
	}
	if(item == 0)
		DeleteTurret(id, gPlayerTurretEnt[id][gimenuSentryId[id]])
	return PLUGIN_CONTINUE
}
public menuMoveTurret(id, ent)
{
	if(!td_is_turret(ent) || !is_user_alive(id))
		return PLUGIN_CONTINUE
	
	DeleteTurretRanger(ent)
	entity_set_float(ent, EV_FL_nextthink, 0.0)
	
	new menu = menu_create("", "menuMoveTurretH")
	
	menu_additem(menu, "\yTutaj")
	
	menu_setprop(menu, MPROP_EXITNAME, "Wstecz")
	
	menu_display(id, menu)
	return PLUGIN_CONTINUE
}
public menuMoveTurretH(id, menu, item)
{
	if(item == MENU_EXIT || !is_user_alive(id)) {
		entity_set_float(gPlayerTurretEnt[id][gimenuSentryId[id]], EV_FL_nextthink, get_gametime()+0.5);
		DeleteTurretRanger(gPlayerTurretEnt[id][gimenuSentryId[id]])
		
		if(is_user_alive(id))
			menuTurret(id, gimenuSentryId[id] = 0)
		gimenuSentryId[id] = 0
		return PLUGIN_CONTINUE
	}
	
	if(item == 0)
	{
		new Float:fOrigin[3],Float:fOrigin2[3], Origin[3]
		pev(id, pev_origin, fOrigin)
		FVecIVec(fOrigin, Origin)
		
		new ent = gPlayerTurretEnt[id][gimenuSentryId[id]], entlist[3]
		
		new num = find_sphere_class(-1, "turret", 50.0, entlist, 2, fOrigin)
		if(num > 0)
		{
			if((entlist[0] == ent && entlist[1] != ent))
				goto repair;
			client_print(id, print_center, "Nie mozesz stawiac wiezyczek zbyt blisko siebie!")
			menuMoveTurret(id, ent)
			return PLUGIN_CONTINUE
		}
		num = find_sphere_class(-1, "func_illusionary", 10.0, entlist, 2, fOrigin)
		if(num > 0)
		{
			client_print(id, print_center, "W tym miejscu nie mozna postawic wiezyczki!")
			menuMoveTurret(id, ent)
			return PLUGIN_CONTINUE
		}
		repair:
		//do
		message_begin(MSG_BROADCAST ,SVC_TEMPENTITY, Origin, 0) 
		write_byte(TE_TELEPORT)
		write_coord(Origin[0]) 
		write_coord(Origin[1])
		write_coord(Origin[2])
		message_end()
		
		pev(ent, pev_origin, fOrigin2) 
		
		FVecIVec(fOrigin2, Origin)
		//od
		message_begin(MSG_BROADCAST ,SVC_TEMPENTITY, Origin, 0) 
		write_byte(TE_TELEPORT)
		write_coord(Origin[0]) 
		write_coord(Origin[1])
		write_coord(Origin[2])
		message_end()
		
		set_pev(ent, pev_origin, fOrigin)
		
		entity_set_float(ent, EV_FL_nextthink, get_gametime()+3.0)
		drop_to_floor(ent)
		
		client_print(id, 3, "%s Twoja wiezyczka uzbroji sie za 3s", gszPrefix)
		
		menuTurret(id, gimenuSentryId[id])
	}
	return PLUGIN_CONTINUE
}
public DeleteTurret(id, iEnt)
{
	if(!is_user_alive(id) || !is_valid_ent(iEnt))
		return PLUGIN_CONTINUE

	new Float:fOrigin[3], Origin[3]
	pev(iEnt, pev_origin, fOrigin)
	FVecIVec(fOrigin, Origin)
	
	message_begin(MSG_BROADCAST ,SVC_TEMPENTITY, Origin, 0) //message begin
	write_byte(TE_IMPLOSION)
	write_coord(Origin[0]) // start position
	write_coord(Origin[1])
	write_coord(Origin[2]+30)
	write_byte(100) 
	write_byte(45) 
	write_byte(5) 
	message_end()

	new sentryid = pev(iEnt, pev_turret_id)
	DeleteTurretRanger(gPlayerTurretEnt[id][sentryid])
	gimenuSentryId[id] = 0
	gPlayerTurretType[id][sentryid] = TURRET_NONE
	gPlayerTurretEnt[id][sentryid] = 0
	gPlayerTurretLevel[id][sentryid] = 0
	gPlayerTurretAmmo[id][sentryid] = 0
	gPlayerTurretNum[id]--
	gServerTurretsNum--
	
	set_pev(iEnt, pev_turret_owner, 0)
	set_pev(iEnt, pev_turret_id, 0)
	set_pev(iEnt, pev_turret_type, 0)
	set_pev(iEnt, pev_turret_firemode, 0)
	entity_set_float(iEnt, EV_FL_nextthink, 0.0);
	
	remove_entity(iEnt)
	cmdmenuTurrets(id)
	return PLUGIN_CONTINUE
}

public menuUpgradeTurret(id)
{
	if(!is_user_alive(id)) 
		return PLUGIN_CONTINUE
		
	new szTitle[200], szDamage[80], szRange[80]
	
	CreateTurretRanger(gPlayerTurretEnt[id][gimenuSentryId[id]])
	
	new turret = gimenuSentryId[id]
	new e_TurretsType:type = e_TurretsType:pev(gPlayerTurretEnt[id][turret], pev_turret_type)
	new damage_level = gPlayerTurretDamageLevel[id][turret]
	new range_level = gPlayerTurretRangeLevel[id][turret]
	
	formatex(szTitle, 199, "\r[\y %s \r] [\y %s\r ]^n[\y Poziom: \w%d\r ]^n[\y Zadawane obr: \w%d\y ~\w %d\r ] [ \yZasieg\w %d\r ]", 
	gszTurretsShopName[turret], gszTurretsName[type], gPlayerTurretLevel[id][turret],
	gTurretsDamageData[type][damage_level][0], gTurretsDamageData[type][damage_level][1],
	gTurretsRangeData[type][range_level])
	
	if(damage_level+1 >= 5)
		formatex(szDamage,  79, "Zwieksz Obrazenia\r [ \yMAX \w~ \yMAX \r]")
	else if(damage_level < 5)
		formatex(szDamage,  79, "Zwieksz Obrazenia\r [ \y%d\w Zlota\r ] [\w +\y%d \w~ \w+\y%d\r ]", gTurretsPriceData[type][damage_level+1],
		(gTurretsDamageData[type][damage_level+1][0] - gTurretsDamageData[type][damage_level][0]), 
		(gTurretsDamageData[type][damage_level+1][1] - gTurretsDamageData[type][damage_level][1]))
	
	if(range_level+1 >= 5)
		formatex(szRange,  63, "Zwieksz Zasieg\r [ \yMAX\r ]")
	else if(range_level < 5)
		formatex(szRange,  63, "Zwieksz Zasieg\r [ \y%d\w Zlota\r ] [\w +\y%d\r ]", gTurretsPriceData[type][range_level+1],
		(gTurretsRangeData[type][range_level+1] - gTurretsRangeData[type][range_level]))
	
	new menu = menu_create(szTitle, "menuUpgradeTurretH")
	new cb = menu_makecallback("menuUpgradeTurretCb")
	
	menu_additem(menu, szDamage,_,_,cb)
	menu_additem(menu, szRange,_,_,cb)
	
	menu_setprop(menu, MPROP_EXITNAME, "Wstecz")
	menu_display(id, menu)
	
	return PLUGIN_CONTINUE
}
public menuUpgradeTurretCb(id, menu, item)
{
	if((item == 0 && gPlayerTurretDamageLevel[id][gimenuSentryId[id]]+1 >= 5)
	|| (item == 0 && (gTurretsPriceData[e_TurretsType:pev(gPlayerTurretEnt[id][gimenuSentryId[id]], pev_turret_type)][gPlayerTurretDamageLevel[id][gimenuSentryId[id]]+1]) > td_get_user_info(id, PLAYER_GOLD)))
		return ITEM_DISABLED
	if((item == 1 && gPlayerTurretRangeLevel[id][gimenuSentryId[id]]+1 >= 5)
	|| (item == 1 && (gTurretsPriceData[e_TurretsType:pev(gPlayerTurretEnt[id][gimenuSentryId[id]], pev_turret_type)][gPlayerTurretRangeLevel[id][gimenuSentryId[id]]+1]) > td_get_user_info(id, PLAYER_GOLD)))
		return ITEM_DISABLED

	return ITEM_ENABLED
}
public menuUpgradeTurretH(id, menu, item)
{
	if(item == MENU_EXIT || !is_user_alive(id))
	{
		DeleteTurretRanger(gPlayerTurretEnt[id][gimenuSentryId[id]])
		if(is_user_alive(id))
			menuTurret(id, gimenuSentryId[id])
		gimenuSentryId[id] = 0
		return PLUGIN_CONTINUE
	}
	
	if(item == 0)
	{
		gPlayerTurretDamageLevel[id][gimenuSentryId[id]]++
		td_set_user_info(id, PLAYER_GOLD, td_get_user_info(id, PLAYER_GOLD)-gTurretsPriceData[e_TurretsType:pev(gPlayerTurretEnt[id][gimenuSentryId[id]], pev_turret_type)][gPlayerTurretDamageLevel[id][gimenuSentryId[id]]])
	}
	if(item == 1)
	{
		gPlayerTurretRangeLevel[id][gimenuSentryId[id]]++
		td_set_user_info(id, PLAYER_GOLD, td_get_user_info(id, PLAYER_GOLD)-gTurretsPriceData[e_TurretsType:pev(gPlayerTurretEnt[id][gimenuSentryId[id]], pev_turret_type)][gPlayerTurretRangeLevel[id][gimenuSentryId[id]]])
	}
	
	gPlayerTurretLevel[id][gimenuSentryId[id]] = floatround((gPlayerTurretDamageLevel[id][gimenuSentryId[id]]+gPlayerTurretRangeLevel[id][gimenuSentryId[id]] +1)/2.0, floatround_ceil)
	
	new szModel[64];
	formatex(szModel, 63, "models/TD/sentrygun_%d.mdl", gPlayerTurretLevel[id][gimenuSentryId[id]])
	entity_set_model(gPlayerTurretEnt[id][gimenuSentryId[id]], szModel)

	menuUpgradeTurret(id)
	return PLUGIN_CONTINUE
}
public CreateTurretRanger(turret)
{
	if(!is_valid_ent(turret))
		return PLUGIN_CONTINUE
	
	if(td_is_ranger_exists(turret))
		DeleteTurretRanger(turret)
		
	new Float:Origin[3], Float:Angles[3]
	
	new ranger = create_entity("env_sprite")
	
	set_pev(turret, pev_turret_ranger, ranger)
	
	entity_set_string(ranger, EV_SZ_classname, "ranger")
	entity_set_model(ranger, gSpriteRanger)
	set_pev(ranger, pev_turret_owner, pev(turret, pev_turret_owner))
	/*K¹t*/
	entity_get_vector(ranger, EV_VEC_angles, Angles)
	pev(turret, pev_origin, Origin)
	
	Angles[0]+=90
	
	entity_set_origin(ranger, Origin)
	entity_set_vector(ranger, EV_VEC_angles, Angles)
	
	new id = pev(turret, pev_turret_owner)
	new sentryid = pev(turret, pev_turret_id)
	new e_TurretsType:type = e_TurretsType:pev(turret, pev_turret_type)
	new lvl = gPlayerTurretRangeLevel[id][sentryid]
	new range = gTurretsRangeData[type][lvl]
	
	set_pev(ranger, pev_scale, range/250.0)
	fm_set_rendering(ranger, kRenderFxNone, 0, 0, 0, kRenderTransAdd, 255)
	
	return PLUGIN_CONTINUE
}

public DeleteTurretRanger(turret) {
	if(!is_valid_ent(pev(turret, pev_turret_ranger)))
		return PLUGIN_CONTINUE
	
	remove_entity(pev(turret, pev_turret_ranger))
	set_pev(turret, pev_turret_ranger, 0)
	return PLUGIN_CONTINUE
}	
public CreateTurret(id, sentryid, type) {
		
	new Float:fOrigin[3];
	pev(id, pev_origin, fOrigin)
	new entlist[3]
	new num = find_sphere_class(-1, "turret", 50.0, entlist, 2, fOrigin)
	if(num > 0)
	{
		client_print(id, print_center, "Nie mozesz stawiac wiezyczek zbyt blisko siebie!")
		cmdmenuTurrets(id)
		return PLUGIN_CONTINUE
	}
	num = find_sphere_class(-1, "func_illusionary", 10.0, entlist, 2, fOrigin)
	if(num > 0)
	{
		client_print(id, print_center, "W tym miejscu nie mozna postawic wiezyczki!")
		cmdmenuTurrets(id)
		return PLUGIN_CONTINUE
	}
	new iEnt = create_entity("info_target")

	entity_set_string(iEnt, EV_SZ_classname, "turret");
	entity_set_model(iEnt, "models/TD/sentrygun_1.mdl");
	
	entity_set_size(iEnt, Float:{-16.0, -16.0, 0.0}, Float:{16.0, 16.0, 48.0});
	entity_set_origin(iEnt, fOrigin);
	
	entity_set_int(iEnt, EV_INT_movetype, MOVETYPE_TOSS);
	entity_set_vector(iEnt, EV_VEC_angles, Float:{0.0, 0.0, 0.0});
	entity_set_byte(iEnt, EV_BYTE_controller2, 127);
	entity_set_float(iEnt, EV_FL_takedamage, DAMAGE_YES);
	
	set_pev(iEnt, pev_turret_owner, id)
	set_pev(iEnt, pev_turret_id, sentryid)
	set_pev(iEnt, pev_turret_type, type)
	set_pev(iEnt, pev_turret_firemode, 1)
	
	gPlayerTurretType[id][sentryid] = e_TurretsType:type
	gPlayerTurretEnt[id][sentryid] = iEnt
	gPlayerTurretLevel[id][sentryid] = 1
	gPlayerTurretDamageLevel[id][sentryid] = 0
	gPlayerTurretRangeLevel[id][sentryid] = 0
	gPlayerTurretAmmo[id][sentryid] = (e_TurretsType:type==TURRET_NORMAL?100:e_TurretsType:type==TURRET_LASER?51:e_TurretsType:type==TURRET_LIGHTING?200:0)
	gPlayerTurretNum[id]++
	gServerTurretsNum++
	
	emit_sound(id, CHAN_AUTO, gSounds[SOUND_TURRET_PLANT], 1.0, ATTN_NORM, 0, PITCH_NORM);
	
	menuTurret(id, sentryid)
	entity_set_float(iEnt, EV_FL_nextthink, get_gametime()+1.0);
	td_set_user_info(id, PLAYER_GOLD, _:td_get_user_info(id, PLAYER_GOLD)-gTurretsPriceData[e_TurretsType:(item+1)][0])
	return PLUGIN_CONTINUE
}
	
public TurretThink(ent) {
	if(!is_valid_ent(ent))
		return PLUGIN_CONTINUE
		
	new e_TurretsType:iType = e_TurretsType:pev(ent, pev_turret_type)
	new iPlayer = pev(ent, pev_turret_owner)
	new iSentry = pev(ent, pev_turret_id)
	new iShoot = pev(ent, pev_turret_firemode)
	new iTarget = pev(ent, pev_turret_target)
	
	static Float:TurretOrigin[3]
	static Float:TargetOrigin[3]
	
	/* Nie strzelaj */
	if(gPlayerTurretAmmo[iPlayer][iSentry] == 0) {
		emit_sound(ent, CHAN_AUTO, gSounds[SOUND_TURRET_NOAMMO], 1.0, ATTN_NORM, 0, PITCH_NORM);
		client_cmd(iPlayer, "spk sound/%s", gSounds[SOUND_TURRET_NOAMMO]);
		gPlayerTurretAmmo[iPlayer][iSentry]--
		return PLUGIN_CONTINUE
	}
	/* ============ */
	
	if(iShoot && is_valid_ent(iTarget)) 
	{
		if(!fm_is_ent_visible(ent, iTarget) || pev(iTarget, pev_iuser1) == 0) 
		{
			fireoff:
			iShoot = 0
			set_pev(ent, pev_turret_firemode, 0)
			set_pev(ent, pev_turret_target, 0)
			emit_sound(ent, CHAN_AUTO, gSounds[SOUND_TURRET_STOP_FIRE], 1.0, ATTN_NORM, 0, PITCH_NORM);
			
			entity_set_float(ent, EV_FL_nextthink, get_gametime()+0.1);
			return PLUGIN_CONTINUE
		}
		
		pev(iTarget, pev_origin, TargetOrigin)
		pev(ent, pev_origin, TurretOrigin)
		
		if(get_distance_f(TargetOrigin, TurretOrigin) > gTurretsRangeData[iType][gPlayerTurretRangeLevel[iPlayer][iSentry]])
			goto fireoff;
		
			
		TurretTurnToTarget(ent, iTarget);
		
		TurretOrigin[2] += 45.0
		
		gPlayerTurretAmmo[iPlayer][iSentry]--
		
		if(gPlayerTurretAmmo[iPlayer][iSentry] == 50)
		{
			client_cmd(iPlayer, "spk sound/%s", gSounds[SOUND_TURRET_LOWAMMO]);
			emit_sound(ent, CHAN_AUTO, gSounds[SOUND_TURRET_LOWAMMO], 1.0, ATTN_NORM, 0, PITCH_NORM);
		}
		
		switch(iType) {
			case TURRET_NORMAL: 
			{
				switch(random_num(1, 2))
				{
					case 1:emit_sound(ent, CHAN_AUTO, gSounds[SOUND_TURRET_NORMAL_FIRE_1], 1.0, ATTN_NORM, 0, PITCH_NORM);
					case 2:emit_sound(ent, CHAN_AUTO, gSounds[SOUND_TURRET_NORMAL_FIRE_2], 1.0, ATTN_NORM, 0, PITCH_NORM);
				}
			}
			case TURRET_LASER: 
			{
				switch(random_num(1, 2))
				{
					case 1:emit_sound(ent, CHAN_AUTO, gSounds[SOUND_TURRET_LASER_FIRE_1], 1.0, ATTN_NORM, 0, PITCH_NORM);
					case 2:emit_sound(ent, CHAN_AUTO, gSounds[SOUND_TURRET_LASER_FIRE_2], 1.0, ATTN_NORM, 0, PITCH_NORM);
				}
			}
			case TURRET_LIGHTING: 
			{
				switch(random_num(1, 2))
				{
					case 1:emit_sound(ent, CHAN_AUTO, gSounds[SOUND_TURRET_LIGHTING_FIRE_1], 1.0, ATTN_NORM, 0, PITCH_NORM);
					case 2:emit_sound(ent, CHAN_AUTO, gSounds[SOUND_TURRET_LIGHTING_FIRE_2], 1.0, ATTN_NORM, 0, PITCH_NORM);
				}
			}
		}
		switch(iType) {
			case TURRET_NORMAL: {
				message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
				write_byte(TE_TRACER);
				write_coord(floatround(TurretOrigin[0]));
				write_coord(floatround(TurretOrigin[1]));
				write_coord(floatround(TurretOrigin[2]));
				write_coord(floatround(TargetOrigin[0]));
				write_coord(floatround(TargetOrigin[1]));
				write_coord(random_num(floatround(TargetOrigin[2])-20, floatround(TargetOrigin[2])+30));
				message_end();
				
				createShell(ent, TurretOrigin, 1)
			}
			case TURRET_LASER: {
				message_begin(MSG_BROADCAST ,SVC_TEMPENTITY)
				write_byte(TE_BEAMPOINTS)
				write_coord(floatround(TurretOrigin[0]));
				write_coord(floatround(TurretOrigin[1]));
				write_coord(floatround(TurretOrigin[2]));
				write_coord(floatround(TargetOrigin[0]));
				write_coord(floatround(TargetOrigin[1]));
				write_coord(random_num(floatround(TargetOrigin[2])-20, floatround(TargetOrigin[2])+30));
				write_short(gSpriteLaserBeam)
				write_byte(0)
				write_byte(0)
				write_byte(1) // time
				write_byte(5*(gPlayerTurretLevel[iPlayer][iSentry])) // gruboϾ
				write_byte(1)
				switch(gPlayerTurretLevel[iPlayer][iSentry]) {
					case 1: {
						write_byte(255)
						write_byte(255)
						write_byte(255)
					} 
					case 2: {
						write_byte(0)
						write_byte(255)
						write_byte(0)
					}
					case 3: {
						write_byte(255)
						write_byte(255)
						write_byte(0)
					} 
					case 4: {
						write_byte(255)
						write_byte(0)
						write_byte(0)
					} 
					case 5:{
						write_byte(0)
						write_byte(0)
						write_byte(255)
					}
				}
				write_byte(255)
				write_byte(5)
				message_end()
			}
			case TURRET_LIGHTING: {
				message_begin(MSG_BROADCAST ,SVC_TEMPENTITY)
				write_byte(TE_BEAMPOINTS)
				write_coord(floatround(TurretOrigin[0]));
				write_coord(floatround(TurretOrigin[1]));
				write_coord(floatround(TurretOrigin[2]));
				write_coord(floatround(TargetOrigin[0]));
				write_coord(floatround(TargetOrigin[1]));
				write_coord(random_num(floatround(TargetOrigin[2])-20, floatround(TargetOrigin[2])+30));
				write_short(gSpriteLaserBeam)
				write_byte(0)
				write_byte(0)
				write_byte(1) // time
				write_byte(10) // gruboϾ
				write_byte(16)
				switch(gPlayerTurretLevel[iPlayer][iSentry]) {
					case 1: {
						write_byte(255)
						write_byte(255)
						write_byte(255)
					} 
					case 2: {
						write_byte(0)
						write_byte(255)
						write_byte(0)
					}
					case 3: {
						write_byte(255)
						write_byte(255)
						write_byte(0)
					} 
					case 4: {
						write_byte(255)
						write_byte(0)
						write_byte(0)
					} 
					case 5:{
						write_byte(0)
						write_byte(0)
						write_byte(255)
					}
				}
				write_byte(255)
				write_byte(5) //szybkoϾ
				message_end()
			}	
		}
		
		/*Zadawanie obrazen*/
		switch(random_num(1, 4)) {
			case 1, 2, 3: {
				new Float:dmg
				dmg = random_float(float(gTurretsDamageData[iType][gPlayerTurretDamageLevel[iPlayer][iSentry]][0]),float(gTurretsDamageData[iType][gPlayerTurretDamageLevel[iPlayer][iSentry]][1]))
				ExecuteHamB(Ham_TakeDamage, iTarget, iPlayer, iPlayer, dmg, DMG_DROWN, 1);
			}
			case 4: {
				// jeœli wie¿yczka nietrafi³a
			}
		}
		/* thinki */
		
		switch(iType) {
			case TURRET_NORMAL: entity_set_float(ent, EV_FL_nextthink, get_gametime()+ (gTurretsFreqData[TURRET_NORMAL]/100.0));
			case TURRET_LASER: entity_set_float(ent, EV_FL_nextthink, get_gametime()+ (gTurretsFreqData[TURRET_LASER]/100.0));
			case TURRET_LIGHTING: entity_set_float(ent, EV_FL_nextthink, get_gametime()+ (gTurretsFreqData[TURRET_LIGHTING]/100.0));
		}
		
		return PLUGIN_CONTINUE	
	}
	else
		iShoot = 0
		
	iTarget = TurretGetClosestMonster(ent)

	if(iTarget && (iTarget && fm_is_ent_visible(ent, iTarget)))
	{
		emit_sound(ent, CHAN_AUTO, gSounds[SOUND_TURRET_START_FIRE], 1.0, ATTN_NORM, 0, PITCH_NORM);
		TurretTurnToTarget(ent, iTarget);
		
		set_pev(ent, pev_turret_target, iTarget)
		set_pev(ent, pev_turret_firemode, 1)
		
		entity_set_float(ent, EV_FL_nextthink, get_gametime()+0.5);
		return PLUGIN_CONTINUE
	}
	

	
	/*  Stan Wolny  */
	if(!iShoot) {
		
		new controler1 = entity_get_byte(ent, EV_BYTE_controller1)+2;
		if(controler1 > 255)
			controler1 = 0;
		entity_set_byte(ent, EV_BYTE_controller1, controler1);
			
		new controler2 = entity_get_byte(ent, EV_BYTE_controller2);
		if(controler2 > 127 || controler2 < 127)
			entity_set_byte(ent, EV_BYTE_controller2, 127);
		

		entity_set_float(ent, EV_FL_nextthink, get_gametime()+0.25);
	}
	return PLUGIN_CONTINUE
}
stock get_origin_from_dist_player(id, Float:dist, Float:origin[3], s3d = 1) {
	new Float:idorigin[3];
	entity_get_vector(id, EV_VEC_origin, idorigin); // lub pev(id, pev_origin, idorigin) dla fakemety
	
	if(dist == 0) {
		origin = idorigin;
		return;
	}
	
	new Float:idvangle[3];
	entity_get_vector(id, EV_VEC_v_angle, idvangle); // lub pev(id, pev_v_angle, idvangle) dla fakemety
	
	idvangle[0] *= -1;
	
	origin[0] = idorigin[0] + dist * floatcos(idvangle[1], degrees) * ((s3d) ? floatabs(floatcos(idvangle[0], degrees)) : 1.0);
	origin[1] = idorigin[1] + dist * floatsin(idvangle[1], degrees) * ((s3d) ? floatabs(floatcos(idvangle[0], degrees)) : 1.0);
	origin[2] = idorigin[2] + ((s3d) ? dist * floatsin(idvangle[0], degrees) : 0.0);
}
stock TurretTurnToTarget(ent, enemy, mode = 0, Float:enemyOrigin[3] = {0.0, 0.0, 0.0})
{
	static Float:sentryOrigin[3], Float:closestOrigin[3]
	pev(ent, pev_origin, sentryOrigin)
	
	if(enemyOrigin[0] == 0.0 && enemyOrigin[1] == 0.0 && enemyOrigin[2] == 0.0)
		pev(enemy, pev_origin, closestOrigin)
	else
		closestOrigin = enemyOrigin
		
	new newTrip, Float:newAngle = floatatan(((closestOrigin[1]-sentryOrigin[1])/(closestOrigin[0]-sentryOrigin[0])), radian) * 57.2957795;

	if(closestOrigin[0] < sentryOrigin[0])
		newAngle += 180.0;
	if(newAngle < 0.0)
		newAngle += 360.0;
	
	sentryOrigin[2] += 35.0
	if(closestOrigin[2] > sentryOrigin[2])
		newTrip = 0;
	if(closestOrigin[2] < sentryOrigin[2])
		newTrip = 255;
	if(closestOrigin[2] == sentryOrigin[2])
		newTrip = 127;
		
	entity_set_byte(ent, EV_BYTE_controller1, floatround(newAngle*0.70833));
	entity_set_byte(ent, EV_BYTE_controller2, newTrip);
	
	if(!mode)
	{
		entity_set_byte(ent, EV_BYTE_controller3, entity_get_byte(ent, EV_BYTE_controller3)+20>255? 0: entity_get_byte(ent, EV_BYTE_controller3)+20);
	}
}

public TurretGetClosestMonster(ent) {
	new Float:flDistanse = float( gTurretsRangeData[e_TurretsType:pev(ent, pev_turret_type)][gPlayerTurretRangeLevel[pev(ent, pev_turret_owner)][pev(ent, pev_turret_id)]])
	new Float:fOrigin1[3];
	new Float:fOrigin2[3]
	
	pev(ent, pev_origin, fOrigin1)
	
	new tempEntID;
	new entlist[6]
	new Float:dis;
	for(new i ; i < find_sphere_class(ent, "monster", flDistanse, entlist, 5) ; i++) 
	{	if(pev(entlist[i], pev_iuser1) == 0)
			continue

		pev(entlist[i], pev_origin, fOrigin2);
		
		dis = get_distance_f(fOrigin1, fOrigin2)
		if(dis < flDistanse)
		{
			flDistanse = dis;
			tempEntID = entlist[i];
		}	
	}
	return tempEntID;
}

public LoadSound() {
	new szText[128], len;
	new szTemp[3][128];

	if(!file_exists(gszSoundConfigFile))
	{
		log_to_file(gszLogFile, "Brak pliku konfiguracyjnego dzwiekow...")
		return PLUGIN_CONTINUE
	}
	
	for(new i ; read_file(gszSoundConfigFile, i, szText, 127, len) ; i++)
	{
		if(equali(szText, ";") || equali(szText, ""))
			continue;
			
		parse(szText, szTemp[0], 127, szTemp[1], 16, szTemp[2], 127)
		remove_quotes(szTemp[2]);
		
		if(equali(szTemp[0], "TURRET_NORMAL_FIRE_1")) 
			copy(gSounds[SOUND_TURRET_NORMAL_FIRE_1], 127, szTemp[2])
		else if(equali(szTemp[0], "TURRET_NORMAL_FIRE_2")) 
			copy(gSounds[SOUND_TURRET_NORMAL_FIRE_2], 127, szTemp[2])
		else if(equali(szTemp[0], "TURRET_LASER_FIRE_1")) 
			copy(gSounds[SOUND_TURRET_LASER_FIRE_1], 127, szTemp[2])
		else if(equali(szTemp[0], "TURRET_LASER_FIRE_2")) 
			copy(gSounds[SOUND_TURRET_LASER_FIRE_2], 127, szTemp[2])
		else if(equali(szTemp[0], "TURRET_LIGHTING_FIRE_1")) 
			copy(gSounds[SOUND_TURRET_LIGHTING_FIRE_1], 127, szTemp[2])
		else if(equali(szTemp[0], "TURRET_LIGHTING_FIRE_2")) 
			copy(gSounds[SOUND_TURRET_LIGHTING_FIRE_2], 127, szTemp[2])
		else if(equali(szTemp[0], "TURRET_START_FIRE")) 
			copy(gSounds[SOUND_TURRET_START_FIRE], 127, szTemp[2])
		else if(equali(szTemp[0], "TURRET_STOP_FIRE")) 
			copy(gSounds[SOUND_TURRET_STOP_FIRE], 127, szTemp[2])
		else if(equali(szTemp[0], "TURRET_PLANT")) 
			copy(gSounds[SOUND_TURRET_PLANT], 127, szTemp[2])
		else if(equali(szTemp[0], "TURRET_LOW_AMMO")) 
			copy(gSounds[SOUND_TURRET_LOWAMMO], 127, szTemp[2])
		else if(equali(szTemp[0], "TURRET_NO_AMMO")) 
			copy(gSounds[SOUND_TURRET_NOAMMO], 127, szTemp[2])
		else if(equali(szTemp[0], "MENU_SELECT")) 
			copy(gSounds[SOUND_MENU_SELECT], 127, szTemp[2])
	}

	return PLUGIN_CONTINUE
}

public LoadTurretsConfig()
{
	new szText[64], len
	new szData[64], iData[2][6]
	new szFormat[64]
	
	server_cmd("exec addons/amxmodx/configs/td_cvars.cfg");
	
	if(!file_exists(gszTurretsConfigFile))
	{
		log_to_file("Tower Defense.log", "TURRETS : Brak pliku konfiguracyjnego '%s'. Gra niemozliwa. ", gszTurretsConfigFile)
		td_set_game_status(eGame:GAME_NOT_AVAILABLE)
		return PLUGIN_CONTINUE
	}
	
	for(new i = 0 ; read_file(gszTurretsConfigFile, i, szText, 63, len); i ++)
	{
		if(szText[0] == ';' || (szText[0] == '/' && szText[1] == '/') || equali(szText, ""))
			continue;
		
		replace_all(szText, 63, "=", "")
		
		parse(szText, szData, 63, iData[0], 5, iData[1], 5)
		
		new iNum = str_to_num(iData[0])
		new iNum2 = str_to_num(iData[1])
		
		if(equali(szData, "NORMAL_TURRET_FIRE_FREQ"))
		{
			gTurretsFreqData[TURRET_NORMAL] = iNum
			continue
		}
		
		for(new x = 1 ; x <= 5; x++)
		{
			formatex(szFormat, 63, "NORMAL_TURRET_RANGE_%d", x)
			if(equali(szData, szFormat))
			{
				gTurretsRangeData[TURRET_NORMAL][x-1] = iNum
				continue
			}
			formatex(szFormat, 63, "NORMAL_TURRET_PRICE_%d", x)
			if(equali(szData, szFormat))
			{
				gTurretsPriceData[TURRET_NORMAL][x-1] = iNum
				continue
			}
			formatex(szFormat, 63, "NORMAL_TURRET_DMG_%d", x)
			if(equali(szData, szFormat))
			{
				gTurretsDamageData[TURRET_NORMAL][x-1][0] = iNum
				gTurretsDamageData[TURRET_NORMAL][x-1][1] = iNum2
				iNum2 =0
				continue
			}
		}
		
		if(equali(szData, "LASER_TURRET_FIRE_FREQ"))
		{
			gTurretsFreqData[TURRET_LASER] = iNum
			continue
		}
		
		for(new x = 1; x <= 5; x++)
		{
			formatex(szFormat, 63, "LASER_TURRET_RANGE_%d", x)
			if(equali(szData, szFormat))
			{
				gTurretsRangeData[TURRET_LASER][x-1] = iNum
				continue
			}
			formatex(szFormat, 63, "LASER_TURRET_PRICE_%d", x)
			if(equali(szData, szFormat))
			{
				gTurretsPriceData[TURRET_LASER][x-1] = iNum
				continue
			}
			formatex(szFormat, 63, "LASER_TURRET_DMG_%d", x)
			if(equali(szData, szFormat))
			{
				gTurretsDamageData[TURRET_LASER][x-1][0] = iNum
				gTurretsDamageData[TURRET_LASER][x-1][1] = iNum2
				iNum2 =0
				continue
			}
		}
		
		if(equali(szData, "LIGHTING_TURRET_FIRE_FREQ"))
		{
			gTurretsFreqData[TURRET_LIGHTING] = iNum
			continue
		}
		
		for(new x = 1; x <= 5; x++)
		{
			formatex(szFormat, 63, "LIGHTING_TURRET_RANGE_%d", x)
			if(equali(szData, szFormat))
			{
				gTurretsRangeData[TURRET_LIGHTING][x-1] = iNum
				continue
			}
			formatex(szFormat, 63, "LIGHTING_TURRET_PRICE_%d", x)
			if(equali(szData, szFormat))
			{
				gTurretsPriceData[TURRET_LIGHTING][x-1] = iNum
				continue
			}
			formatex(szFormat, 63, "LIGHTING_TURRET_DMG_%d", x)
			if(equali(szData, szFormat))
			{
				gTurretsDamageData[TURRET_LIGHTING][x-1][0] = iNum
				gTurretsDamageData[TURRET_LIGHTING][x-1][1] = iNum2
				iNum2 =0
				continue
			}
		}
		
		
	}
	MAX_MAP_TURRET = clamp(max_map_turrets(), 1, MAX_SERVER_TURRET)
	return PLUGIN_CONTINUE;
}

stock createShell(index, Float:fOrigin[3], num)
{
	for(new i; i < num;i++)
	{
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY, {0.0, 0.0, 0.0}, index);
		write_byte(TE_MODEL);
		write_coord(floatround(fOrigin[0]));
		write_coord(floatround(fOrigin[1]));
		write_coord(floatround(fOrigin[2]));
		write_coord(random_num(-100,100));
		write_coord(random_num(-100,100));
		write_coord(random_num(100,200));
		write_angle(random_num(0,360));
		write_short(gShellIndex);
		write_byte(0);
		write_byte(100);
		message_end()
	}
}

public td_is_turret(iEnt)
{
	if(!is_valid_ent(iEnt))
		return 0;
	
	new classname[8]
	entity_get_string(iEnt, EV_SZ_classname, classname, 7)
	if(equali(classname, "turret"))
		return 1;
	return 0;
}

public td_is_ranger(iEnt)
{
	if(!is_valid_ent(iEnt))
		return 0;
	
	new classname[8]
	entity_get_string(iEnt, EV_SZ_classname, classname, 7)
	if(equali(classname, "ranger"))
		return 1;
	return 0;
}

public td_is_ranger_exists(iEnt) {	
	if(is_valid_ent(pev(iEnt, pev_turret_ranger)))
		return 1;
	return 0;
}
	
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1045\\ f0\\ fs16 \n\\ par }
*/
İşinizi görür mü bilmiyorum ama denersiniz.

Link - https://gamebanana.com/gamefiles/3392

Link:
Linklerini gizle
Linki Kopyala
Kullanıcı avatarı

bilalgecer47
Mesajlar: 729
Kayıt: Çrş Ağu 22, 2018 9:20 pm

Ctler için taret Eklentisi

Mesaj gönderen bilalgecer47 »

MaviRuh* yazdı: Cmt Oca 09, 2021 8:46 pm
ENESIZM yazdı: Cmt Oca 09, 2021 8:42 pm eklentinin ana yapımcıları olarak maalesef ki paylaşamıyoruz. lakin hayrına yapıp paylaşacak arkadaşlar illa ki vardır.
Neden paylaşamıyorsunuz ?
Daha çok kişinin kullanması yapımcılar olarak sizi mutlu etmesi lazım değil ki
Attığım şekilde denedinizmi?

Link:
Linklerini gizle
Linki Kopyala
Kullanıcı avatarı

ENESIZM
Mesajlar: 2191
Kayıt: Prş Tem 06, 2017 10:44 pm
Konum: Mersin
Server Ip/DNS: MoonDeveloperTeam
İletişim:

Ctler için taret Eklentisi

Mesaj gönderen ENESIZM »

MaviRuh* yazdı: Cmt Oca 09, 2021 8:46 pm
ENESIZM yazdı: Cmt Oca 09, 2021 8:42 pm eklentinin ana yapımcıları olarak maalesef ki paylaşamıyoruz. lakin hayrına yapıp paylaşacak arkadaşlar illa ki vardır.
Neden paylaşamıyorsunuz ?
Daha çok kişinin kullanması yapımcılar olarak sizi mutlu etmesi lazım değil ki
yaptığımız eklenti, diğer arkadaşların attığı eklentiler ile benzersiz. ki biliyoruzki biz bu eklentileri paylaştığımızda kullananlar başımıza kalkmaya çalışacak. bir keresinde iyilik olsun diye ilk yaptığımız jbmenüyü hayrına bir sunucuya kurmuştum, çocuk millete satmaya kalktı. daha sonra çalındı vs. bu yüzden buna benzer iyiliklerimizi askıya aldık.

Link:
Linklerini gizle
Linki Kopyala
Kullanıcı avatarı

Konu Sahibi
MaviRuh*
Mesajlar: 448
Kayıt: Çrş Haz 21, 2017 12:23 am
Server Ip/DNS: 213.238.173.30
Clan İsmi: Mr.GaminG JB
İletişim:

Ctler için taret Eklentisi

Mesaj gönderen MaviRuh* »

Anlıyorum sizde haklısınız da sanki yeni birşeyler gelmesi lazım bu jail sunucularına diye düşünüyorum. Bu da taret eklentisi olması güzel olurdu sanki. Siz bu eklentiyi paylaştığınızda başımıza çıkıyorlar derken sonuçta yapımcısı sizsiniz ve ilk paylaşan sizsiniz. yani paylassaniz çok iyi olur sanki

Link:
Linklerini gizle
Linki Kopyala

hudavendigars
Mesajlar: 1
Kayıt: Pzt Oca 04, 2021 11:43 am

Ctler için taret Eklentisi

Mesaj gönderen hudavendigars »

Sentry gun eklentısı mevcut ne kadar mezılı olucagı kımlerın kurabılıcegı vs vs ayarlanabılıyor bırazcık degısıklık yaparsanız sentry gun eklentısı ısınızı gorur

Link:
Linklerini gizle
Linki Kopyala
Cevapla