shape1
shape2
shape3
shape4
shape7
shape8

Создание мода с нуля - урок №1


Статус
Закрыто для дальнейших ответов.

danilasar

Пошел ко мне? Да ты умняшка! Пиши в ЛС!
Пользователь
12.05.2016
200
80
0
24
Доброго времени суток! В серии уроков "Создание мода с нуля" я расскажу вам о том, как создать мод с нуля.

Для начала нужно создать проект:

  1. Открыть PAWNO
  2. ctrl+n или нажать на 
    newPr.png
    .
Мы увидим следующий код:

// This is a comment
// uncomment the line below if you want to write a filterscript
//#define FILTERSCRIPT

#include <a_samp>

#if defined FILTERSCRIPT

public OnFilterScriptInit()
{
print("\n--------------------------------------");
print(" Blank Filterscript by your name here");
print("--------------------------------------\n");
return 1;
}

public OnFilterScriptExit()
{
return 1;
}

#else

main()
{
print("\n----------------------------------");
print(" Blank Gamemode by your name here");
print("----------------------------------\n");
}

#endif

public OnGameModeInit()
{
// Don't use these lines if it's a filterscript
SetGameModeText("Blank Script");
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
return 1;
}

public OnGameModeExit()
{
return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
return 1;
}

public OnPlayerConnect(playerid)
{
return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
return 1;
}

public OnPlayerSpawn(playerid)
{
return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
return 1;
}

public OnVehicleSpawn(vehicleid)
{
return 1;
}

public OnVehicleDeath(vehicleid, killerid)
{
return 1;
}

public OnPlayerText(playerid, text[])
{
return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/mycommand", cmdtext, true, 10) == 0)
{
// Do something here
return 1;
}
return 0;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
return 1;
}

public OnPlayerExitVehicle(playerid, vehicleid)
{
return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
return 1;
}

public OnPlayerEnterCheckpoint(playerid)
{
return 1;
}

public OnPlayerLeaveCheckpoint(playerid)
{
return 1;
}

public OnPlayerEnterRaceCheckpoint(playerid)
{
return 1;
}

public OnPlayerLeaveRaceCheckpoint(playerid)
{
return 1;
}

public OnRconCommand(cmd[])
{
return 1;
}

public OnPlayerRequestSpawn(playerid)
{
return 1;
}

public OnObjectMoved(objectid)
{
return 1;
}

public OnPlayerObjectMoved(playerid, objectid)
{
return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
return 1;
}

public OnVehicleMod(playerid, vehicleid, componentid)
{
return 1;
}

public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
return 1;
}

public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
return 1;
}

public OnPlayerSelectedMenuRow(playerid, row)
{
return 1;
}

public OnPlayerExitedMenu(playerid)
{
return 1;
}

public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
return 1;
}

public OnRconLoginAttempt(ip[], password[], success)
{
return 1;
}

public OnPlayerUpdate(playerid)
{
return 1;
}

public OnPlayerStreamIn(playerid, forplayerid)
{
return 1;
}

public OnPlayerStreamOut(playerid, forplayerid)
{
return 1;
}

public OnVehicleStreamIn(vehicleid, forplayerid)
{
return 1;
}

public OnVehicleStreamOut(vehicleid, forplayerid)
{
return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
return 1;
}

public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
return 1;
}

Здесь удаляем строки:

// This is a comment
// uncomment the line below if you want to write a filterscript
//#define FILTERSCRIPT


Код:
#if defined FILTERSCRIPT

public OnFilterScriptInit()
{
	print("\n--------------------------------------");
	print(" Blank Filterscript by your name here");
	print("--------------------------------------\n");
	return 1;
}

public OnFilterScriptExit()
{
	return 1;
}

#else

main()
{
	print("\n----------------------------------");
	print(" Blank Gamemode by your name here");
	print("----------------------------------\n");
}

#endif
Код:
// Don't use these lines if it's a filterscript 
У нас должен получиться такой код:

#include <a_samp>

public OnGameModeInit()
{
SetGameModeText("Blank Script");
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
return 1;
}

public OnGameModeExit()
{
return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
return 1;
}

public OnPlayerConnect(playerid)
{
return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
return 1;
}

public OnPlayerSpawn(playerid)
{
return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
return 1;
}

public OnVehicleSpawn(vehicleid)
{
return 1;
}

public OnVehicleDeath(vehicleid, killerid)
{
return 1;
}

public OnPlayerText(playerid, text[])
{
return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/mycommand", cmdtext, true, 10) == 0)
{
// Do something here
return 1;
}
return 0;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
return 1;
}

public OnPlayerExitVehicle(playerid, vehicleid)
{
return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
return 1;
}

public OnPlayerEnterCheckpoint(playerid)
{
return 1;
}

public OnPlayerLeaveCheckpoint(playerid)
{
return 1;
}

