BigBen1174
Новичок
Доброе время суток пользователи pawno-info
Суть просьбы такова : Использую мод Open-GTO Нужна помощь в реализации некоторых простых кодов , и исправления пары Скриптов!
Суть просьбы такова : Использую мод 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;
}
Надеюсь верю и жду Ув. пользователи pawno-info.ru
Последнее редактирование:
