Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!: Работа Тренера - Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ Scr ][ GF ]
Работа Тренера
Оценка: -----

#1
Пользователь офлайн   Romzes 

  • © Pawn-Wiki.Ru
  • Вставить ник
  • Раскрыть информацию
Здраствуйте, уважаемые пользователи.
Описания: Тренер может за любую плату научить любому стилю боя существующем в сампе. Попробую расписать все понятно. Итак начнем:

Ко всем new:
new TrenerOffer[MAX_PLAYERS];
new TrenerPrice[MAX_PLAYERS];
new TrenerStyle[MAX_PLAYERS];


И в public OnPlayerConnect(playerid):
TrenerOffer[playerid] = 999; TrenerPrice[playerid] = 0; TrenerStyle[playerid] = 0;



В первую очередь сделаем сохранение и загрузку стиля боя для игрока, добавляем в enum pInfo это (желательно в конец enum'а):
pFightStyle


В public OnPlayerConnect(playerid) добавляем следующее:
PlayerInfo[playerid][pFightStyle] = 0;


Потом в public OnPlayerRegister(playerid, password[]), public OnPlayerRename(name[],string[],playerid) и в public SavePlayer(playerid) добавляете следуещее (если нету одного из пабликов, не расстраиваетесь, просто добавьте в остальные паблики. И еще желательно пишите в конец пабликов):
format(var, 32, "FightStyle=%d\n",PlayerInfo[playerid][pFightStyle]
);fwrite(hFile, var);


Теперь сделаем загрузку. Для этого в public OnPlayerLogin(playerid,password[]):
if( strcmp( key , "FightStyle" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pFightStyle] = strval( val ); }


Далее сделаем так, чтобы при спавне стиль боя игрока менялся, для этого, в public OnPlayerSpawn(playerid):
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);
    }


Ну а теперь команды, думаю знаете куда вставлять, для тех кто незнает в public OnPlayerCommandText(playerid, cmdtext[]):
1 команда:
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;
	}


Ну и вторая команда, точнее как бы подкоманда, ищем /accept команду, и после какой нибудь подкоманды, например drugs вставляем это:
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 где все работы:
else if(PlayerInfo[targetid][pJob] == 12) { jtext = "Тренер"; } // 12 измените на свой ид работы


Создаем 3d текст (В public OnGameModeInit):
Create3DTextLabel(" Работа: Тренер\n Что бы устроится:\n Введите: /join ",COLOR_YELLOW3d,766.0804,14.5133,1001.7004,20.0,0,1);


И там же создаем пикап:
AddStaticPickup(1239, 2, 766.0804,14.5133,1000.7004);


Теперь ищем команду /join и вставляем там:
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;
		  		}


Автор: PaHaNjkee
И еще: устроиться можно в Спортзале Лос Сантоса рядом с НаркоПритоном
1

#2
Пользователь офлайн   Sergey199705 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию
C:\Documents and Settings\Admin\Рабочий стол\SAMP1\1\msi-roleplay(original 0.3e)\gamemodes\SLR.pwn(22317) : error 017: undefined symbol "var"
C:\Documents and Settings\Admin\Рабочий стол\SAMP1\1\msi-roleplay(original 0.3e)\gamemodes\SLR.pwn(22317) : error 017: undefined symbol "hFile"
C:\Documents and Settings\Admin\Рабочий стол\SAMP1\1\msi-roleplay(original 0.3e)\gamemodes\SLR.pwn(22918) : error 017: undefined symbol "key"
C:\Documents and Settings\Admin\Рабочий стол\SAMP1\1\msi-roleplay(original 0.3e)\gamemodes\SLR.pwn(22919) : error 017: undefined symbol "val"
C:\Documents and Settings\Admin\Рабочий стол\SAMP1\1\msi-roleplay(original 0.3e)\gamemodes\SLR.pwn(22919) : error 017: undefined symbol "Data"
C:\Documents and Settings\Admin\Рабочий стол\SAMP1\1\msi-roleplay(original 0.3e)\gamemodes\SLR.pwn(22920) : error 017: undefined symbol "val"
C:\Documents and Settings\Admin\Рабочий стол\SAMP1\1\msi-roleplay(original 0.3e)\gamemodes\SLR.pwn(24951) : error 017: undefined symbol "x_job"
C:\Documents and Settings\Admin\Рабочий стол\SAMP1\1\msi-roleplay(original 0.3e)\gamemodes\SLR.pwn(24989) : error 017: undefined symbol "SavePlayer"
Почему у меня вылетают такие ошибки? И как вставить последний пункт Теперь ищем команду /join и вставляем там:
0

#3
Пользователь офлайн   Maklayko 

  • Пользователь
  • Вставить ник
  • Раскрыть информацию
C:\Users\User\Desktop\Server Samp\gamemodes\DG.pwn(1804) : error 001: expected token: "}", but found "-identifier-"
C:\Users\User\Desktop\Server Samp\gamemodes\DG.pwn(1805) : error 010: invalid function or declaration
C:\Users\User\Desktop\Server Samp\gamemodes\DG.pwn(2795) : warning 235: public function lacks forward declaration (symbol "OnPlayerRename")
C:\Users\User\Desktop\Server Samp\gamemodes\DG.pwn(2797) : error 017: undefined symbol "var"
C:\Users\User\Desktop\Server Samp\gamemodes\DG.pwn(2797) : error 017: undefined symbol "hFile"
C:\Users\User\Desktop\Server Samp\gamemodes\DG.pwn(2800) : warning 235: public function lacks forward declaration (symbol "SavePlayer")
C:\Users\User\Desktop\Server Samp\gamemodes\DG.pwn(2801) : error 017: undefined symbol "var"
C:\Users\User\Desktop\Server Samp\gamemodes\DG.pwn(2801) : error 021: symbol already defined: "fwrite"
C:\Users\User\Desktop\Server Samp\gamemodes\DG.pwn(2802) : error 010: invalid function or declaration
C:\Users\User\Desktop\Server Samp\gamemodes\DG.pwn(4809) : error 017: undefined symbol "pFightStyle"
C:\Users\User\Desktop\Server Samp\gamemodes\DG.pwn(7251) : error 017: undefined symbol "pFightStyle"
C:\Users\User\Desktop\Server Samp\gamemodes\DG.pwn(16261) : error 017: undefined symbol "var"
C:\Users\User\Desktop\Server Samp\gamemodes\DG.pwn(16261) : error 017: undefined symbol "hFile"
C:\Users\User\Desktop\Server Samp\gamemodes\DG.pwn(16639) : error 017: undefined symbol "key"
C:\Users\User\Desktop\Server Samp\gamemodes\DG.pwn(16639) : error 017: undefined symbol "val"
C:\Users\User\Desktop\Server Samp\gamemodes\DG.pwn(16639) : error 017: undefined symbol "Data"
C:\Users\User\Desktop\Server Samp\gamemodes\DG.pwn(16639) : fatal error 107: too many error messages on one line

Compilation aborted.Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase


15 Errors.
0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей