LuxurY forum (scripting SA-MP)

Объявление

с 29 марта 2007 года
LuxurY forum - крупнейший российский форум скриптинга в PAWNO
Новый форум
Задавайте свои вопросы

Архив скриптов


Наша кнопка:
LuxurY forum :: Scripting SA-MP
Код:

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » LuxurY forum (scripting SA-MP) » SA-MP 0.2 » Кнопки действия и все что с ними связанно!


Кнопки действия и все что с ними связанно!

Сообщений 1 страница 16 из 16

1

Вот решил зделать бомб шоп что б он был без прописей!
ну вот накидал такой скрипт:

Код:
if ((newkeys==KEY_FIRE)&&(curvpldk[playerid]==1)&&(GetPlayerWeapon(playerid)==40))
	    {
	    if(curvpld[playerid] == 999) {
  SendClientMessage(playerid,COLOR_RED,"* Òû íå óñòàíàâëèâàë áîìáó íà ìàøèíó");
  } else {
  ExploseVehicle(curvpld[playerid]);
SendClientMessage(playerid, 0xFFFFFFAA, "* Ìàøèíà âçîðâàíà");
curvpldk[playerid] = 0;
for (new v = 1; v < MAX_VEHICLES; v++) {
new dis = GetDistanceBetweenVehicles(curvpld[playerid],v);
if (dis < 5) {
SetVehicleHealth(v,0);
}
else if (dis > 5 && dis < 10) {
GiveVehicleHealth(v,-650);
}
else if (dis > 10 && dis < 15) {
GiveVehicleHealth(v,-300);
 }
 }
 }
	    }
  }

Меня собственно интерисует самая верхняя строчка!
Вот все условия в ней работаю кроме GetPlayerWeapon(playerid)==40
Хотя если я изменю допустим 40 на 22(пистик) то все работает на ура, а чем же не нравится ему оружие "Detonator"!=(
Скрипт то компилется нормально, но в игре принажатии нечего не происходит! Может кто нить знает как решить эту проблему?

0

2

Сделай простенькую команду c

Код:
SendClientMessage(playerid,0x00ff00aa,IntToStr(GetPlayerWeapon(playerid)));

и посмотри что напишут

0

3

О интересно, надо поробовать, но помоиму єто мне нечего не даст, потому что трабл помоиму не в самой функции, а именно в єтом типе оружия, и оно віполняет тока 1 действие по подрыву бомбы! И они взоимосвязанны с другдругом! А может просто функция не поддерживает это оружие таким способом...

Ну я уже зделал просто под другую кнопку, хоть и не так прикольно но зато работает без сбоев!=)

Ну всетаки попробую ради интереса!

0

4

0NEhels написал(а):

if ((newkeys==KEY_FIRE)&&(curvpldk[playerid]==1)&&(GetPlayerWeapon(playerid)==40))

а зачем в скобках все написал?
проще:

Код:
if (newkeys==KEY_FIRE && curvpldk[playerid]==1 && GetPlayerWeapon(playerid) == 40)

а заменять 40 на WEAPON_BOMB нет смысла

Evgeniy написал(а):

Сделай простенькую команду c

Код:
SendClientMessage(playerid,0x00ff00aa,IntToStr(GetPlayerWeapon(playerid)));
и посмотри что напишут

+1 правильно =)

0

5

Попробуй использовать GetPlayerWeaponData.
Попробуй сделать дебаг: создать мод, в нем дать игроку разное оружие, в том числе и детонатор и через GetPlayerWeaponData и GetPlayerWeapon узнавать, какое оружие есть у игрока, чтоб было проще, выводи результаты в чат. Возможно дело именно в этом типе оружия. А быть может дело в том, что при нажатии кнопки "огонь" детонатор исчезает.

0

6

С другим оружием проверил все ок!
А детонар действительно исчезает... тока как с этим боротся...
О у меня вроде я появилась идейка... попробую завтра реализовать!

0

7

0NEhels написал(а):

