Перейти к публикации

Welcome to Call of Duty Black Ops , Call of Duty: Modern Warfare 3, COD2, COD4, COD4, MW2, Call of Duty War, CallofDuty Black Ops - В России!





Скриптинг проблема(


  • Вы не можете создать новую тему
  • Please log in to reply
62 replies to this topic

#1 Antisn1per_95

Antisn1per_95

    Рядовой

  • Рядовые
  • 38 Сообщений:

Отправлено 11 December 2010 - 19:45

Народ! собрался сделать мод, но столкнулся с проблемой:
я хотел сделать мапу и сделать так чтобы если входишь на ринг тебе давалось Default Weapon (условно говоря)))). но скрипт не работает! в чем причина?

З.Ы. триггер на мапе присутствует!)

#2 Slinger

Slinger

    технический спецЫалист

  • Staff
  • PipPipPipPipPipPipPipPip
  • 3131 Сообщений:
  • Пол:Мужской
  • Location:Moscow, Russia

Отправлено 11 December 2010 - 20:50

Мы к сожалению телепатически не сможем определить, почему твой скрипт, который по идее должен состоять из одной строчки, не работает. Для этого нам нужен сам скрипт
Размещенное изображение

#3 Antisn1per_95

Antisn1per_95

    Рядовой

  • Рядовые
  • 38 Сообщений:

Отправлено 12 December 2010 - 13:22

А можно тогда плиз написать что там должно быть?) может дело все-таки в мапе...

#4 Slinger

Slinger

    технический спецЫалист

  • Staff
  • PipPipPipPipPipPipPipPip
  • 3131 Сообщений:
  • Пол:Мужской
  • Location:Moscow, Russia

Отправлено 12 December 2010 - 15:46

Не помню функцию на выдачу оружия, можно в исходниках мода какого нить посмотреть

А вообще воткнуть trigger_multiple (или одноразазовый триггер trigger_once) с параметром "targetname" и value "имя_thread_потока"

Ну и потом где нить, где угодно, вызываешь этот самый поток через thread "имя_потока"

А скрипт скорее всего а-ля "self.GiveWeapon" с какими-нить аргументами. НУ и собсна всё
Размещенное изображение

#5 Antisn1per_95

Antisn1per_95

    Рядовой

  • Рядовые
  • 38 Сообщений:

Отправлено 12 December 2010 - 16:13

спасибо... а ты не знаешь где можно взять нормальный mahack?)))

вот ссылка: )

#6 Slinger

Slinger

    технический спецЫалист

  • Staff
  • PipPipPipPipPipPipPipPip
  • 3131 Сообщений:
  • Пол:Мужской
  • Location:Moscow, Russia

Отправлено 12 December 2010 - 16:46

не в курсе кто такой mahack
Размещенное изображение

#7 Antisn1per_95

Antisn1per_95

    Рядовой

  • Рядовые
  • 38 Сообщений:

Отправлено 12 December 2010 - 18:34

main()
{
maps\mp\_load::main();

game["allies"] = "american";
game["axis"] = "german";

game["british_soldiertype"] = "normandy";
game["british_soldiervariation"] = "normandy";
game["german_soldiertype"] = "wehrmacht";
game["german_soldiervariation"] = "normandy";

game["attackers"] = "allies";
game["defenders"] = "axis";

thread pap();
maps\mp\mp_pap::main();
}

pap();
{
trig=getent("trig_multiple","targetname");
}


Пишет ошибку: bad syntax
Что тут не то?о_О

#8 sERGE-002

sERGE-002

    Подполковник

  • Офицеры
  • PipPipPipPipPip
  • 895 Сообщений:
  • Пол:Мужской

Отправлено 13 December 2010 - 00:28

Обращай внимание на какой строке выдает ошибку :)
Вообще в описании функции pap() не нужна ";" после скобок.
Размещенное изображение
cod.proc.ru

#9 Antisn1per_95

Antisn1per_95

    Рядовой

  • Рядовые
  • 38 Сообщений:

Отправлено 13 December 2010 - 15:09

Обращай внимание на какой строке выдает ошибку :)
Вообще в описании функции pap() не нужна ";" после скобок.


