Перейти к содержанию
Авторизация  
Dmitriy Toporov

Передача оружия другому игроку

Рекомендуемые сообщения

Dmitriy Toporov

Приветствую.Данный код подойдёт совершенно для любого мода, если конечно правильно его вставить

 

Ко всем new добавить:

new bool:Offer[MAX_PLAYERS] = false;

В public OnPlayerCommandText(playerid, cmdtext[])

if(strcmp(cmd, "/givemygun", true) == 0)
{
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp)) return SendClientMessage(playerid,-1,"ИНФО: /givemygun [ID]");
    new ID = strval(tmp);
    if(ID == playerid) return SendClientMessage(playerid,-1,"Вы не можете передать оружие самому себе!");
    if(!IsPlayerConnected(ID)) return SendClientMessage(playerid,-1,"Игрок оффлайн!");
    if(GetPlayerWeapon(playerid) == 0) return SendClientMessage(playerid,-1,"У вас нет оружия в руках!");
    new Float:pos[3];
    GetPlayerPos(ID, pos[0], pos[1], pos[2]);
    if(!IsPlayerInRangeOfPoint(playerid, 1.2, pos[0], pos[1], pos[2])) return SendClientMessage(playerid,-1,"Вы далеко от этого игрока!");
    new nickplayer1[MAX_PLAYER_NAME], nickplayer2[MAX_PLAYER_NAME], sg[90];
    GetPlayerName(playerid, nickplayer1, sizeof(nickplayer1));
    GetPlayerName(ID, nickplayer2, sizeof(nickplayer2));
    SetPVarInt(ID, "Gun", GetPlayerWeapon(playerid));
    SetPVarInt(ID, "Ammo", GetPlayerAmmo(playerid));
    SetPVarInt(ID, "IDplayer", playerid);
    SetPVarString(ID, "Nick1", nickplayer1);
    SetPVarString(ID, "Nick2", nickplayer2);
    format(sg, 70, "Вы предложили %s оружие которое у вас в руках.", nickplayer2);
    SendClientMessage(playerid, -1, sg);
    format(sg, 90, "%s предлагает вам оружие. Клавиша: Y - согласиться, N - отказаться.", nickplayer1);
    SendClientMessage(ID, -1, sg);
    Offer[ID] = true;
    return 1;
}

В public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)

if(newkeys == KEY_YES)
{
    if(Offer[playerid] == true)
    {
        new getnick1[MAX_PLAYER_NAME], getnick2[MAX_PLAYER_NAME], sg[45];
        GetPVarString(playerid, "Nick1", getnick1, sizeof(getnick1));
        GetPVarString(playerid, "Nick2", getnick2, sizeof(getnick2));
        format(sg, sizeof(sg), "Вы передали оружие %s", getnick2);
	SendClientMessage(GetPVarInt(playerid, "IDplayer"), -1, sg);
        format(sg, sizeof(sg), "Вы взяли оружие у %s", getnick1);
	SendClientMessage(playerid, -1, sg);
	RemovePlayerWeapon(GetPVarInt(playerid, "IDplayer"), GetPVarInt(playerid, "Gun"));
	GivePlayerWeapon(playerid, GetPVarInt(playerid, "Gun"), GetPVarInt(playerid, "Ammo"));
	DeletePVar(playerid, "Gun");
	DeletePVar(playerid, "Ammo");
	DeletePVar(playerid, "IDplayer");
	DeletePVar(playerid, "Nick1");
	DeletePVar(playerid, "Nick2");
	Offer[playerid] = false;
	return 1;
    }
}
if(newkeys == KEY_NO)
{
    if(Offer[playerid] == true)
    {
        new getnick1[MAX_PLAYER_NAME], getnick2[MAX_PLAYER_NAME], sg[60];
        GetPVarString(playerid, "Nick1", getnick1, sizeof(getnick1));
        GetPVarString(playerid, "Nick2", getnick2, sizeof(getnick2));
        format(sg, sizeof(sg), "%s отказался принимать ваше оружие", getnick2);
	SendClientMessage(GetPVarInt(playerid, "IDplayer"), -1, sg);
	format(sg, sizeof(sg), "Вы отказались принимать оружие от %s", getnick1);
	SendClientMessage(playerid, -1, sg);
	DeletePVar(playerid, "Gun");
	DeletePVar(playerid, "Ammo");
	DeletePVar(playerid, "IDplayer");
	DeletePVar(playerid, "Nick1");
	DeletePVar(playerid, "Nick2");
	Offer[playerid] = false;
	return 1;
    }
}