public OnPlayerEnterRaceCheckpoint(playerid)
{
return 1;
}

public OnPlayerLeaveRaceCheckpoint(playerid)
{
return 1;
}

public OnRconCommand(cmd[])
{
return 1;
}

public OnPlayerRequestSpawn(playerid)
{
return 1;
}

public OnObjectMoved(objectid)
{
return 1;
}

public OnPlayerObjectMoved(playerid, objectid)
{
return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
return 1;
}

public OnVehicleMod(playerid, vehicleid, componentid)
{
return 1;
}

public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
return 1;
}

public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
return 1;
}

public OnPlayerSelectedMenuRow(playerid, row)
{
return 1;
}

public OnPlayerExitedMenu(playerid)
{
return 1;
}

public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
return 1;
}

public OnRconLoginAttempt(ip[], password[], success)
{
return 1;
}

public OnPlayerUpdate(playerid)
{
return 1;
}

public OnPlayerStreamIn(playerid, forplayerid)
{
return 1;
}

public OnPlayerStreamOut(playerid, forplayerid)
{
return 1;
}

public OnVehicleStreamIn(vehicleid, forplayerid)
{
return 1;
}

public OnVehicleStreamOut(vehicleid, forplayerid)
{
return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
return 1;
}

public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
return 1;

Теперь укажем название мода и скины пользователям. Для этого мы пойдём в сердце мода - public OnGameModeInit

SetGameModeText("Blank Script");

Blank Script - название мода. Укажите свой.

AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0,0, 0,0, 0,0);

0 - скин на спавне.

1958.3783, 1343.1572, 15.3746 - координаты спавна.

269.1425 - поворот

0,0, 0,0, 0,0 - оружие (оружие,патроны, оружие,патроны, оружие,патроны).

Не всегда мы используем один скин. Для того, чтобы их было несколько, создадим переменную:

new SkinsOnSpawn[] = {// скины через запятую
}; 
Теперь подключим скины к AddPlayerClass:

for (new i = 0; i < sizeof(SkinsOnSpawn); ++i) {
AddPlayerClass(SkinsOnSpawn, 1958.3783,1343.1572,15.3746,269.1425, 0,0, 0,0, 0,0);
}

Если Вы хотите, чтобы скин устанавливался по выбору пола, нужно сделать так:

В public OnPlayerConnect:

ShowPlayerDialog(playerid,1,DIALOG_STYLE_LIST,"Сервер","Мужик\nДевка","OK","");

В public OnDialogResponse:

if(dialogid == 1) {
if(response) {
if(listitem == 0) {
SetPlayerSkin(playerid, 7);
}
if(listitem == 1) {
                                SetPlayerSkin(playerid, 13);
}
}
}

Если вы выбрали второй вариант  выбора скина игрока, поместите в public OnPlayerSpawn:

SetPlayerPos(playerid,X,Y,Z); // X,Y,Z - координаты спавна игроков 
Итог работы:

  • Мы создали наш будущий мод
  • Установили его название
  • Создали спавн игроков
  • Сделали скины для игроков 
На сегодня всё.

Во втором уроке ждите:

  • Регистрация
  • Вход
  • Админы
  • Меню сервера

Автор: danilasar

 
Последнее редактирование модератором:

andrei58russ

Освоившийся
Пользователь
19.04.2016
594
1
31
0
32
@danilasar, Варнинг

C:\Users\Андрей\Desktop\EX 0.0.2 MYSCYL\gamemodes\new.pwn(10) : warning 224: indeterminate array size in "sizeof" expression (symbol "") 
код

Код:
	for (new i = 0; i < sizeof(SkinsOnSpawn); ++i){ 
 

danilasar

Пошел ко мне? Да ты умняшка! Пиши в ЛС!
Пользователь
12.05.2016
200
80
0
24
@andrei58russ, у меня тоже такая фигна лезла, но потом отстала. Не знаю, что это.

 

TheSeLToN

Участник
Пользователь
21.09.2014
452
125
0
Эхх... Дорогие наши "супер-скриптёры", обращаюсь к Вам.

Я чувствую Вас ошибка:

Script[gamemodes/newmode.amx]: Run time error 20: "Invalid index parameter (bad entry point)"

Совсем не волнует?

То есть, мы дали моду загрузить игровой режим, и тут же не даём загрузит точку входа.

Из этого всего следует, не удаляйте никогда main.

 

alexaaa

Новичок
Пользователь
23.10.2016
0
0
0
помоги решить такой warning C:\Users\abc\Desktop\ìîä ñ íóëÿ\gamemodes\ðåãèòðàöèÿ.pwn(10) : warning 224: indeterminate array size in "sizeof" expression (symbol "")

Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase
 
 
1 Warning.
 
C

compan

Гость
Гость
Автор не активен, тему закрываю.

 
Статус
Закрыто для дальнейших ответов.