Во-первых, в других модах везде стоит ; после скобок. Во-вторых, он не пишет даже в каком файле ошибка, не то что строку....

Народ, раскрою замысел: я хочу сделать в CoD2 Pack-a-Punch machine из CoD WaW.... у меня тут 2 скрипта:

1. непосредственно скрипт для мапы:

main()
{
maps\mp\_load::main();

game["allies"] = "american";
game["axis"] = "german";

game["british_soldiertype"] = "normandy";
game["british_soldiervariation"] = "normandy";
game["german_soldiertype"] = "wehrmacht";
game["german_soldiervariation"] = "normandy";

game["attackers"] = "allies";
game["defenders"] = "axis";

thread pap();
maps\mp\mp_pap::main();
}

pap();
{
trig=getent("trig_multiple","targetname");
}


2. сам скрипт для "машины": (называется mp_pap.gsc)

main()
{
thread wn();
tread pap_act();
}

pap_act()
{

if(self.pers["team"] == "allies")

{
user iprintlnbold ("^1Wait a sec... Upgrading...");
wait (1);
self.giveWeapon(wn + "_n_mp");
self.giveMaxAmmo(wn + "_n_mp");
user iprintlnbold ("^1Here you are, warrior!");
}

else

{
user iprintlnbold ("^1You can't upgrade your weapon!/n You are not a hunter!");
}

}

wn()
{
level.wn = ::wnw(self.pers["weapon"]);
}

wmw()
{
case "m1carbine_mp":
wn = &"m1carbine";
break;
case "m1garand_mp":
wn = &"m1garand";
break;
case "thompson_mp":
wn = &"thompson";
break;
case "bar_mp":
wn = &"bar";
break;
case "springfield_mp":
wn = &"springfield";
break;
case "greasegun_mp":
wn = &"greasegun";
break;
case "shotgun_mp":
wn = &"shotgun";
break;
case "bren_mp":
wn = &"bren";
break;
case "sten_mp":
wn = &"sten";
break;
case "enfield_mp":
wn = &"enfield";
break;
case "svt40_mp":
wn = &"svt40";
break;
case "mosin_mp":
wn = &"mosin";
break;
case "ppsh_mp":
wn = &"ppsh";
break;
case "pps42_mp":
wn = &"pps42";
break;
case "kar98k_mp":
wn = &"kar98k";
break;
case "g43_mp":
wn = &"g43";
break;
case "mp40_mp":
wn = &"mp40";
break;
case "mp44_mp":
wn = &"mp44";
break;
case "colt_mp":
wn = &"colt";
break;
case "luger_mp":
wn = &"luger";
break;
case "webley_mp":
wn = &"webley";
break;
case "tt30_mp":
wn = &"tt30";
break;
default:
wn = &"defaultweapon";
break;
}


я хз может допустил нубскую ошибку какую...

#10 sERGE-002

sERGE-002

    Подполковник

  • Офицеры
  • PipPipPipPipPip
  • 895 Сообщений:
  • Пол:Мужской

Отправлено 14 December 2010 - 00:36

Во-первых, в других модах везде стоит ; после скобок.

Значит это кривые, неработающие моды. Либо (что наиболее вероятно) ты криво скопировал.

Во-вторых, он не пишет даже в каком файле ошибка, не то что строку....

Для этого надо в строке запуска (или в конфиге) прописать: +set developer 1 +set developer_script 1

1. непосредственно скрипт для мапы:

main()
{
	maps\mp\_load::main();

	game["allies"] = "american";
	game["axis"] = "german";

	game["british_soldiertype"] = "normandy";
	game["british_soldiervariation"] = "normandy";
	game["german_soldiertype"] = "wehrmacht";
	game["german_soldiervariation"] = "normandy";

	game["attackers"] = "allies";
	game["defenders"] = "axis";

	thread pap();
	maps\mp\mp_pap::main();
}

pap(); 
";" не нужна!

{
	trig=getent("trig_multiple","targetname");
}


2. сам скрипт для "машины": (называется mp_pap.gsc)