С другим оружием проверил все ок!
А детонар действительно исчезает... тока как с этим боротся...
О у меня вроде я появилась идейка... попробую завтра реализовать!

отпишись тогда =)

0

8

Оказывается, дело даже не в том что он исчезает, а в то что функция GetPlayerWeapon выдается значение не 40, а 0 - как у кулака=(
А GetPlayerWeaponData выдает правильно, но она работает не так как надо для этого скрипта, она просто проверяет какое вообше есть у игрока оружие, а не то какое выделено сейчвс=( Может кто ить знает похожие еще команды, и ли команды которые считывет не id оружия, а его модель...

0

9

0NEhels написал(а):

Оказывается, дело даже не в том что он исчезает, а в то что функция GetPlayerWeapon выдается значение не 40, а 0 - как у кулака=(
А GetPlayerWeaponData выдает правильно, но она работает не так как надо для этого скрипта, она просто проверяет какое вообше есть у игрока оружие, а не то какое выделено сейчвс=( Может кто ить знает похожие еще команды, и ли команды которые считывет не id оружия, а его модель...

число патронов вроде возвращается правильно, можно попробовать: GivePlayerWeapon(playerid,40,777);
и потом определить что это пульт через:  if (GetPlayerAmmo(playerid)==777)

0

10

попробуйте

0

11

Класс! Там все работает ок!
Осталось тока немного оптимизировать скрипт!

0

12

0NEhels написал(а):

Класс! Там все работает ок!
Осталось тока немного оптимизировать скрипт!

выложишь тогда посмотреть? =)

0

13

Вот что получилось:

Код:
forward DetonatorB();
new curvpldk[MAX_PLAYERS];
new detonatorB[MAX_PLAYERS];

В public OnPlayerConnect:
curvpldk[playerid] = 0;
detonatorB[playerid] = 0;

В public OnGameModeInit():
SetTimer("DetonatorB",500,1);

public DetonatorB() {
	for (new i = 0; i < MAX_PLAYERS; i++)
	{
	if (GetPlayerAmmo(i)==777)
	    {
detonatorB[i] = 1;
	    }
	else
	    {
	    detonatorB[i] = 0;
	    }
	}
return 1;
}

Вот еще:
if(strcmp(cmd, "/bd", true) == 0) {
    new VID = GetPlayerVehicleID(playerid);
 	if (bombhave[VID] == 1) {
 	bombd[VID] = 1;
 	curvpldk[playerid] = 1;
 	curvpld[playerid] = VID;
	bombhave[VID] = 0;
	GivePlayerWeapon(playerid,40,777);
	SendClientMessage(playerid, 0xFFFFFFAA, "* Äåòîíàòîð óñòàíîâëåí. Äëÿ îòìåíû íàïèøè /ccd");
 	} else {
 	SendClientMessage(playerid,COLOR_RED,"* Íà òâîåé ìàøèíå íå óñòàíîâëåíà áîìáà");
 	}
 	return 1;
 	}
Код:
if (newkeys==KEY_FIRE && curvpldk[playerid]==1 && detonatorB[playerid]==1)
	    {
  ExploseVehicle(curvpld[playerid]);
SendClientMessage(playerid, 0xFFFFFFAA, "* Ìàøèíà âçîðâàíà");
curvpldk[playerid] = 0;
detonatorB[playerid] = 0;
for (new v = 1; v < MAX_VEHICLES; v++) {
new dis = GetDistanceBetweenVehicles(curvpld[playerid],v);
if (dis < 5) {
SetVehicleHealth(v,0);
}
else if (dis > 5 && dis < 10) {
GiveVehicleHealth(v,-650);
}
else if (dis > 10 && dis < 15) {
GiveVehicleHealth(v,-300);
 }
 }
	    }

Вроде бы все=)

Отредактировано 0NEhels (2007-10-19 14:36:02)

0

14

Задумка скрипта прикольная токо вот сам скрипт написан неочень
Кроме того что автор невыложил инклуд к функциям как: ExploseVehicle, GetDistanceBetweenVehicles и т.д.
В самом скрипте нехватает некоторых функций.
Короче вот я исправил чуть чуть.

Код:
forward DetonatorB();

new bombhave[MAX_VEHICLES];
new curvpldk[MAX_PLAYERS];
new curvpld[MAX_PLAYERS];
new detonatorB[MAX_PLAYERS];
new bombd[MAX_VEHICLES];

В public OnPlayerConnect:
curvpldk[playerid] = 0;
detonatorB[playerid] = 0;

В public OnGameModeInit():
SetTimer("DetonatorB",500,1);

public DetonatorB(){
	for (new i = 0; i < MAX_PLAYERS; i++){
	if (GetPlayerAmmo(i)==777){
	detonatorB[i] = 1;
 	}else{
  	detonatorB[i] = 0;
   	}
	}
	return 1;
}

В public OnPlayerCommandText():
if(strcmp(cmd, "/bd", true) == 0) {
    new VID = GetPlayerVehicleID(playerid);
    if (!IsPlayerInAnyVehicle(playerid)){
    SendClientMessage(playerid,COLOR_RED,"* Ты не в машине!");
    return 1;
    }
 	if (bombhave[VID] == 0) {
 	bombd[VID] = 1;
 	curvpldk[playerid] = 1;
 	curvpld[playerid] = VID;
	bombhave[VID] = 1;
	GivePlayerWeapon(playerid,40,777);
	SendClientMessage(playerid, 0xFFFFFFAA, "* Вы активировали бомбу");
 	} else {
 	SendClientMessage(playerid,COLOR_RED,"* На этой машине уже установлена бомба!");
 	} 
 	return 1;
 	}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys){
	if (newkeys==KEY_FIRE && curvpldk[playerid]==1 && detonatorB[playerid]==1){
	ExploseVehicle(curvpld[playerid]);
	SendClientMessage(playerid, 0xFFFFFFAA, "* БабаХХх");
	curvpldk[playerid] = 0;
	detonatorB[playerid] = 0;
	bombhave[curvpld[playerid]] = 0;
	for (new v = 1; v < MAX_VEHICLES; v++) {
	new dis = GetDistanceBetweenVehicles(curvpld[playerid],v);
	if (dis < 5) {
	SetVehicleHealth(v,0);
	}
	else if (dis > 5 && dis < 10) {
	GiveVehicleHealth(v,-650);
	}
	else if (dis > 10 && dis < 15) {
	GiveVehicleHealth(v,-300);
 	}
 	}
	}
}

P.S. 0NEhels выложи инклуд к функциям: ExploseVehicle, GetDistanceBetweenVehicles и т.д.

0

15

Magnus, сообщение отредактировал, молодец, щас сниму 10% =)
а инклуды вообщето здесь Tutorial 1: Moving and Explose Vehicles
Читать туториалы надо!
====================================
а GetDistanceBetweenVehicles вот

Код:
stock GetDistanceBetweenVehicles(v1,v2)
	{
	new Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2;
	new Float:tmpdis;
	GetVehiclePos(v1,x1,y1,z1);
	GetVehiclePos(v2,x2,y2,z2);
	tmpdis = floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));
	return floatround(tmpdis);
	}

====================================
а вообще юзай мой фильтр =)
http://www.sendspace.com/file/ksc9y7
====================================

0

16

Magnus, я и не выкладывал полный код, просто выложил основу! Потому что у меня скрипт раскидан по всему скрипту в 22000 строк(PEN1:LS)!
И то что ты добавил условие которое проверяет в машине ли игрок или нет, то у меня проверяется в другом месте! Так же как и было в скрипте LuxurY - LBE!

И ксати я здел что теперь не нада /bd вводить, а делается все с помошью менюшки! Потом как доделаю таймер и другие функции выложу скрипт!

0


Вы здесь » LuxurY forum (scripting SA-MP) » SA-MP 0.2 » Кнопки действия и все что с ними связанно!