PaHaNjkee
Специалист
Здраствуйте, уважаемые пользователи Pawno-Info.Ru. Сегодня я напишу мануал по создании работы Тренера. Кратко: он может за любую плату научить любому стилю боя существующем в сампе. Попробую расписать все понятно. Итак начнем:
Ко всем new:
И в public OnPlayerConnect(playerid):
В первую очередь сделаем сохранение и загрузку стиля боя для игрока, добавляем в enum pInfo это (желательно в конец enum'а):
В public OnPlayerConnect(playerid) добавляем следующее:
Потом в public OnPlayerRegister(playerid, password[]), public OnPlayerRename(name[],string[],playerid) и в public SavePlayer(playerid) добавляете следуещее (если нету одного из пабликов, не расстраиваетесь, просто добавьте в остальные паблики. И еще желательно пишите в конец пабликов):
Теперь сделаем загрузку. Для этого в public OnPlayerLogin(playerid,password[]):
Далее сделаем так, чтобы при спавне стиль боя игрока менялся, для этого, в public OnPlayerSpawn(playerid):
Ну а теперь команды, думаю знаете куда вставлять, для тех кто незнает в public OnPlayerCommandText(playerid, cmdtext[]):
1 команда:
Ну и вторая команда, точнее как бы подкоманда, ищем /accept команду, и после какой нибудь подкоманды, например drugs вставляем это:
Ну и самое главное, пикап, и т.д.
Вот это вставьте в паблике ShowStats где все работы:
Создаем 3d текст (В public OnGameModeInit):
И там же создаем пикап:
Теперь ищем команду /join и вставляем там:
С вами был я, PaHaNjkee на этом мой урок завершен. И еще: устроиться можно в Спортзале Лос Сантоса рядом с НаркоПритоном
Ко всем new:
PHP:
new TrenerOffer[MAX_PLAYERS];
new TrenerPrice[MAX_PLAYERS];
new TrenerStyle[MAX_PLAYERS];
PHP:
TrenerOffer[playerid] = 999; TrenerPrice[playerid] = 0; TrenerStyle[playerid] = 0;
В первую очередь сделаем сохранение и загрузку стиля боя для игрока, добавляем в enum pInfo это (желательно в конец enum'а):
PHP:
pFightStyle
PHP:
PlayerInfo[playerid][pFightStyle] = 0;
PHP:
format(var, 32, "FightStyle=%d\n",PlayerInfo[playerid][pFightStyle]);fwrite(hFile, var);
PHP:
if( strcmp( key , "FightStyle" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pFightStyle] = strval( val ); }
PHP:
switch(PlayerInfo[playerid][pFightStyle])
{
case 0,1: SetPlayerFightingStyle(playerid, FIGHT_STYLE_NORMAL);
case 2: SetPlayerFightingStyle(playerid, FIGHT_STYLE_BOXING);
case 3: SetPlayerFightingStyle(playerid, FIGHT_STYLE_KUNGFU);
case 4: SetPlayerFightingStyle(playerid, FIGHT_STYLE_KNEEHEAD);
case 5: SetPlayerFightingStyle(playerid, FIGHT_STYLE_GRABKICK);
case 6: SetPlayerFightingStyle(playerid, FIGHT_STYLE_ELBOW);
}
1 команда:
PHP:
if(strcmp(cmd,"/fightstyle",true)==0)
{
if(IsPlayerConnected(playerid))
{
if(PlayerInfo[playerid][pJob] != 12) // ид работы ставите на свой
{
SendClientMessage(playerid,COLOR_GREY,"Вы не Тренер!");
return 1;
}
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_ISPOLZUY, "Используй: /fightstyle [ид] [стиль боя] [цена]");
return 1;
}
//giveplayerid = strval(tmp);
giveplayerid = ReturnUser(tmp);
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_ISPOLZUY, "Используй: /fightstyle [ид] [стиль боя] [цена]");
return 1;
}
new style = strval(tmp); //присваиваем значение переменной
if(style < 1 || style > 6) { SendClientMessage(playerid, COLOR_GREY, "Стиль боя должен быть от 1 до 6!"); return 1; }
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_ISPOLZUY, "Используй: /fightstyle [ид] [стиль боя] [цена]");
return 1;
}
tmp = strtok(cmdtext, idx); //делаем пробел
new money = strval(tmp);
if(money < 1 || money > 3000) { SendClientMessage(playerid, COLOR_GREY, "Цена должна быть не меньше $1 и не больше $3000!"); return 1; }
if (IsPlayerConnected(giveplayerid))
{
if(giveplayerid != INVALID_PLAYER_ID)
{
if (ProxDetectorS(8.0, playerid, giveplayerid))
{
if(giveplayerid == playerid)
{
SendClientMessage(playerid, COLOR_GREY, "Нельзя обучить себя!");
return 1;
}
if(style == 2 && PlayerInfo[playerid][pBoxSkill] < 50)
{
SendClientMessage(playerid,COLOR_GREY,"Вы не можете обучить этому стилю боя, у вас маленький скилл!");
return 1;
}
if(style == 3 && PlayerInfo[playerid][pBoxSkill] < 50)
{
SendClientMessage(playerid,COLOR_GREY,"Вы не можете обучить этому стилю боя, у вас маленький скилл!");
return 1;
}
if(style == 4 && PlayerInfo[playerid][pBoxSkill] < 100)
{
SendClientMessage(playerid,COLOR_GREY,"Вы не можете обучить этому стилю боя, у вас маленький скилл!");
return 1;
}
if(style == 5 && PlayerInfo[playerid][pBoxSkill] < 200)
{
SendClientMessage(playerid,COLOR_GREY,"Вы не можете обучить этому стилю боя, у вас маленький скилл!");
return 1;
}
if(style == 6 && PlayerInfo[playerid][pBoxSkill] < 400)
{
SendClientMessage(playerid,COLOR_GREY,"Вы не можете обучить этому стилю боя, у вас маленький скилл!");
return 1;
}
new sttext[50];
if(style == 1)
{
sttext = "Normal";
}
else if(style == 2)
{
sttext = "Boxing";
}
else if(style == 3)
{
sttext = "Kungfu";
}
else if(style == 4)
{
sttext = "Knee Head";
}
else if(style == 5)
{
sttext = "Grab Kick";
}
else if(style == 6)
{
sttext = "Elbow";
}
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "* Вы предложили %s обучиться %s за $%d.", giveplayer,sttext, money);
SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
format(string, sizeof(string), "* Тренер %s предлагает вам обучится %s за $%d, (введите /accept fightstyle) чтобы обучиться.", sendername,sttext, money);
SendClientMessage(giveplayerid, COLOR_LIGHTBLUE, string);
TrenerOffer[giveplayerid] = playerid;
TrenerPrice[giveplayerid] = money;
TrenerStyle[giveplayerid] = style;
}
else
{
SendClientMessage(playerid, COLOR_GREY, "Этот игрок не рядом с вами!");
}
}
}
else
{
SendClientMessage(playerid, COLOR_GREY, "Неверный ID/Ник!");
return 1;
}
}
return 1;
}
PHP:
if(strcmp(x_job,"fightstyle",true) == 0)
{
if(TrenerOffer[playerid] < 999)
{
if(IsPlayerConnected(TrenerOffer[playerid]))
{
if(GetPlayerMoney(playerid) > TrenerPrice[playerid])
{
GetPlayerName(TrenerOffer[playerid], giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
PlayerInfo[TrenerOffer[playerid]][pBoxSkill] ++;
if(PlayerInfo[TrenerOffer[playerid]][pBoxSkill] == 50)
{ SendClientMessage(TrenerOffer[playerid], COLOR_YELLOW, "* Ваш скил тренера теперь 2, теперь вы можете обучать другими стилями боя!"); }
else if(PlayerInfo[TrenerOffer[playerid]][pBoxSkill] == 100)
{ SendClientMessage(TrenerOffer[playerid], COLOR_YELLOW, "* Ваш скил тренера теперь 3, теперь вы можете обучать другими стилями боя!"); }
else if(PlayerInfo[TrenerOffer[playerid]][pBoxSkill] == 200)
{ SendClientMessage(TrenerOffer[playerid], COLOR_YELLOW, "* Ваш скил тренера теперь 4, теперь вы можете обучать другими стилями боя!"); }
else if(PlayerInfo[TrenerOffer[playerid]][pBoxSkill] == 400)
{ SendClientMessage(TrenerOffer[playerid], COLOR_YELLOW, "* Ваш скил тренера теперь 5, теперь вы можете обучать другими стилями боя!"); }
format(string, sizeof(string), "* Вы обучились стилю боя за $%d, от тренера %s.",TrenerPrice[playerid],giveplayer);
SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
format(string, sizeof(string), "* Вы обучили стилю боя %s за $%d.",sendername,TrenerPrice[playerid]);
SendClientMessage(TrenerOffer[playerid], COLOR_LIGHTBLUE, string);
GivePlayerMoney(TrenerOffer[playerid], TrenerPrice[playerid]);
GivePlayerMoney(playerid, -TrenerPrice[playerid]);
switch(TrenerStyle[playerid])
{
case 1: SetPlayerFightingStyle(playerid, FIGHT_STYLE_NORMAL);
case 2: SetPlayerFightingStyle(playerid, FIGHT_STYLE_BOXING);
case 3: SetPlayerFightingStyle(playerid, FIGHT_STYLE_KUNGFU);
case 4: SetPlayerFightingStyle(playerid, FIGHT_STYLE_KNEEHEAD);
case 5: SetPlayerFightingStyle(playerid, FIGHT_STYLE_GRABKICK);
case 6: SetPlayerFightingStyle(playerid, FIGHT_STYLE_ELBOW);
}
PlayerInfo[playerid][pFightStyle] = TrenerStyle[playerid];
TrenerOffer[playerid] = 999;
TrenerPrice[playerid] = 0;
TrenerStyle[playerid] = 0;
SavePlayer(playerid);
return 1;
}
else
{
SendClientMessage(playerid, COLOR_GREY, "У вас недостаточно денег!");
return 1;
}
}
return 1;
}
else
{
SendClientMessage(playerid, COLOR_GREY, "Никто не предлогал вас обучиться стилю боя!");
return 1;
}
}
Вот это вставьте в паблике ShowStats где все работы:
PHP:
else if(PlayerInfo[targetid][pJob] == 12) { jtext = "Тренер"; } // 12 измените на свой ид работы
PHP:
Create3DTextLabel(" Работа: Тренер\n Что бы устроится:\n Введите: /join ",COLOR_YELLOW3d,766.0804,14.5133,1001.7004,20.0,0,1);
PHP:
AddStaticPickup(1239, 2, 766.0804,14.5133,1000.7004);
PHP:
else if (GetPlayerState(playerid) == 1 && PlayerToPoint(3.0, playerid,766.0804,14.5133,1000.7004))
{
SendClientMessage(playerid, COLOR_LIGHTBLUE, "* Вы собрались устроиться тренером и подписать 5-ти часовой контракт.");
SendClientMessage(playerid, COLOR_LIGHTBLUE, "* Вы обязаны отработать этот контракт, перед тем, как уйти с работы.");
SendClientMessage(playerid, COLOR_LIGHTBLUE, "* Чтобы подписать контракт напишите /accept job.");
GettingJob[playerid] = 12;
}