main()
{
	thread wn();
	tread pap_act();
}
Ошибка в слове thread (tread pap_act)


pap_act()
{

	if(self.pers["team"] == "allies")

		{
		user iprintlnbold ("^1Wait a sec... Upgrading...");
		wait (1);
		self.giveWeapon(wn + "_n_mp");
		self.giveMaxAmmo(wn + "_n_mp");
переменная wn не определена! и она локальная для функции pap_act()
giveWeapon и giveMaxAmmo - это функции, поэтому надо писать без точки:
self giveWeapon(...);
self giveMaxAmmo(...);

Переменная user не определена.

Т.к. ты вызываешь pap_act вот так:
tread pap_act();
это равнозначно:
level tread pap_act();
а значит, внутри функции self = level. Поэтому pers["team"] ты попросту не определишь.

		user iprintlnbold ("^1Here you are, warrior!");
		}

	else

		{
		user iprintlnbold ("^1You can't upgrade your weapon!/n You are not a hunter!");
		}
	
}

wn()
{
	level.wn = ::wnw(self.pers["weapon"]);
}

зачем переменная level.wn? она не используется.
функцию wnw надо вызывать так:
level.wn = wnw(self.pers["weapon"]);

где описание ф-ции wnw?


wmw()
{
	case "m1carbine_mp":
		wn = &"m1carbine";
		break;
	// ............................
	default:
		wn = &"defaultweapon";
		break;
}

оператор case должен идти в связке со switch:

switch(<переменная>)
{
case <вариант 1>: <действие 1>; break
case <вариант 2>: <действие 2>; break
}

В функцию wmw, наверное, должен передаваться параметр, который уже и сравнивается в case?
Переменная wn опять локальна для ф-ции wmw. Вне функции она не выйдет.


я хз может допустил нубскую ошибку какую...

Да уж... и не одну :)
Ты лучше напиши что ты хочешь сделать (только подробно) - помогу со скриптом.
А иначе, чувствую, слишком долго можно разбирать твои ошибки :)
Размещенное изображение
cod.proc.ru

#11 Antisn1per_95

Antisn1per_95

    Рядовой

  • Рядовые
  • 38 Сообщений:

Отправлено 14 December 2010 - 14:25

Ну да, я в моддинге еще нубок))) идея такова: на мапе есть триггер (trigger_multiple); подходишь к триггеру и появляется рука и надпись: Нажмите F для прокачки оружия. нажимаешь F и тебе выдается новый ствол: если у тебя был М1 Гаранд - выдается прокаченный М1 Гаранд, перезаряжаемый и с оптикой))) само оружие готово, файлы готовы все кроме скриптов, причем названия оружия таковы, что если у тебя был М1 Гаранд, тебе выдается изначально m1garand_mp и после прокачки выдается m1garand_n_mp, если был springfield_mp то тебе выдается при прокачке springfield_n_mp и так далее...

#12 Antisn1per_95

Antisn1per_95

    Рядовой

  • Рядовые
  • 38 Сообщений:

Отправлено 18 December 2010 - 21:31

хд кароче поиграйте в CoD5 на мапе der Riese и поймете о чем я говорю))))

