Показать сообщение отдельно
Старый 25.09.2007, 03:45   #27
Crayzi
ПроЭктировщик
 
Регистрация: 26.06.2007
Сообщений: 194
Написано 21 полезных сообщений
(для 25 пользователей)
Re: Мод FPS от impersonalis-a.

Сообщение от AndruXa
Я имею ввиду полоску жизней игрока. Когда подбираеш бонус число жизней увеличивается, а полоска нет, пока бот в тебя не пальнет. Я хочу сделать прямую зависимость полоски от числа.
Щас напишу коечто что поидее исправит сею проблемму.
Ну покачто временно решил сделать по подобию того как после попадения пули в игрока оно обновлялось.(сделал пока что для НР и для НО, точнее не сделал а методом копи/пасте дополнил действия при подбирании бонуса)
на строку ниже после "user_H=user_H+20" (это у нас в "упдате юзер" если помните) добавь
Change_H(user_xline,user_H)
аналогичто на строку ниже после "user_H0=user_H0+15" добавь
Change_H(user_xline0,user_H0)
.

Так же где нибудь в начале "Function update_user()" добавь
Change_H(user_b_xline,user_inv\s[user_inv\current])
(эта строчка при старте игры обновит полоску боеприпасов, чтобы она сразу отображалась корректно, ато если изначально боезапас неполон то она отображается не корректно до первого выстрела.)

Ща еще пару сек и сделаю чтобы когда подбираеш бонус дающий пули то полоска означающая их максимум сразуже "пополнялась".
тэкс, короче так, в функции "Function update_user()" надо добавить еще 3 одинаковые строчки в 3 ифки подбирания бонуса к зарядам.
Вот это
"Change_H(user_b_xline,user_inv\s[user_inv\current])"
добавь в
If EntityCollided (user,TypeBonus_ammo_0) Then 
PositionEntity Bonus_ammo_0,Rnd(-40,40),2,Rnd(-40,40)
user_inv\s[0]=user_inv\s[0]+6
EndIf
If user_inv\s[0]>shot_S(0)\max Then 
user_inv\s[0]=shot_S(0)\max
EndIf
получится вот так:
If EntityCollided (user,TypeBonus_ammo_0) Then 
PositionEntity Bonus_ammo_0,Rnd(-40,40),2,Rnd(-40,40)
user_inv\s[0]=user_inv\s[0]+6
;вот оно-
Change_H(user_b_xline,user_inv\s[user_inv\current])
;--------
EndIf
If user_inv\s[0]>shot_S(0)\max Then 
user_inv\s[0]=shot_S(0)\max
EndIf

далее в
If EntityCollided (user,TypeBonus_ammo_1) Then 
PositionEntity Bonus_ammo_1,Rnd(-40,40),2,Rnd(-40,40)
user_inv\s[1]=user_inv\s[1]+30
EndIf
If user_inv\s[1]>shot_S(1)\max Then 
user_inv\s[1]=shot_S(1)\max
EndIf
будет сморется вот так:
 
If EntityCollided (user,TypeBonus_ammo_1) Then 
PositionEntity Bonus_ammo_1,Rnd(-40,40),2,Rnd(-40,40)
user_inv\s[1]=user_inv\s[1]+30
;-----------
Change_H(user_b_xline,user_inv\s[user_inv\current])
;-----------
EndIf
If user_inv\s[1]>shot_S(1)\max Then 
user_inv\s[1]=shot_S(1)\max
EndIf
и последнее
If EntityCollided (user,TypeBonus_ammo_2) Then 
PositionEntity Bonus_ammo_2,Rnd(-40,40),2,Rnd(-40,40)
user_inv\s[2]=user_inv\s[2]+2
EndIf
If user_inv\s[2]>shot_S(2)\max Then 
user_inv\s[2]=shot_S(2)\max
EndIf
станет выглядеть так:
If EntityCollided (user,TypeBonus_ammo_2) Then 
PositionEntity Bonus_ammo_2,Rnd(-40,40),2,Rnd(-40,40)
user_inv\s[2]=user_inv\s[2]+2
Change_H(user_b_xline,user_inv\s[user_inv\current])
EndIf
If user_inv\s[2]>shot_S(2)\max Then 
user_inv\s[2]=shot_S(2)\max
EndIf
Вот с чем я доси неразобрался, так это как к текущим НР ботов попривязывать полоски их НР...

Добавлено(1):
Щас будем сносить тот недо-прыжок какой я сделал ранее (там было слишком много нерабочего, и он был сам по себе какойто не такой) и ставить тот какой я сделал из прыжка impersonalis.
1. Такс короче добавляем новую константу:
Const jumpvel#=.003
2. Удаляем:
gravity#=.01
jumpvel#=.3
3. Удаляем в "Function update_user()":
 pick_ent=LinePick(EntityX(user,1),EntityY(user,1),EntityZ(user,1),0,-3.6,0)
 TranslateEntity user,0,user_vy#*delta_t,0,True
 If pick_ent
 jumping=0
 Else
    jumping=1
  user_vy#=user_vy#-G#*delta_t
 EndIf

4. Добавляем вместо того что удалили вот это:
 pick_ent=LinePick(EntityX(user,1),EntityY(user,1),EntityZ(user,1),0,-3.6,0)
 TranslateEntity user,0,user_vy#*delta_t,0,True
 
 
If pick_ent
  jump_bool=False
 
 Else
  jump_bool=True
  user_vy#=user_vy#-G#*delta_t;
 EndIf
If KeyHit(57) And jump_bool=False Then user_vy#=jumpvel#*delta_t jump_bool=True
5. Удаляем в "While Not KeyHit(1)=1":
If jumping=0
 If KeyDown(57) Then user_vy#=jumpvel# jumping=1
EndIf
If jumping=1
 user_vy#=user_vy#-gravity#*delta_t
 by#=by#+user_vy#
EndIf
If by#<1 Then jumping=0
6. Любуемся нормальным кодом (без лишних кусочков раскиданных повсюду) и плавным прыжком.
Добавлено(2): Ща чудю, мудрю, хочу сделать так чтобы был смысл игры, допустим, надо будет собирать определенный бонус за который будут давать очки, набрав определенное количество очков вы выигруете. Вот думаю, сделать чтоль чтото типо сложности игры, токо это надо делать кнопки... но всеравно ведь до кнопок дело дойдет... пока что сделаю только бонус, и реген НР тож сделаю, будет 1 НР раз в 2.5 сек, но после пополнения до 100 реген отключится.
Тэкс, щас добавим регенерацию.
1. Добавляем новую константу какая будет отвечать за промежуток времени между восстановлением НР:
Const regen_HP_time=2500
2. Добавляем новую глобальную переменную какая будет содержать число восстанавливаемых жизней:
Global user_H_regen=1
3. В "Type inventar" добавим еще 2 строчки:
 Field regen_HP_Flag
 Field last_regen_HP_time
4. В "Function update_user()" добавим перед "End Function"(дабы избежать путаници):
If user_inv\regen_HP_Flag=False And user_H>0 And user_H<100 Then
user_inv\Regen_HP_flag=True
user_H=user_H+user_H_regen
user_inv\last_regen_HP_time=MilliSecs()
Change_H(user_xline,user_H)
EndIf
If MilliSecs()-user_inv\last_regen_HP_time>regen_HP_time And user_inv\Regen_HP_flag=True Then
user_inv\Regen_HP_flag=False 
EndIf
5. Смотрим что у нас получилось, для этого потеряйте в бою какоенибудь количество НР(чтобы было менее 100) и убегите от ботов.
(Offline)
 
Ответить с цитированием