Callback's в модах и скриптах
| |
ZioSHik | Дата: Понедельник, 08.04.2013, 22:39 | Сообщение # 1 |
.::Offline::.
Авторитет
Сообщений: 831
[ 82 ]
Награды: 29
Статус
отсутствует
| Здесь я расскажу про callback’s которые встречаются при создании мода или скрипта. Будут не все, но про большую часть я вам расскажу. Начнем! Основные:
Для скриптов:
Код public OnFilterScriptInit()
Для модов:
Код public OnGameModeInit()
Вызываются при запуске мода или скрипта.
Примеры функций, которые можно использовать:
Код SetGameModeText("Название мода"); // Дать моду название. SetTimer("Имя", 1000, true); // Создать таймер. ShowPlayerMarkers(1); // Показывать иконки игроков на карте (1-включить, 0-выключить). ShowNameTags(1); // Показывать ники (1-включить, 0-выключить). EnableStuntBonusForAll(1); // Деньги за трюки (1-включить, 0-выключить). SetNameTagDrawDistance(40.0); // Дальность видимости ников. AddPlayerClass(id скина,X,Y,Z,Угол поворота,Weapon1,ammo1,Weapon2,ammo2,Weapon3,ammo3); // Добавить скин в меню выбора скинов. AddStaticVehicle(id,X,Y,Z,Угол поворота,цвет1,цвет2); // Добавить авто при включении сервера.
Для скриптов: Код public OnFilterScriptExit()
Для модов:
Код public OnGameModeExit()
Вызываются при выключении мода или скрипта.
Примеры функций, которые можно использовать: Код KillTimer(имя таймера); // Убивает таймер. SendClientMessageToAll(0xFFFF00AA,"Всем пока! Я выключаюсь."); // Сообщение о выключении сервера.
public OnPlayerRequestClass(playerid, classid)
Вызывается, когда игрок выбирает класс (скин).
playerid – ID игрока. classid – ID класса.
Примечание: Класс создается функцией AddPlayerClass.
Пример использования:
Код public OnPlayerRequestClass(playerid,classid) { if(classid == 3 && !IsPlayerAdmin(playerid)) { SendClientMessage(playerid,COLOR_GREEN,"Этот скин только для админов!"); return 0; } return 1; }
Код public OnPlayerConnect(playerid) Вызывается, когда игрок зашел на сервер.
playerid – ID игрока.
Код public OnPlayerDisconnect(playerid, reason) Вызывается, когда игрок выходит с сервера.
playerid – ID игрока. reason – Причина.
ID причин: 0 – Обрыв потока. 1 – Нормальный выход. 2 – Забанен / Кикнут.
Пример использования:
Код public OnPlayerConnect(playerid) { new string[64], pName[MAX_PLAYER_NAME]; GetPlayerName(playerid,pName,MAX_PLAYER_NAME); format(string,sizeof string,"%s зашел на сервер. Добро пожаловать!",pName); SendClientMessageToAll(0xFFFFFFAA,string); return 1; }
Код public OnPlayerDisconnect(playerid, reason) { new string[64], name[MAX_PLAYER_NAME]; GetPlayerName(playerid,name,MAX_PLAYER_NAME); switch(reason) { case 0: format(string,sizeof string,"%s вышел с сервера. (Вылетел с сервера)",name); case 1: format(string,sizeof string,"%s вышел с сервера. (Вышел)",name); case 2: format(string,sizeof string,"%s вышел с сервера. (Кикнут/Забанен)",name); } SendClientMessageToAll(0xFFFFFFAA,string); return 1; }
Код public OnPlayerSpawn(playerid) Вызывается, когда игрок возродился.
playerid – ID игрока.
Код public OnPlayerDeath(playerid, killerid, reason) Вызывается, когда игрок погиб.
playerid – ID игрока который погиб. killerid – ID игрока который совершил убийство. reason – Причина смерти.
Пример использования:
Код public OnPlayerSpawn(playerid) { new PlayerName[MAX_PLAYER_NAME], string[128]; GetPlayerName(playerid, PlayerName, sizeof(PlayerName)); format(string, sizeof(string), "%s возродился.", PlayerName); SendClientMessageToAll(0xFFFFFFFF, string); return 1; }
Код new pScore[MAX_PLAYERS]; new pCash[MAX_PLAYERS]; new pDeaths[MAX_PLAYERS];
public OnPlayerDeath(playerid, killerid, reason) { SendDeathMessage(killerid, playerid, reason); // Показывает убийства в киллстате if(killerid != INVALID_PLAYER_ID) // Если реальный убийца, дать деньги + score { pScore[killerid]++; SetPlayerScore(killerid, pScore[killerid]); pCash[killerid] += 100; GivePlayerMoney(killerid, 100); } // Если killerid это INVALID_PLAYER_ID то игрок убил себя. pDeaths[playerid]++; pCash[playerid] -= 100; pScore[playerid]--; SetPlayerScore(playerid, pScore[playerid]); ResetPlayerMoney(playerid); GivePlayerMoney(playerid, pCash[playerid]); return 1; } Код public OnVehicleSpawn(vehicleid) Вызывается, когда транспортное средство возродилось.
vehicleid – ID транспортного средства.
Код public OnVehicleDeath(vehicleid, killerid) Вызывается, когда транспортное средство взорвалось, утонуло и т.д.
vehicleid – ID транспортного средства. killerid – ID игрока который уничтожил транспортное средство.
Примечание:
Эта авто вызываемая функция, также вызывается когда автомобиль попадет в воду.
Пример использования:
Код public OnVehicleSpawn(vehicleid) { printf("Машина %i возродилась!",vehicleid); return 1; } Код public OnVehicleDeath(vehicleid, killerid) { new string[40]; format(string, sizeof(string), "Машина ID %i была уничтожена игроком ID %i.", vehicleid, killerid); SendClientMessageToAll(0xFFFFFFFF, string); return 1; }
Код public OnPlayerText(playerid, text[])
Вызывается, когда игрок пишет в чат.
playerid – ID игрока. text[] – Отправленный текст.
Код public OnPlayerCommandText(playerid, cmdtext[]) Вызывается, когда игрок пишет команды.
playerid – ID игрока. cmdtext[] – Текст команды.
Пример использования:
Код public OnPlayerText(playerid, text[]) { new textv2[128], name[MAX_PLAYER_NAME]; GetPlayerName(playerid, name, sizeof (name)); format(textv2, sizeof (textv2), "%d >> %s: %s", playerid, name, text); SendPlayerMessageToAll(playerid, textv2); return 0; // Игнорировать стандартный чат } Код public OnPlayerCommandText(playerid, cmdtext[]) { if(!strcmp(cmdtext, "/help", true)) { SendClientMessage(playerid, 0xFFFFFFFF, "SERVER: Это команда /help!"); return 1; /* Возврат '1' использован чтобы дать серверу понять что команда найдена и работает исправно. Если вы не поставите эту строчку, то игроку будет выслано сообщение 'SERVER: Unknown Command.' после выполнения команды. */ } return 0; /* Возврат '0' использован чтобы дать серверу понять что команда не найдена и не работает, и указывает серверу что этой команды нет ни в моде ни в скрипте. */ }
Код public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger) Вызывается, когда игрок садится в транспортное средство.
Код playerid – ID игрока. vehicleid – ID транспортного средства. ispassenger – 0 если сел на место водителя. 1 если сел на место пассажира. Примечание:
Эта функция вызывается, когда игрок начинает садиться в транспортное средство, но не тогда когда сел в него. Чтобы исправить это, используйте OnPlayerStateChange.
Код public OnPlayerExitVehicle(playerid, vehicleid) Вызывается, когда игрок выходит из транспортного средства. playerid – ID игрока. vehicleid – ID транспортного средства.
Примечание:
Не вызывается если игрок падает с велосипеда или удаляется из автомобиля с помощью других средств, таких как SetPlayerPos. Чтобы исправить это, вы должны использовать OnPlayerStateChange и проверять через PLAYER_STATE_DRIVER или PLAYER_STATE_PASSENGER. Пример использования:
Код public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger) { new string[128]; format(string, sizeof(string), "Вы сели в машину ID %i",vehicleid); SendClientMessage(playerid, 0xFFFFFFFF, string); return 1; } Код public OnPlayerExitVehicle(playerid, vehicleid) { new string[35]; format(string, sizeof(string), "INFO: Вы вышли из машины ID %i", vehicleid); SendClientMessage(playerid, 0xFFFFFFFF, string); return 1; }
Код public OnPlayerStateChange(playerid, newstate, oldstate) Вызываются, когда изменяются состояния игрока. playerid – ID игрока. newstate – Новое состояние. oldstate – Старое состояние.
Пример использования:
Код public OnPlayerStateChange(playerid, newstate, oldstate) { if(oldstate == PLAYER_STATE_ONFOOT && newstate == PLAYER_STATE_DRIVER) // Игрок сел в транспортное средство { new vehicleid = GetPlayerVehicleID(playerid); AddVehicleComponent(vehicleid, 1010); // Добавить NOS к машине } return 1; }
Код public OnPlayerEnterCheckpoint(playerid) Вызывается, когда игрок зашел на чекпоинт.
playerid – ID игрока.
Код public OnPlayerLeaveCheckpoint(playerid) Вызывается, когда игрок вышел с чекпоинта. playerid – ID игрока.
Код public OnPlayerEnterRaceCheckpoint(playerid) Вызывается, когда игрок зашел на гоночный чекпоинт. playerid – ID игрока.
Код public OnPlayerLeaveRaceCheckpoint(playerid) Вызывается, когда игрок вышел из гоночного чекпоинта. playerid – ID игрока. Пример использования: Код //Этот пример создает чекпоинт при возрождении игрока, //когда игрок зайдет на чекпоинт, ему дадут транспортное средство. public OnPlayerSpawn(playerid) { SetPlayerCheckpoint(playerid, 1982.6150, -220.6680, -0.2432, 3.0); return 1; } public OnPlayerEnterCheckpoint(playerid) { CreateVehicle(520, 1982.6150, -221.0145, -0.2432, 82.2873, -1, -1, 60000); DisablePlayerCheckpoint(playerid); return 1; } Код public OnPlayerLeaveCheckpoint(playerid) { printf("Игрок ID %i вышел с чекпоинта!",playerid); return 1; }
Код public OnPlayerEnterRaceCheckpoint(playerid) { printf("Игрок ID %d вошел на гоночный чекпоинт!",playerid); return 1; }
Код public OnPlayerLeaveRaceCheckpoint(playerid) { printf("Игрок ID %d покинул гоночный чекпоинт!",playerid); return 1; }
Код public OnRconCommand(cmd[]) Вызывается, когда была введена Rcon команда (Работает в filterscript).
cmd[] – Команда. Пример использования:
Код public OnRconCommand(cmd[]) { printf("[RCON]: Вы ввели '/rcon %s'!",cmd); return 0; }
Код public OnPlayerRequestSpawn(playerid) Вызывается, когда игрок возрождается (нажатие кнопки spawn).
playerid - ID игрока. Пример использования:
Код public OnPlayerRequestSpawn(playerid) { if(!IsPlayerAdmin(playerid)) { SendClientMessage(playerid,COLOR_GREEN,"Вы не можете возродиться."); return 0; } return 1; }
Код public OnObjectMoved(objectid) Вызывается, когда завершилось движение объекта или он передвигается.
objectid – ID объекта.
Код public OnPlayerObjectMoved(playerid, objectid) Вызывается, когда завершилось движение объекта (MovePlayerObject) или он движется. playerid – ID игрока. objected – ID объекта.
Пример использования:
Код public OnObjectMoved(objectid) { printf("Объект %d закончил движение.",objectid); return 1; } Код public OnPlayerObjectMoved(playerid,objectid) { printf("Игрок двигает объект: objectid: %d playerid: %d",objectid,playerid); return 1; } Код public OnPlayerPickUpPickup(playerid, pickupid) Вызывается, когда игрок поднял пикап. playerid – ID игрока. pickupid – ID пикапа. Пример использования:
Код new pickup_Cash; new pickup_Health; public OnGameModeInit() { pickup_Cash = CreatePickup(1274, 2, 0.0, 0.0, 9.0); pickup_Health = CreatePickup(1240, 2, 0.0, 0.0, 9.0); return 1; } public OnPlayerPickUpPickup(playerid, pickupid) { if(pickupid == pickup_Cash) { GivePlayerMoney(playerid, 1000); } else if(pickupid == pickup_Health) { SetPlayerHealth(playerid, 100); } return 1; }
Часть 1.
|
|
| |
ZioSHik | Дата: Понедельник, 08.04.2013, 22:39 | Сообщение # 2 |
.::Offline::.
Авторитет
Сообщений: 831
[ 82 ]
Награды: 29
Статус
отсутствует
| Код public OnVehicleMod(playerid, vehicleid, componentid) Вызывается, когда к транспортному средству добавили компонент.
playerid – ID игрока. vehicleid – ID транспортного средства. componentid – ID компонента который поставили.
Код public OnEnterExitModShop(playerid, enterexit, interiorid) Вызывается, когда игрок выехал из гаража тюнинга. playerid – ID игрока. enterexit – 1 если игрок въехал в гараж, 0 выехал из гаража. interiorid – ID интерьера гаража.
Код public OnVehiclePaintjob(playerid, vehicleid, paintjobid) Вызывается, когда на машину нанесли покрасочные работы. playerid – ID игрока который наносит покрасочные работы. vehicleid – ID транспортного средства который красятся. paintjobid – ID покрасочной работы.
Код public OnVehicleRespray(playerid, vehicleid, color1, color2) Вызывается, когда покрасили автомобиль (только в тюнинге).
playerid - ID игрока. vehicleid – ID автомобиля. color1 – Цвет 1. color2 – Цвет 2.
Код public OnVehicleDamageStatusUpdate(vehicleid, playerid) Вызывается, когда элементы транспортного средства были повреждены (фары, шины, двери, панели).
playerid - ID игрока который нанес повреждение. vehicleid – ID поврежденного автомобиля.
Пример использования:
Код public OnVehicleMod(playerid,vehicleid,componentid) { printf("Машина %d была тюнингована ID %d, componentid %d",vehicleid,playerid,componentid); if(GetPlayerInterior(playerid) == 0) { BanEx(playerid, "Tuning Hacks"); // Анти-тюнинг скрипт } return 1; }
Код public OnVehiclePaintjob(playerid, vehicleid, paintjobid) { new string[128]; format(string, sizeof(string), "Вы изменили на своей машине paintjob на %d!", paintjobid); SendClientMessage(playerid, 0x33AA33AA, string); return 1; } Код public OnVehicleRespray(playerid, vehicleid, color1, color2) { new string[48]; format(string, sizeof(string), "Вы перекрасили машину %d в цвет %d и %d!", vehicleid, color1, color2); SendClientMessage(playerid, COLOR_GREEN, string); return 1; }
Код public OnEnterExitModShop(playerid, enterexit, interiorid) { if(enterexit == 0) // Если 0, то выехал. { SendClientMessage(playerid, COLOR_WHITE, "Классная машина! За использование гаража с вас сняли $100."); GivePlayerMoney(playerid, -100); } return 1; }
Код public OnVehicleDamageStatusUpdate(vehicleid, playerid) { printf("Транспортное средство ID %d было повреждено игроком ID %d.", vehicleid, playerid); return 1; }
Код public OnPlayerSelectedMenuRow(playerid, row) Вызывается, когда игроку открылось меню.
playerid – ID игрока. row – Пункт в меню.
Код public OnPlayerExitedMenu(playerid) Вызывается, когда игрок закрыл меню. playerid – ID игрока.
Пример использования: Код new Menu:myMenu; public OnGameModeInit() { myMenu= CreateMenu("Example Menu", 1, 50.0, 180.0, 200.0, 200.0); AddMenuItem(myMenu, 0, "Item 1"); AddMenuItem(myMenu, 0, "Item 2"); return 1; } public OnPlayerSelectedMenuRow(playerid, row) { if(GetPlayerMenu(playerid) == myMenu) { switch(row) { case 0: print("Item 1"); case 1: print("Item 2"); } } return 1; } Код public OnPlayerExitedMenu(playerid) { TogglePlayerControllable(playerid,1); // Разморозить игрока когда он вышел из меню return 1; }
Код public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid) Вызывается, когда игрок меняет интерьер.
playerid – ID игрока. newinteriorid – ID нового интерьера. oldinteriorid – ID старого интерьера.
Пример использования:
Код public OnPlayerInteriorChange(playerid,newinteriorid,oldinteriorid) { new string[48]; format(string, sizeof(string), "Вы вышли из интерьера %d и вошли в %d!",oldinteriorid,newinteriorid); SendClientMessage(playerid, COLOR_ORANGE, string); return 1; }
Код public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) Вызывается, когда игрок нажимает клавишу.
playerid – ID игрока. newkeys – Нажатая клавиша. oldkeys – Отпущенная клавиша.
Пример использования:
Код // PRESSED(keys) #define PRESSED(%0) \ (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { if (PRESSED(KEY_JUMP)) { new Float:x, Float:y, Float:z; GetPlayerPos(playerid, x, y, z); SetPlayerPos(playerid, x, y, z + 10.0); } return 1; }
Код public OnRconLoginAttempt(ip[], password[], success) Вызывается, когда игрок пытается войти в Rcon админом.
ip[] - Ip адрес игрока. password[] – Введенный пароль. success – Правильный пароль или нет.
Пример использования:
Код public OnRconLoginAttempt(ip[], password[], success) { if(!success) //If the password was incorrect { printf("FAILED RCON LOGIN BY IP %s USING PASSWORD %s",ip, password); new pip[16]; for(new i=0; i<MAX_PLAYERS; i++) //Цикл по всем игрокам { GetPlayerIp(i, pip, sizeof(pip)); if(!strcmp(ip, pip, true)) //Если игрок ввел неправильный пароль { SendClientMessage(i, 0xFFFFFFFF, "Неправильный пароль. Пока!"); //Отправить сообщение Ban(i); //Бан. } } } return 1; } Код public OnPlayerUpdate(playerid) Вызывается, когда игрок в игре. playerid – ID игрока.
Примечание:
Обновляется очень много раз в секунду, используйте его правильно.
Пример использования:
Код public OnPlayerUpdate(playerid) { new iCurWeap = GetPlayerWeapon(playerid); // Возвращает оружие игрока if(iCurWeap != GetPVarInt(playerid, "iCurrentWeapon")) // Если поменял оружие { // Давайте вызовем callback OnPlayerChangeWeapon OnPlayerChangeWeapon(playerid, GetPVarInt(playerid, "iCurrentWeapon"), iCurWeap); SetPVarInt(playerid, "iCurrentWeapon", iCurWeap);// Обновляем переменную оружия } return 1; // Отправляем обновление. } stock OnPlayerChangeWeapon(playerid, oldweapon, newweapon) { new s[128], oWeapon[24], nWeapon[24]; GetWeaponName(oldweapon, oWeapon, sizeof(oWeapon)); GetWeaponName(newweapon, nWeapon, sizeof(nWeapon)); format(s, sizeof(s), "Вы сменили оружие с %s на %s!", oWeapon, nWeapon); SendClientMessage(playerid, 0xFFFFFFFF, s); }
Код public OnPlayerStreamIn(playerid, forplayerid) Вызывается, когда игрок начинает синхронизироваться с другим игроком.
playerid – ID игрока. forplayerid – ID игрока с которым синхронизируется.
Код public OnPlayerStreamOut(playerid, forplayerid) Вызывается, когда выходит из синхронизации с другим игроком.
playerid – ID игрока. forplayerid – ID игрока с которым был синхронизирован.
Код public OnVehicleStreamIn(vehicleid, forplayerid) Вызывается, когда транспортное средство синхронизируется с игроком.
vehicleid – ID транспортного средства. forplayerid – ID игрока с которым синхронизировано транспортное средство.
Код public OnVehicleStreamOut(vehicleid, forplayerid) Вызывается, когда транспортное средство выходит из синхронизации с игроком.
vehicleid - ID транспортного средства. forplayerid - ID игрока с которым было синхронизировано транспортное средство.
Пример использования:
Код public OnPlayerStreamIn(playerid, forplayerid) { new string[40]; format(string, sizeof(string), "Игрок %d в твоем потоке.", playerid); SendClientMessage(forplayerid, 0xFFFFFFFF, string); return 1; }
Код public OnPlayerStreamOut(playerid, forplayerid) { new string[80]; format(string, sizeof(string), "Вы расинхронизированы с игроком ID %d", playerid); SendClientMessage(forplayerid, 0xFF0000FF, string); return 1; }
Код public OnVehicleStreamIn(vehicleid, forplayerid) { new string[32]; format(string, sizeof(string), "Сейчас вы можете видеть автомобиль %d.", vehicleid); SendClientMessage(forplayerid, 0xFFFFFFFF, string); return 1; }
Код public OnVehicleStreamOut(vehicleid, forplayerid) { new string[48]; format(string, sizeof(string), "Ваш клиент выгрузил автомобиль %d ил вашего потока", vehicleid); SendClientMessage(forplayerid, 0xFFFFFFFF, string); return 1; }
Код public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) Вызывается, когда игрок в диалоговом окне.
playerid – ID игрока. dialogid – ID диалога. response – Возвращает при нажатии 1 кнопки единицу (1). При нажатии 2 кнопки ноль (0). listitem – ID выбранного пункта в списке (начинается с 0). inputtext[] – Текст из выбранного пункта меню или введенный текст.
Пример использования:
Код #define DIALOG_WEAPONS 3 // В команду ShowPlayerDialog(playerid, DIALOG_WEAPONS, DIALOG_STYLE_LIST, "Оружие", "Desert Eagle\nAK-47\nCombat Shotgun", "Select", "Close"); public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(dialogid == DIALOG_WEAPONS) { if(response) // Если нажали на Select или двойным щелчком выбрали оружие { // Выдаем оружие if(listitem == 0) // Если выбрали - Desert Eagle { GivePlayerWeapon(playerid, WEAPON_DEAGLE, 14); // выдаем desert eagle } if(listitem == 1) // Если выбрали - AK-47 { GivePlayerWeapon(playerid, WEAPON_AK47, 120); // выдаем AK-47 } if(listitem == 2) // Если выбрали - Desert Eagle { GivePlayerWeapon(playerid, WEAPON_SHOTGSPA, 28); // выдаем Combat Shotgun } } return 1; // Вернуть 1. Также как в OnPlayerCommandText. } return 0; // Должны вернуть return 0! Также как в OnPlayerCommandText. }
Код public OnPlayerClickPlayer(playerid, clickedplayerid, source) Вызывается, когда игрок кликает на ник игрока в окне Tab.
playerid – ID игрока. clickedplayerid – ID игрока по которому кликнули. source – Тип нажатия (Существует на данный момент всего один (0 - CLICK_SOURCE_SCOREBOARD). Пример использования:
Код public OnPlayerClickPlayer(playerid, clickedplayerid, source) { new message[32]; format(message, sizeof(message), "Вы кликнули на %d", clickedplayerid); SendClientMessage(playerid, 0xFFFFFFFF, message); return 1; } Часть 2.
Специально для www.SAMP-TEAM.com. Автор: ZioHik. Примеры взяты из wiki.sa-mp.com.
|
|
| |
|