А как задать с помощью switch переменную wn? а то у меня пишет bad syntax(

#13 sERGE-002

sERGE-002

    Подполковник

  • Офицеры
  • PipPipPipPipPip
  • 895 Сообщений:
  • Пол:Мужской

Отправлено 19 December 2010 - 01:11

Написал я скрипт. Еще раз сорри за задержку - не было времени...
Алгоритм такой: оружие могут апгрейдить только союзники при активации триггера. Апгрейдится либо текущее оружие, либо оружие из другого слота. Приоритет отдается текущему оружию. Т.е. если текущее оружие не проапгрейдено, то будет апгрейдится оно, иначе будет апгрейдится вторичное оружие.
Апгрейд возможен не чаще 1 раза в 3 сек (можно изменить/убрать).

Да, и еще - я не маппер, поэтому не в курсе как надо искать этот триггер. По идее, у trigger_multiple должен быть target с именем - вот его и надо искать. Мапперы тебе лучше скажут. Когда разберешься в этом вопросе, подставь имя триггера в скрипт.

Собс-но, сам скрипт (_pap.gsc):

main()
{
	level thread pap_waittrigger();
}

pap_waittrigger()
{
	// поток ожидания срабатывания триггера
	
	trig = getent("<trigger_name>", "targetname"); // получаем триггер (необходимо прописать имя!!!)

	while(1)
	{
		trig waittill("trigger", user); // ждем пока кто-нибудь активирует триггер
		if(user.pers["team"] != "spectator") // запрещаем спекам баловаться 
		{
			user thread pap_userprocess(); // для каждого игрока, активировавшего триггер запускаем поток
		}
	}
}

pap_userprocess()
{
	// поток апгрейда оружия

	// предотвращаем многократное срабатывание потока от шаловливых ручек
	self notify("pap_stop_spam");
	self endon("pap_stop_spam");
	
	self endon("disconnect"); // убиваем поток при дисконнекте игрока...
	self endon("killed_player"); // ...и при его смерти
	
	if(self.pers["team"] != "allies") // апгрейд доступен только для союзников
	{
		self iprintlnbold("^1You can't upgrade your weapon!\n You are not a hunter!");
		return;
	}
	
	slot = "primary";
	current = self getcurrentweapon(); // получаем текущее оружие
	weapon = self getweaponslotweapon(slot); // получаем первичное оружие
	
	if(pap_isStockWeapon(current)) // проверяем является ли текущее оружие стоковым (непроапгрейденым)
	{
		// определяем в каком слоте находится текущее оружие
		if(weapon != current) 
		{
			slot = "primaryb";
			weapon = current;
		}
	}
	else
	{
		// если текущее оружие не стоковое, проверяем другой слот на "стоковость"
		if(!pap_isStockWeapon(weapon))
		{
			slot = "primaryb";
			weapon = self getweaponslotweapon(slot);
			if(!pap_isStockWeapon(weapon))
			{
				// во всех слотах оружие либо проапгрейдено, либо не может быть проапгрейдено
				self iprintlnbold("^1Nothing to upgrade!");
				return;
			}
		}
	}
	
	// не разрешаем апгрейдить чаще раза в 3 сек.
	if(isDefined(self.pap_lasttime) && (gettime() - self.pap_lasttime < 3000))
	{
		self iprintlnbold("^1You can't upgrade weapon so often!");
		return;
	}
	
	// формируем имя нового оружия
	newweap = getsubstr(weapon, 0, weapon.size-3);
	newweap += "_n_mp";
	
	// имитируем работу мысли <img src='http://www.callofduty.ru/forum/public/style_emoticons/<#EMO_DIR#>/smile.gif' class='bbc_emoticon' alt=':)' />
	self iprintlnbold ("^2Wait a sec... Upgrading...");
	wait(1);
	
	self takeWeapon(weapon); // отбираем старое оружие
	self setWeaponSlotWeapon(slot, newweap); // даем новое в нужный слот
	self giveMaxAmmo(newweap); // даем максимум пулек
	
	self iprintlnbold ("^3Here you are, warrior!");
	
	self.pap_lasttime = gettime(); // запоминаем время последнего апгрейда
}

pap_isStockWeapon(weapon)
{
	// проверка оружия на "стоковость" - дефолтное оружие или нет
	// проще говоря - тут прописано оружие, которое можно апгрейдить
	switch(weapon)
	{
		case "m1carbine_mp":
		case "m1garand_mp":
		case "thompson_mp":
		case "bar_mp":
		case "springfield_mp":
		case "greasegun_mp":
		case "shotgun_mp":
		case "bren_mp":
		case "sten_mp":
		case "enfield_mp":
		case "svt40_mp":
		case "mosin_mp":
		case "ppsh_mp":
		case "pps42_mp":
		case "kar98k_mp":
		case "g43_mp":
		case "mp40_mp":
		case "mp44_mp":
		case "colt_mp":
		case "luger_mp":
		case "webley_mp":
		case "tt30_mp":
			return true;
		
		default:
			return false;
	}
}

Из скрипта карты вызывай: level thread .../_pap::main();
Да, и не забудь сделать прекэш всего своего нового оружия (в скрипте карты, в начале)!

precacheItem("m1carbine_n_mp");
precacheItem("m1garand_n_mp");

и т.д.
Размещенное изображение
cod.proc.ru

#14 Antisn1per_95

Antisn1per_95

    Рядовой

  • Рядовые
  • 38 Сообщений:

Отправлено 19 December 2010 - 14:19

проблемка: пишет script runtime error (по-моему, ты не ввел переменную user)

#15 sERGE-002

sERGE-002

    Подполковник

  • Офицеры
  • PipPipPipPipPip
  • 895 Сообщений:
  • Пол:Мужской

Отправлено 19 December 2010 - 22:13

Вообще-то я проверяю свои скрипты на работоспособность.
И я же показывал тебе как получить номер строки с ошибкой. Так что потрудись нормальный баг репорт написать :)
Размещенное изображение
cod.proc.ru

