Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Помогите пожалуйста (Мод Open-GTO)

Статус
В этой теме нельзя размещать новые ответы.

BigBen1174

Новичок
Доброе время суток пользователи pawno-info

Суть просьбы такова : Использую мод Open-GTO Нужна помощь в реализации некоторых простых кодов , и исправления пары Скриптов!​

№1 - Очень срочно нуждаюсь в такой приблуде (На определённых координатах в радиусе например 100.0 Не теряется XP (Exp)

Вот Код получения Exp между playerid , killerid

HTML:
stock player_OnPlayerKill(killerid, victimid, reason) // earn xp, kills++
{
	if (GetPVarInt(killerid, "GangID") != 0)
	{
		if (GangKill(GetPVarInt(killerid, "GangID"), killerid, victimid, reason) == 1)
		{
			return;
		}
	}


	GivePVarInt(killerid, "Kills", 1);

	// Give XP
	new XP_give_victim = -((GetPlayerXP(victimid) / 100) * PLAYER_XP_DEATH_MINUS_PROC);
	new XP_give_killer = 0;
	new level_difference = GetPlayerLevel(victimid) - GetPlayerLevel(killerid);
	switch (level_difference)
	{
		default: XP_give_killer = ( (GetPlayerLevel(victimid)+1) * 2 ) * ( (GetPlayerLevel(victimid)+1) * 2 ) * PLAYER_XP_KILL_TARIF;
	}

	if ((GetPlayerXP(killerid) + XP_give_killer) > MAX_XP)
	{
		SetPlayerXP(killerid, MAX_XP);
	}
	else if (XP_give_killer != 0)
	{
		GivePlayerXP(killerid, XP_give_killer, 1);
		CheckPlayerLevel(killerid);
	}
	if (XP_give_victim != 0)
	{
		GivePlayerXP(victimid, XP_give_victim, 1);
		CheckPlayerLevel(victimid);
	}
	//
	// Give Money
	new stolencash = (oGetPlayerMoney(victimid) / 100) * PLAYER_MONEY_DEATH_MINUS_PROC;
	if (stolencash != 0)
	{
		oGivePlayerMoney(victimid,-stolencash, 1);
		oGivePlayerMoney(killerid, stolencash, 1);
	}
	//

	return;
}

№2 - Сис-ма Киллера (заказ убийства) Проблема в том что команда /contract не работает помогите исправить , ещё было бы не плохо переделать Команды для обычного pawn , что бы переделать в include
PHP:
А то CMD не работает если переделать в include

#include <a_samp>

//#define TEST

#define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1

#define Author		"JayZ"
#define Homepage	"samp-byg.ru"
#define FsName		"TheKillers System"

#define invalid		(-1)

#define MAX_ORDERS	50

#define msgcolor	0xFF7F50FF

#define SPD ShowPlayerDialog 

#define D_KILLLIST	8888

new killers;

#define oGivePlayerMoney  GivePlayerMoney
enum KillList
{
	Price,
	Orderid,
	Zakazal,
	ZakazalName[24]
};

new struct[MAX_ORDERS][KillList];

new bool:Hitman[MAX_PLAYERS];
new MAX_HITMANS = 5;

public OnFilterScriptInit()
{
	for (new i; i < MAX_ORDERS; i++)
	{
		struct[i][Price] = invalid;
		struct[i][Orderid] = INVALID_PLAYER_ID;
		struct[i][Zakazal] = INVALID_PLAYER_ID;
	}

	print("» Filterscript: "FsName"");
	print("» Author: "Author"");
	print("» Homepage: "Homepage"");
	killers = CreatePickup(1314, 0, 2037.5177,-1889.3577,999.9080);//координаты ставим свои  
	Create3DTextLabel("{FFFFFF}Киллер", 0xFFFFFFAA, 2037.5177,-1889.3577,999.9080, 10.0, 0, 1);
	Create3DTextLabel("{00FF00}Нажмите кнопку '{FF0000}ALT'", 0x00FF00AA, 2037.5177,-1889.3577,999.8080, 10.0, 0, 1);
	return 1;
}
public OnFilterScriptExit()
{
	print(""FsName" unloaded.");
	return 1;
}
public OnPlayerConnect(playerid)
{
#if defined TEST
	SetPlayerScore(playerid, 20);
	oGivePlayerMoney(playerid, 10000);
#endif
	ClearPlayerStruct(playerid);
	return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
	if (IsPlayerOrdered(playerid))
	{
		DeletePlayerOnKillList(playerid);
	}
	ClearPlayerStruct(playerid);
	return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
	dcmd(contract, 9, cmdtext);
	dcmd(ikiller, 8, cmdtext);
	dcmd(killlist, 8, cmdtext);
	dcmd(resignk, 9, cmdtext);
	dcmd(kfind, 9, cmdtext);
	dcmd(maxkillers, 10, cmdtext);
	return 0;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
	if (dialogid == D_KILLLIST)
	{
		if (!response)return 0;
		new Float:pos[3];
		GetPlayerPos(struct[listitem][Orderid], pos[0], pos[1], pos[2]);
		SetPlayerCheckpoint(playerid, pos[0], pos[1], pos[2], 3.0);
		SendClientMessage(playerid, msgcolor, "На карте отображено последнее местонахождение игрока.");
		SendClientMessage(playerid, msgcolor, "Отключить чекпойнт /kfind");
		return 1;
	}
    if(dialogid == 8889)
        {
            if(response)
            {
				for(new i=0;i<MAX_PLAYERS;i++)
                {
                    switch(listitem)
                    {
                    case 0:
                    {
					dcmd_ikiller(playerid, "");
					return 1;
                    }
					case 1:
					{
					dcmd_killlist(playerid, "");
					return 1;
                    }
					case 2:
                    {
					dcmd_contract(playerid, "");
					return 1;
                    }
					case 3:
                    {
					dcmd_resignk(playerid, "");
					return 1;
                    }
					case 4:
                    {
					SendClientMessage(playerid, 0xFF99FFFF, "/ikiller - Стать киллером!");
					SendClientMessage(playerid, 0xFF99FFFF, "/kfind - Включить местонахождение игрока");
					SendClientMessage(playerid, 0xFF99FFFF, "/killlist - Просмотр всех заказов!");
					SendClientMessage(playerid, 0xFF99FFFF, "/contract - Заказать игрока");
					SendClientMessage(playerid, 0xFF99FFFF, "/resignk - Уволиться");
					return 1;
                    }
                    }
				}
   		   }
		
	}
	return 0;
}
public OnPlayerEnterCheckpoint(playerid)
{
	DisablePlayerCheckpoint(playerid);
	return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
	#pragma unused oldkeys
	if ((newkeys==KEY_WALK)) // Клавиша alt
	{
		if(IsPlayerInRangeOfPoint(playerid, 2.0, 2037.5177, -1889.3577, 998.2080)) // поставим проверку на нахождение игрока возле пульта
        {
            {
			killers = SPD(playerid, 8889, DIALOG_STYLE_LIST,"{ffcf00}Меню Киллера", "Устроиться Киллером  \nПосматреть список заказов \nЗаказать игрока \nУволиться \nКоманды", "Выбрать", "Отмена");
			}
		}
	}
	//------------------------------------------------------------------------------
	return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
    if(pickupid == killers)
    {
    SPD(playerid, 8889, DIALOG_STYLE_LIST,"{ffcf00}Меню Киллера", "Устроиться Киллером  \nПосматреть список заказов \nЗаказать игрока \nУволиться \nКоманды", "Выбрать", "Отмена");
    }  
	return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{	
	if (killerid != INVALID_PLAYER_ID)
	{
		if (Hitman[killerid])
		{
			if (IsPlayerOrdered(playerid))
			{
				new id = GetKillListID(playerid);
				oGivePlayerMoney(killerid, struct[id][Price]);
				SendClientMessage(killerid, msgcolor, "Вы успешно выполнили заказ!");
				if (IsPlayerConnected(struct[id][Zakazal])) SendClientMessage(struct[id][Zakazal], msgcolor, "Ваш заказ выполнили!");
				DeletePlayerOnKillList(playerid);
			}
		}
	}
	return 1;
}


dcmd_resignk(playerid, params[])
{
#pragma unused params
	if (!Hitman[playerid])return SendClientMessage(playerid, msgcolor, "Вы не киллер!");
	Hitman[playerid] = false;
	SetPlayerSkin(playerid, GetPVarInt(playerid, "LastSkin"));
	SendClientMessage(playerid, msgcolor, "Вы ушли с киллеров!");
	return 1;
}
dcmd_kfind(playerid, params[])
{
#pragma unused params
	DisablePlayerCheckpoint(playerid);
	SendClientMessage(playerid, msgcolor, "Местонахождение игрока отключено.");
	return 1;
}
dcmd_ikiller(playerid, params[])
{
#pragma unused params
	if (Hitman[playerid])return SendClientMessage(playerid, msgcolor, "Вы уже работаете на киллеров!");
	if (GetPlayerScore(playerid) < 50)return SendClientMessage(playerid, msgcolor, "Для того чтобы стать Киллером вам нужно быть минимум 50 Лв.");
	if (GetHitmanNumbers() > MAX_HITMANS)return SendClientMessage(playerid, msgcolor, "Лимит для хитманов! /maxhitmans");
	Hitman[playerid] = true;
	SetPVarInt(playerid, "LastSkin", GetPlayerSkin(playerid));
	SetPlayerSkin(playerid, 165);
	SendClientMessage(playerid, msgcolor, "Вы стали хитманом. Просмотр заказов: /killlist");
	SendClientMessage(playerid, msgcolor, "Уйти с хитманов: /resignk");
	return 1;
}
dcmd_maxkillers(playerid, params[])
{
	if (!IsPlayerAdmin(playerid))return SendClientMessage(playerid, msgcolor, "Команда для Rcon администраторов!");
	if (sscanf(params,"%d",params[0]))return SendClientMessage(playerid, msgcolor, "Используйте: /maxkillers [кол-во]");
	MAX_HITMANS = params[0];
	new str[128];
	format(str, sizeof(str), "Максимальное количество киллеров изменено на: %d", MAX_HITMANS);
	SendClientMessage(playerid, msgcolor, str);
	return 1;
}
dcmd_contract(playerid, params[])
{
#if defined TEST
	new count = GetTickCount();
#endif
	if (!GetHitmanNumbers())return SendClientMessage(playerid, msgcolor, "На сервере пока нету киллеров. (/ikiller)");
	if (sscanf(params, "%d%d", params[0], params[1]))return SendClientMessage(playerid, msgcolor, "Используйте: /contract [ID] [награда]");
	if (!IsPlayerConnected(params[0]))return SendClientMessage(playerid, msgcolor, "Этот игрок не подключен!");
	if (IsPlayerOrdered(params[0]))return SendClientMessage(playerid, msgcolor, "Этот игрок уже добавлен в KillList киллеров. /killlist");
	if (GetPlayerMoney(playerid) < params[1])return SendClientMessage(playerid, msgcolor, "У вас нету таких денег!");
	if (!WriteToKillList(playerid, params[0], params[1]))return SendClientMessage(playerid, msgcolor, "Список заказов заполнен, вам придется подождать.");
	oGivePlayerMoney(playerid, -params[1]);
	new str[128];
	format(str, sizeof(str), "Игрок %s[%d] добавлен в список киллеров. Ждите результатов.", name(params[0]), params[0]);
	SendClientMessage(playerid, msgcolor, str);
#if defined TEST
	printf("Time taken to execute dcmd_order: %d", GetTickCount() - count);
#endif
	return 1;
}
dcmd_killlist(playerid, params[])
{
#pragma unused params
	if (!Hitman[playerid])return SendClientMessage(playerid, msgcolor, "Список заказов только для киллеров! /ikiller");
	new text[2048],str[48];
	for (new i; i < MAX_ORDERS; i++)
	{
		if ((struct[i][Price] == invalid) && (struct[i][Orderid] == INVALID_PLAYER_ID) && (struct[i][Zakazal] == INVALID_PLAYER_ID))continue;
		format(str, sizeof(str), "» %s[%d] » Заказчик: %s[%d] » Награда: %d\n", name(struct[i][Orderid]), struct[i][Orderid], struct[i][ZakazalName], struct[i][Zakazal], struct[i][Price]);
		strcat(text, str);
	}
	ShowPlayerDialog(playerid, D_KILLLIST, DIALOG_STYLE_LIST, "Kill List", text, "Выбрать", "Отмена");
	return 1;
}

GetKillListID(playerid)
{
	for (new i; i < MAX_ORDERS; i++)
	{
		if (struct[i][Orderid] == playerid)
		{
			return i;
		}
	}
	return invalid;
}
DeletePlayerOnKillList(playerid)
{
	for (new i; i < MAX_ORDERS; i++)
	{
		if (struct[i][Orderid] == playerid)
		{
			struct[i][Price] = invalid;
			struct[i][Orderid] = INVALID_PLAYER_ID;
			struct[i][Zakazal] = INVALID_PLAYER_ID;
		}
	}
}
GetHitmanNumbers()
{
	new n;
	for (new i; i < GetMaxPlayers(); i++)
	{
		if (IsPlayerConnected(i) && Hitman[i])n++;
	}
	return n;
}
IsPlayerOrdered(orderid)
{
	for (new i; i < MAX_ORDERS; i++)
	{
		if (struct[i][Orderid] == orderid)return 1;
	}
	return 0;
}
WriteToKillList(playerid, orderid, price)
{
	for (new i; i < MAX_ORDERS; i++)
	{
		if ((struct[i][Price] == invalid) && (struct[i][Orderid] == INVALID_PLAYER_ID) && (struct[i][Zakazal] == INVALID_PLAYER_ID))
		{
			struct[i][Price] = price;
			struct[i][Orderid] = orderid;
			struct[i][Zakazal] = playerid;
			struct[i][ZakazalName] = name(playerid);
			return 1;
		}
	}
	return 0;
}
ClearPlayerStruct(playerid)
{
	Hitman[playerid] = false;
}
sscanf(string[], format[], { Float, _ }:...)
{
#if defined isnull
	if (isnull(string))
#else
	if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
#endif
	{
		return format[0];
	}
#pragma tabsize 4
	new
		formatPos = 0,
		stringPos = 0,
		paramPos = 2,
		paramCount = numargs(),
		delim = ' ';
	while (string[stringPos] && string[stringPos] <= ' ')
	{
		stringPos++;
	}
	while (paramPos < paramCount && string[stringPos])
	{
		switch (format[formatPos++])
		{
		case '\0':
		{
			return 0;
		}
		case 'i', 'd':
		{
			new
				neg = 1,
				num = 0,
				ch = string[stringPos];
			if (ch == '-')
			{
				neg = -1;
				ch = string[++stringPos];
			}
			do
			{
				stringPos++;
				if ('0' <= ch <= '9')
				{
					num = (num * 10) + (ch - '0');
				}
				else
				{
					return -1;
				}
			} while ((ch = string[stringPos]) > ' ' && ch != delim);
			setarg(paramPos, 0, num * neg);
		}
		case 'h', 'x':
		{
			new
				num = 0,
				ch = string[stringPos];
			do
			{
				stringPos++;
				switch (ch)
				{
				case 'x', 'X':
				{
					num = 0;
					continue;
				}
				case '0' .. '9':
				{
					num = (num << 4) | (ch - '0');
				}
				case 'a' .. 'f':
				{
					num = (num << 4) | (ch - ('a' - 10));
				}
				case 'A' .. 'F':
				{
					num = (num << 4) | (ch - ('A' - 10));
				}
				default:
				{
					return -1;
				}
				}
			} while ((ch = string[stringPos]) > ' ' && ch != delim);
			setarg(paramPos, 0, num);
		}
		case 'c':
		{
			setarg(paramPos, 0, string[stringPos++]);
		}
		case 'f':
		{

			new changestr[16], changepos = 0, strpos = stringPos;
			while (changepos < 16 && string[strpos] && string[strpos] != delim)
			{
				changestr[changepos++] = string[strpos++];
			}
			changestr[changepos] = '\0';
			setarg(paramPos, 0, _:floatstr(changestr));
		}
		case 'p':
		{
			delim = format[formatPos++];
			continue;
		}
		case '\'':
		{
			new
				end = formatPos - 1,
				ch;
			while ((ch = format[++end]) && ch != '\'') {}
			if (!ch)
			{
				return -1;
			}
			format[end] = '\0';
			if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
			{
				if (format[end + 1])
				{
					return -1;
				}
				return 0;
			}
			format[end] = '\'';
			stringPos = ch + (end - formatPos);
			formatPos = end + 1;
		}
		case 'u':
		{
			new
				end = stringPos - 1,
				id = 0,
				bool:num = true,
				ch;
			while ((ch = string[++end]) && ch != delim)
			{
				if (num)
				{
					if ('0' <= ch <= '9')
					{
						id = (id * 10) + (ch - '0');
					}
					else
					{
						num = false;
					}
				}
			}
			if (num && IsPlayerConnected(id))
			{
				setarg(paramPos, 0, id);
			}
			else
			{
#if !defined foreach
#define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
#define __SSCANF_FOREACH__
#endif
				string[end] = '\0';
				num = false;
				new
					PlayerName[MAX_PLAYER_NAME];
				id = end - stringPos;
				foreach(Player, playerid)
				{
					GetPlayerName(playerid, PlayerName, sizeof (PlayerName));
					if (!strcmp(PlayerName, string[stringPos], true, id))
					{
						setarg(paramPos, 0, playerid);
						num = true;
						break;
					}
				}
				if (!num)
				{
					setarg(paramPos, 0, INVALID_PLAYER_ID);
				}
				string[end] = ch;
#if defined __SSCANF_FOREACH__
#undef foreach
#undef __SSCANF_FOREACH__
#endif
			}
			stringPos = end;
		}
		case 's', 'z':
		{
			new
				i = 0,
				ch;
			if (format[formatPos])
			{
				while ((ch = string[stringPos++]) && ch != delim)
				{
					setarg(paramPos, i++, ch);
				}
				if (!i)
				{
					return -1;
				}
			}
			else
			{
				while ((ch = string[stringPos++]))
				{
					setarg(paramPos, i++, ch);
				}
			}
			stringPos--;
			setarg(paramPos, i, '\0');
		}
		default:
		{
			continue;
		}
		}
		while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
		{
			stringPos++;
		}
		while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
		{
			stringPos++;
		}
		paramPos++;
	}
	do
	{
		if ((delim = format[formatPos++]) > ' ')
		{
			if (delim == '\'')
			{
				while ((delim = format[formatPos++]) && delim != '\'') {}
			}
			else if (delim != 'z')
			{
				return delim;
			}
		}
	} while (delim > ' ');
	return 0;
}
name(playerid)
{
	new PlayerName[24];
	GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
	return PlayerName;
}
№3 Не плохо было бы найти Сис-му банды с захватом зон по их спавну с внесением их только админом в файле для мода Open gto (или отдельная система домов с ганг зоной и захватом и переход дома захватившей банде)(наверно не реально))

Надеюсь верю и жду Ув. пользователи pawno-info.ru
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу