123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386 |
- class FishingRod_Base_New : ItemBase
- {
- void FishingRod_Base_New()
- {
- }
-
- override void SetActions()
- {
- super.SetActions();
-
- AddAction(ActionFishingNew);
- }
-
- override bool GetActionWidgetOverride(out typename name)
- {
- PlayerBase owner;
- if (Class.CastTo(owner,GetHierarchyRootPlayer()))
- {
- ActionFishingNew action;
- if (Class.CastTo(action,owner.GetActionManager().GetRunningAction()) && owner.GetActionManager().GetActionState() == UA_PROCESSING)
- {
- name = ActionDummyContinuousRelease;
- return true;
- }
- }
- return false;
- }
-
- override bool IsOpen()
- {
- return false;
- }
-
- void AnimateFishingRodEx(float phase, bool instant = false)
- {
- if (instant)
- SetAnimationPhaseNow("AnimateRod",phase);
- else
- SetAnimationPhase("AnimateRod",phase);
- }
-
- override void OnDebugSpawn()
- {
- ItemBase hook;
- for (int i = 0; i < 6; ++i)
- {
- if (Class.CastTo(hook,GetGame().CreateObjectEx("Hook", GetPosition(), ECE_PLACE_ON_SURFACE)))
- hook.GetInventory().CreateAttachment("Worm");
- }
-
- if (Class.CastTo(hook,GetInventory().CreateAttachment("Hook")))
- hook.GetInventory().CreateAttachment("Worm");
- }
-
- ///////////////////////////////////////////////////
-
- //! DEPRECATED, used to dictate catch chance
- float GetFishingEffectivityBonus()
- {
- return 0.0;
- }
-
- //! DEPRECATED
- void AnimateFishingRod(bool state)
- {
- AnimateFishingRodEx(state);
- }
- }
- class FishingRod_Base : ItemBase
- {
- const string ANIM_PHASE_OPENED = "OpenRod";
- const string ANIM_PHASE_CLOSED = "CloseRod";
-
- const float BREAK_PULL = 36;
- const float TOO_MUCH_PULL = 32;
- const float HIGH_PULL = 22;
- const float LOW_PULL = 18;
- const float TOO_FEW_PULL = 8;
- const float LOOSE_PULL = 0;
- const int LOSS_BREAK = 0;
- const int LOSS_LOOSE = 1;
- const int WIN = 2;
- const int INTERUPTED = 3;
- const float INIT_LINE_STRETCH = 15;
- const float MIN_FISHING_TIME = 100;
- const float MAX_FISHING_TIME = 150;
- const int FISH_PULL_CHANCE = 15;
- const int FISH_AGILITY = 15;
-
- int m_FishProximity;
- bool m_Fishing;
- ref Timer m_CyclerCatching;
- ref Timer m_Cycler;
- float m_Pull;
- float m_DeltaT;
- bool m_WasPulled;
- bool m_IsFishPulling;
- float m_PullTime;
- float m_FishPull;
- int m_FishingTime;
- PlayerBase m_Player;
- int m_ChanceRange;
-
- void FishingRod_Base()
- {
- m_Fishing = false;
- }
-
- void Init()
- {
- m_Player = PlayerBase.Cast( GetGame().GetPlayer() );
- m_Pull = INIT_LINE_STRETCH;
- m_IsFishPulling = false;
- //TIMERDEPRECATED - randomized time of fishing
- m_FishingTime = Math.RandomInt(MIN_FISHING_TIME,MAX_FISHING_TIME);
- m_ChanceRange = FISH_AGILITY;
- m_FishProximity = FISH_AGILITY;
- //TIMERDEPRECATED
- if(!m_Cycler)
- {
- m_Cycler = new Timer();
- }
- if(!m_CyclerCatching)
- {
- m_CyclerCatching = new Timer();
- }
- m_CyclerCatching.Run(4, this, "Catching", NULL,true);
- m_Player.Message("I have started fishing.", "colorFriendly");
- }
- bool IsFishingActive()
- {
- return m_Fishing;
- }
-
- void ActivateFishing()
- {
- m_Fishing = true;
- //Init();
- }
- void DeactivateFishing()
- {
- End(INTERUPTED);
- }
- void FishPull()
- {
- if ( !m_IsFishPulling )
- {
- float rand = Math.RandomInt(1, FISH_PULL_CHANCE);
- if ( rand <= 2 && m_Pull <= TOO_MUCH_PULL && m_Pull >= TOO_FEW_PULL )
- {
- //TIMERDEPRECATED - randomizing timeframe to pull fish out
- if ( Math.RandomInt(0, 1) )
- {
- m_FishPull = rand;
- }
- else
- {
- m_FishPull = -rand;
- }
- //TIMERDEPRECATED - randomizing timeframe to pull fish out
- m_PullTime = Math.RandomInt(2, 6);
- m_IsFishPulling = true;
- }
- }
- else
- {
- m_PullTime--;
- if (m_PullTime == 0)
- {
- m_IsFishPulling = false;
- }
- }
- }
- void Catching()
- {
- if(m_FishProximity == 0 && m_WasPulled)
- {
- m_CyclerCatching.Stop();
- m_Cycler.Run(0.3, this, "Pulling", NULL,true);
- }
- else
- {
- if (m_WasPulled)
- {
- m_WasPulled = false;
- m_ChanceRange++;
- }
- //TIMERDEPRECATED - randomized proximity of fish to
- m_FishProximity = Math.RandomInt(0,m_ChanceRange);
- string fline = "";
- for (int i = 0; i < m_FishProximity; i++)
- {
- fline += " .";
- }
- m_Player.Message("", "colorStatusChannel");
- m_Player.Message("HOLD right mouse button to pull the fishing line", "colorAction");
- m_Player.Message("", "colorStatusChannel");
- m_Player.Message("", "colorStatusChannel");
- m_Player.Message("", "colorStatusChannel");
- m_Player.Message("Start pulling when J and <*)))>< meet:", "colorStatusChannel");
- m_Player.Message("", "colorStatusChannel");
- m_Player.Message("J"+fline+" <*)))><", "colorImportant");
- if(m_ChanceRange > 0)
- {
- m_ChanceRange--;
- }
- }
- }
- void Pulling()
- {
- float agent_speed_distance = vector.Distance("0 0 0",m_Player.GetModelSpeed());
- if (m_Player.GetItemInHands() != this || !m_Player.IsInWater() || agent_speed_distance > 1 )
- {
- End(INTERUPTED);
- }
- else
- {
- if ( m_FishingTime <= 0)
- {
- ItemBase pcatch = ItemBase.Cast( m_Player.GetInventory().CreateInInventory("Carp") );
- //ItemBase pcatch = ItemBase.Cast( m_Player.CreateInInventory("Carp","cargo_bait") );
- pcatch.SetQuantity(800,false);
- End(WIN);
- }
- else
- {
- FishPull();
- if ( m_IsFishPulling )
- {
- m_Pull += m_FishPull;
- }
- if (m_WasPulled)
- {
- m_Pull += 1;
- }
- else
- {
- m_Pull -= 1;
- }
- m_WasPulled = false;
- m_FishingTime--;
- DisplayState();
- if ( m_Pull <= LOOSE_PULL)
- {
- End(LOSS_LOOSE);
- }
- if ( m_Pull >= BREAK_PULL)
- {
- End(LOSS_BREAK);
- }
- }
- }
- }
- void End( int result )
- {
- m_Cycler.Stop();
- m_CyclerCatching.Stop();
- m_Fishing = false;
-
- switch (result)
- {
- case LOSS_BREAK:
- m_Player.Message("", "colorStatusChannel");
- m_Player.Message("", "colorStatusChannel");
- m_Player.Message("", "colorStatusChannel");
- m_Player.Message("The fish had broken the fishing line and swam away.", "colorImportant");
- m_Player.Message("", "colorStatusChannel");
- m_Player.Message("", "colorStatusChannel");
- m_Player.Message("", "colorStatusChannel");
- m_Player.Message("", "colorStatusChannel");
- break;
-
- case LOSS_LOOSE:
- m_Player.Message("", "colorStatusChannel");
- m_Player.Message("", "colorStatusChannel");
- m_Player.Message("", "colorStatusChannel");
- m_Player.Message("The fish escaped.", "colorImportant");
- m_Player.Message("", "colorStatusChannel");
- m_Player.Message("", "colorStatusChannel");
- m_Player.Message("", "colorStatusChannel");
- m_Player.Message("", "colorStatusChannel");
- break;
-
- case WIN:
- m_Player.Message("", "colorStatusChannel");
- m_Player.Message("", "colorStatusChannel");
- m_Player.Message("", "colorStatusChannel");
- m_Player.Message("I caught the fish!", "colorFriendly");
- m_Player.Message("", "colorStatusChannel");
- m_Player.Message("", "colorStatusChannel");
- m_Player.Message("", "colorStatusChannel");
- m_Player.Message("", "colorStatusChannel");
- break;
-
- case INTERUPTED:
- m_Player.Message("", "colorStatusChannel");
- m_Player.Message("", "colorStatusChannel");
- m_Player.Message("", "colorStatusChannel");
- m_Player.Message("Fishing time is over.", "colorFriendly");
- m_Player.Message("", "colorStatusChannel");
- m_Player.Message("", "colorStatusChannel");
- m_Player.Message("", "colorStatusChannel");
- m_Player.Message("", "colorStatusChannel");
- break;
-
- default:
- Print("Wrong number");
- break;
- }
- }
- void AddPull(float delta)
- {
- m_DeltaT = delta;
- m_WasPulled = true;
- }
- void DisplayState()
- {
- string fline = "";
- for (int i = 0; i < m_Pull; i++)
- {
- fline += "-";
- }
- m_Player.Message("", "colorStatusChannel");
- m_Player.Message("HOLD right mouse button to pull the fishing line", "colorAction");
- m_Player.Message("RELEASE right mouse button to loosen the fishing line", "colorAction");
- m_Player.Message("", "colorStatusChannel");
- m_Player.Message("", "colorStatusChannel");
- m_Player.Message("Fishing line stretch :", "colorStatusChannel");
- m_Player.Message("", "colorStatusChannel");
- if (m_Pull >= TOO_MUCH_PULL)
- {
- m_Player.Message("<"+fline+">", "colorImportant");
- }
- if ( m_Pull >= HIGH_PULL && m_Pull < TOO_MUCH_PULL)
- {
- m_Player.Message("<"+fline+">", "colorAction");
- }
- if ( m_Pull < HIGH_PULL && m_Pull > LOW_PULL)
- {
- m_Player.Message("<"+fline+">", "colorFriendly");
- }
- if ( m_Pull <= LOW_PULL && m_Pull > TOO_FEW_PULL)
- {
- m_Player.Message("<"+fline+">", "colorStatusChannel");
- }
- if (m_Pull <= TOO_FEW_PULL)
- {
- m_Player.Message("<"+fline+">", "colorImportant");
- }
- }
-
- // Conditions
- override bool CanPutInCargo( EntityAI parent )
- {
- if( !super.CanPutInCargo(parent) ) {return false;}
- if ( GetAnimationPhase(ANIM_PHASE_CLOSED) > 0.5 )
- {
- return true;
- }
- return false;
- }
-
- override void SetActions()
- {
- super.SetActions();
-
- //AddAction(ActionToggleFishing);
- //AddAction(ActionFishingNew);
- }
-
- float GetFishingEffectivityBonus()
- {
- return 0.0;
- }
- }
|