#16 Antisn1per_95

Antisn1per_95

    Рядовой

  • Рядовые
  • 38 Сообщений:

Отправлено 21 December 2010 - 18:12

мы с другом-маппером измучились, пытаясь как-нибудь запустить мод... безрезультатно...


Пишет:
*** script runtime error ****
undefined is not an object: (file 'maps/mp/gametypes/_pap.gsc', line 14)
trig waittill("trigger", user); //ждем пока трааллалал
*
called from:
(file ......)

а ВСЕ параметры триггера на мапе мы уже перебрали - не выходит(

#17 sERGE-002

sERGE-002

    Подполковник

  • Офицеры
  • PipPipPipPipPip
  • 895 Сообщений:
  • Пол:Мужской

Отправлено 21 December 2010 - 21:24

Пишет:
*** script runtime error ****
undefined is not an object: (file 'maps/mp/gametypes/_pap.gsc', line 14)
trig waittill("trigger", user); //ждем пока трааллалал
*

Ну вот, другое дело. Это значит, что триггер не найден на карте (в строке trig = getent(...))
Покажи как ты его получаешь.

а ВСЕ параметры триггера на мапе мы уже перебрали - не выходит(

Я тестил на дверях :) на карте mp_commando1_1.
Правда там используется триггер trigger_use_touch. И вот как они его в скриптах получают:

trig = getent("co_porte3","targetname");

И вот что на карте:
{
"classname" "trigger_use_touch"
"targetname" "co_porte3"
"origin" "-2639 -2983 448"
"model" "*76"
}

Размещенное изображение
cod.proc.ru

#18 Slinger

Slinger

    технический спецЫалист

  • Staff
  • PipPipPipPipPipPipPipPip
  • 3131 Сообщений:
  • Пол:Мужской
  • Location:Moscow, Russia

Отправлено 21 December 2010 - 22:17

Я вроде же написал что в триггер писать.

Создать в данном случае (чтобы тыркать можно было) триггер trigger_use (или use_touch)

В поле "key" вбить "targetname", а в "value" соответственно запускаемый нами поток. В нашем случае "pap_waittrigger"

Не забудь потом для красоты hintstring какой нить добавить (почитай хелп к триггеру, который в том же окне высвечивается (окно "Entity")
Размещенное изображение

#19 Antisn1per_95

Antisn1per_95

    Рядовой

  • Рядовые
  • 38 Сообщений:

Отправлено 25 December 2010 - 12:15

Нифига не идет(((
на карте есть триггер, параметры его:
тип - trigger_use_touch
Key: trigger_use_touch
Value: trigger_use_touch

В скрипте прописано:

trig = getent("trigger_use_touch","targetname");
trig waittill("trigger_use_touch",user);

Что мне подкорректировать?

#20 Slinger

Slinger

    технический спецЫалист

  • Staff
  • PipPipPipPipPipPipPipPip
  • 3131 Сообщений:
  • Пол:Мужской
  • Location:Moscow, Russia

Отправлено 25 December 2010 - 14:38

перечитай мой пост ещё раз
Размещенное изображение




0 посетителей читают эту тему

0 пользователей, 0 гостей, 0 анонимных пользователей