Если у вас ошибка error 017: undefined symbol "RemovePlayerWeapon", то добавьте в конец мода следующий код.

RemovePlayerWeapon(playerid, weaponid)


{
new plyWeapons[12] = 0;
new plyAmmo[12] = 0;
for(new slot = 0; slot != 12; slot++)
{
new wep, ammo;
GetPlayerWeaponData(playerid, slot, wep, ammo);
if(wep != weaponid && ammo != 0)
{
GetPlayerWeaponData(playerid, slot, plyWeapons[slot], plyAmmo[slot]);
}
}
ResetPlayerWeapons(playerid);
for(new slot = 0; slot != 12; slot++)
{
if(plyAmmo[slot] != 0)
{
GivePlayerWeapon(playerid, plyWeapons[slot], plyAmmo[slot]);
}
}
return 1;
}

 

Если у вас ошибка error 017: undefined symbol "strtok", то добавьте в конец мода следующий код.

strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}
new offset = index;
new result[20];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}

 

 

Автор : Amfy

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Rustyk

Для любого мода? Пошутил чтоль?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Ryslik42

Есть код намного проще

Автор: незнаю

Вырезал из GoldGame

 

Сам проверял, работает отлично!

if(strcmp(cmd, "/giveweapons", true) == 0)
	{
		if(IsPlayerConnected(playerid))
		{
			tmp = strtok(cmdtext, idx);
			if(!strlen(tmp))
			{
				SendClientMessage(playerid, COLOR_GRAD2, " Введите: /giveweapons [Ид игрока]");
				return true;
			}
			giveplayerid = ReturnUser(tmp);
			if(IsPlayerConnected(giveplayerid))
			{
				if(giveplayerid != INVALID_PLAYER_ID)
				{
					if(ProxDetectorS(2.0, playerid, giveplayerid))
					{
						new gunID = GetPlayerWeapon(playerid);
						new gunAmmo = GetPlayerAmmo(playerid);
						GetPlayerName(playerid, sendername, sizeof(sendername));
						GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
						if(gunID != 0 && gunAmmo != 0)
						{
							new weaponname[40];
							GetWeaponName(gunID,weaponname,sizeof(weaponname));
							ServerGivePlayerWeapons(giveplayerid, gunID, gunAmmo);
							RemovePlayerWeapon(playerid, gunID);
							format(string, sizeof(string), "* %s передает %s в руки %s.", sendername, weaponname, giveplayer);
							ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,0,0);
							return true;
						}
						else
						{
							SendClientMessage(playerid, COLOR_GREY, "* У вас нет оружия или вы его не выбрали!");
							return true;
						}
					}
					else
					{
						SendClientMessage(playerid, COLOR_GREY, "   Вы не рядом с игроком! ");
						return true;
					}
				}
			}
		}
		return true;
	}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Smolin

Менее оптимизированный код.

if(strcmp(cmd, "/giveweapons", true) == 0)
{
if(IsPlayerConnected(playerid))
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_GRAD2, " Введите: /giveweapons [Ид игрока]");
giveplayerid = ReturnUser(tmp);
if(IsPlayerConnected(giveplayerid))
{
if(giveplayerid != INVALID_PLAYER_ID)
{
if(!ProxDetectorS(2.0, playerid, giveplayerid)) return SendClientMessage(playerid, COLOR_GREY, "   Вы не рядом с игроком! ");
new gunID = GetPlayerWeapon(playerid);
new gunAmmo = GetPlayerAmmo(playerid);
GetPlayerName(playerid, sendername, sizeof(sendername));
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
if(gunID == 0 && gunAmmo == 0) return SendClientMessage(playerid, COLOR_GREY, "* У вас нет оружия или вы его не выбрали!");
new weaponname[40];
GetWeaponName(gunID,weaponname,sizeof(weaponname));
ServerGivePlayerWeapons(giveplayerid, gunID, gunAmmo);
RemovePlayerWeapon(playerid, gunID);
format(string, sizeof(string), "* %s передает %s в руки %s.", sendername, weaponname, giveplayer);
ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,0,0);
return true;
}
}
}
return true;
}

 

 

 

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.